//using System; //using System.Collections.Generic; //using System.Linq; //using System.Text; //using System.Threading.Tasks; //using MTC; using MTC; using MTConnect; namespace SCMA.AdapterCom { public class GatewayMTC : Gateway { /// /// adapter globale MTC /// /// public Adapter mAdapter = new Adapter(); #region gestione globale oggetto /// /// wrapper init /// public GatewayMTC() { protocollo = gwProtocol.MTC; } /// /// Wrapper metodo Begin /// public override void beginDataCollect() { mAdapter.Begin(); } /// /// Wrapper metodo SendChanged /// public override void sendChanged() { mAdapter.SendChanged(); } /// /// Wrapper metodo imposta tutto a UNAVAILABLE /// public override void setAllUnavailable() { mAdapter.Unavailable(); } /// /// Wrapper metodo START /// public override void start() { mAdapter.Port = port; mAdapter.Start(); } /// /// Wrapper metodo STOP /// public override void stop() { mAdapter.Stop(); } #endregion #region gestione nodi (dataItems, conditions) public override void addItemNodeByType(string key, itemType tipo) { if (!itemNodes.ContainsKey(key)) { // in base al TIPO genero l'oggetto corretto... DataItem currObj; switch (tipo) { case itemType.Condition: currObj = new Condition(key); break; case itemType.Event: currObj = new Event(key); break; case itemType.Message: currObj = new Message(key); break; case itemType.Sample: currObj = new Sample(key); break; default: currObj = new DataItem(key); break; } mAdapter.AddDataItem(currObj); if (tipo == itemType.Condition) { addConditionNode(key, currObj); addItemNode(key, currObj); } else { addItemNode(key, currObj); } } } /// Effettua chiamata VERA su adapter MTConnect... /// /// public override void addItemNode(string key, object value) { if (!itemNodes.ContainsKey(key)) { base.addItemNode(key, value); // aggiungo ad adapter mAdapter.AddDataItem((DataItem)value); } } /// /// Effettua chiamata VERA su adapter MTConnect... /// /// public override void addItemNode(object value) { DataItem currObj = (DataItem)value; string key = value.ToString().Replace("|", ""); try { key = key.Replace(currObj.Value.ToString(), ""); } catch { } if (!itemNodes.ContainsKey(key)) { base.addItemNode(key, value); // aggiungo ad adapter mAdapter.AddDataItem((DataItem)value); } } /// /// Wrapper metodo rimozione di TUTTI gli ITEMS /// public override void removeAllItemNodes() { foreach (var item in itemNodes) { // rimuovo da MTC mAdapter.RemoveDataItem((DataItem)item.Value.cObject); } base.removeAllItemNodes(); } /// /// Wrapper metodo rimozione ITEMS /// /// public override void removeItemNode(string key) { // rimuovo da MTC mAdapter.RemoveDataItem((DataItem)itemNodes[key].cObject); // rimuovo da vett interno base.removeItemNode(key); } public override void updateItemNodeValue(string key, object value) { ((DataItem)getItemNode(key)).Value = value; } public override void updateItemNodeCodeValue(string key, string code, object value) { ((Message)getItemNode(key)).Code = code; ((Message)getItemNode(key)).Value = value; } /// /// wrapper aggiunta condizione /// /// /// public override void addConditionNode(string key, object value) { base.addConditionNode(key, value); // aggiungo ad adapter mAdapter.AddDataItem((Condition)value); } public override void removeAllConditionNodes() { foreach (var item in conditionNodes) { // rimuovo da MTC mAdapter.RemoveDataItem((Condition)item.Value.cObject); } base.removeAllConditionNodes(); } public override void removeConditionNode(string key) { // rimuovo da MTC mAdapter.RemoveDataItem((Condition)conditionNodes[key].cObject); // rimuovo da vett interno base.removeConditionNode(key); } #endregion #region gestione allarmi /// /// Speciofica implementazione x formattazione ALLARMI /// /// public override void addAlarm(allarme currAllarm) { // in base al tipo di allarme decodifico condizione... Condition.Level livello = Condition.Level.NORMAL; switch (currAllarm.livello) { case "WARNING": livello = Condition.Level.WARNING; break; case "FAULT": default: livello = Condition.Level.FAULT; break; } if (conditionNodes.ContainsKey(currAllarm.gruppo)) { Condition mAlarm = (Condition)conditionNodes[currAllarm.gruppo].cObject; mAlarm.Add(livello, currAllarm.descrizione, currAllarm.codNum, "", ""); } } /// /// Speciofica implementazione x formattazione ALLARMI /// /// /// Generico nodo di tipo condition public override void addAlarm(itemNode alarmNode, allarme currAllarm) { // in base al tipo di allarme decodifico condizione... Condition.Level livello = Condition.Level.NORMAL; switch (currAllarm.livello) { case "WARNING": livello = Condition.Level.WARNING; break; case "FAULT": default: livello = Condition.Level.FAULT; break; } Condition mAlarm = (Condition)alarmNode.cObject; mAlarm.Add(livello, currAllarm.descrizione, currAllarm.codNum, "", ""); } /// /// Wrapper setup obj allarmi /// public override void addAlarmNodes() { // registro Condition newCondNode; newCondNode = new Condition("CNC"); addConditionNode("CNC", newCondNode); newCondNode = new Condition("PLC"); addConditionNode("PLC", newCondNode); } /// /// Wrapper inizializzazione allarmi /// public override void initAlarms() { // trasformo i nodi in elenchi conditions e li aggiungo... foreach (var item in conditionNodes) { ((Condition)item.Value.cObject).Normal(); } } /// /// inizializazione allarme a normal /// /// public override void initAlarm(itemNode alarmNode) { Condition mAlarm = (Condition)alarmNode.cObject; mAlarm.Normal(); } #endregion } }