From c094e97920b4cdc66707c8769ab4106111100a12 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 11 Nov 2022 11:01:15 +0100 Subject: [PATCH] UPdate x testing Zetapack PLC --- IOB-UT-NEXT/Enums.cs | 5 + IOB-WIN-NEXT/AdapterForm.cs | 5 + IOB-WIN-NEXT/DATA/CONF/3026.ini | 5 +- IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1.ini | 78 ++++++++++++ IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1.json | 110 ++++++++++++++++ .../DATA/CONF/GIACO_ZPACK_1_MBlock.json | 5 + .../DATA/CONF/GIACO_ZPACK_1_alarm.json | 52 ++++++++ IOB-WIN-NEXT/IobModbusTCPZetapack.cs | 118 +++++++++++------- 8 files changed, 329 insertions(+), 49 deletions(-) create mode 100644 IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1.ini create mode 100644 IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1.json create mode 100644 IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1_MBlock.json create mode 100644 IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1_alarm.json diff --git a/IOB-UT-NEXT/Enums.cs b/IOB-UT-NEXT/Enums.cs index 55daad1c..c33da41b 100644 --- a/IOB-UT-NEXT/Enums.cs +++ b/IOB-UT-NEXT/Enums.cs @@ -328,6 +328,11 @@ namespace IOB_UT_NEXT /// MODBUS_TCP_IMAX_AEROMEC, + /// + /// Adapter Modubus TCP versione Zetapack (Giacovelli) + /// + MODBUS_TCP_ZETAPACK, + /// /// Adapter MTConnect /// diff --git a/IOB-WIN-NEXT/AdapterForm.cs b/IOB-WIN-NEXT/AdapterForm.cs index 06a3cb01..329c3844 100644 --- a/IOB-WIN-NEXT/AdapterForm.cs +++ b/IOB-WIN-NEXT/AdapterForm.cs @@ -1646,6 +1646,11 @@ namespace IOB_WIN_NEXT start.Enabled = true; break; + case tipoAdapter.MODBUS_TCP_ZETAPACK: + iobObj = new IobModbusTCPZetapack(this, IOBConf); + start.Enabled = true; + break; + case tipoAdapter.MTConnect: iobObj = new IobMTC(this, IOBConf); start.Enabled = true; diff --git a/IOB-WIN-NEXT/DATA/CONF/3026.ini b/IOB-WIN-NEXT/DATA/CONF/3026.ini index 78ede1d6..93d60e70 100644 --- a/IOB-WIN-NEXT/DATA/CONF/3026.ini +++ b/IOB-WIN-NEXT/DATA/CONF/3026.ini @@ -24,11 +24,12 @@ CMDADV1=?valore= CMDREBO=/sendReboot.aspx?idxMacchina= [MEMORY] -ADDR_READ=40000 -ADDR_WRITE=40000 +ADDR_READ=40001 +ADDR_WRITE=40001 SIZE_READ=30 SIZE_WRITE=0 HR_BASE_ADDR=40000 +DELTA_BASE=0 [BLINK] diff --git a/IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1.ini b/IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1.ini new file mode 100644 index 00000000..09d2eaaf --- /dev/null +++ b/IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1.ini @@ -0,0 +1,78 @@ +;Configurazione IOB-WIN +[IOB] +;Impianto Zetapack di Locorotondo (test) - Giacovelli +CNCTYPE=MODBUS_TCP_ZETAPACK +PING_MS_TIMEOUT=1000 +MinDeltaSec=5 + +[MACHINE] +VENDOR=Zetapack +MODEL=Linea imballo + +[CNC] +IP=192.168.16.11 +PORT=502 + +[SERVER] +MPIP=http://192.168.1.7 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= + +[MEMORY] +ADDR_READ=40001 +ADDR_WRITE=40001 +SIZE_READ=10 +SIZE_WRITE=0 +HR_BASE_ADDR=40000 +DELTA_BASE=0 + + +[BLINK] +;MAX_COUNTER_BLINK = 30 +MAX_COUNTER_BLINK = 15 +;bit0 = 0 +;bit1 = 0 +;bit2 = 1 +;bit3 = 1 +;bit4 = 1 +;bit5 = 0 +;bit6 = 0 +;bit7 = 0 +BLINK_FILT=0 +;BLINK_FILT=28 + +[OPTPAR] +;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice +PZCOUNT_MODE=STD.DB85.DBRE16 +DISABLE_PZCOUNT=TRUE +ENABLE_SEND_PZC_BLOCK=TRUE +MIN_SEND_PZC_BLOCK=0 +MAX_SEND_PZC_BLOCK=100 +; GEST DATI DYN +ENABLE_DYN_DATA=TRUE +FORCE_DYN_DATA=TRUE +; gestione delta minimo accettabile tra min/MAX +DELTA_VAL=0.1 + +; clock base (da 10ms) +timerIntMs=10 + +; conf parametri memoria READ/WRITE +PARAM_CONF=GIACO_ZPACK_1.json + +NO_PING=FALSE +; conf blocchi memoria x READ +MEM_BLOCK=GIACO_ZPACK_1_MBlock.json +; conf aree allarme +ALARM_CONF=GIACO_ZPACK_1_alarm.json + +; rimozione check limiti min/max dynData +disDynDataRangeCheck=true + +[BRANCH] +NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1.json b/IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1.json new file mode 100644 index 00000000..2ecd5729 --- /dev/null +++ b/IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1.json @@ -0,0 +1,110 @@ +{ + "mMapWrite": { + + }, + "mMapRead": { + //"StatusWord": { + // "name": "StatusWord", + // "description": "Word di Status", + // "memAddr": "40002", + // "tipoMem": "Int", + // "index": 2, + // "size": 1, + // "func": "POINT", + // "period": 90, + // "factor": 1, + // "minVal": 0, + // "maxVal": 65536, + // "unit": "BMap" + //}, + //"StatusDetWord": { + // "name": "StatusDetWord", + // "description": "Word di Status", + // "memAddr": "40005", + // "tipoMem": "Int", + // "index": 5, + // "size": 1, + // "func": "POINT", + // "period": 90, + // "factor": 1, + // "minVal": 0, + // "maxVal": 65536, + // "unit": "BMap" + //}, + "FreqInverter": { + "name": "FreqInverter", + "description": "Frequenza Inverter", + "memAddr": "40011", + "tipoMem": "Real", + "index": 11, + "size": 2, + "func": "MEDIAN", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 999999999, + "unit": "Hz" + }, + "CDOreManuten": { + "name": "CDOreManuten", + "description": "Residuo ore a prossimo service", + "memAddr": "40013", + "tipoMem": "Int", + "index": 13, + "size": 1, + "func": "MEDIAN", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 999999999, + "unit": "h" + }, + "COreTAsp1": { + "name": "COreTAsp1", + "description": "Totale ore funzionamento impianto", + "memAddr": "40014", + "tipoMem": "Int", + "index": 14, + "size": 1, + "func": "MEDIAN", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 999999999, + "unit": "h" + }, + "COrePAsp1": { + "name": "COrePAsp1", + "description": "Parziale ore funzionamento impianto da ultimo service", + "memAddr": "40015", + "tipoMem": "Int", + "index": 15, + "size": 1, + "func": "MEDIAN", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 999999999, + "unit": "h" + }, + "AmpereReale": { + "name": "AmpereReale", + "description": "Assorbimento aspiratore 1", + "memAddr": "40016", + "tipoMem": "Real", + "index": 16, + "size": 2, + "func": "MEDIAN", + "period": 90, + "factor": 1, + "minVal": 0, + "maxVal": 999999999, + "unit": "A" + } + }, + "optMemPar": { + "AutoBitCond": "40002.14=1", + "EStopBitCond": "40002.9=0", + "WorkBitCond": "40002.0=1" + } +} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1_MBlock.json b/IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1_MBlock.json new file mode 100644 index 00000000..1b6d6a80 --- /dev/null +++ b/IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1_MBlock.json @@ -0,0 +1,5 @@ +{ + "ReadBlocks": { + "40000": 30 + } +} \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1_alarm.json b/IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1_alarm.json new file mode 100644 index 00000000..e7822f36 --- /dev/null +++ b/IOB-WIN-NEXT/DATA/CONF/GIACO_ZPACK_1_alarm.json @@ -0,0 +1,52 @@ +[ + { + "description": "Allarmi Impianto", + "tipoMem": "DInt", + "memAddr": "40003", + "index": 3, + "size": 2, + "messages": [ + "ALLARME VENTILATORE 1", + "ALLARME VENTILATORE 2", + "WARNING FILTRI INTASATI", + "WARNING LIVELLO FILTRO", + "ALLARME LIVELLO FILTRO", + "ALLARME TAGLIAFUOCO 1 ASPIRAZIONE ", + "ALLARME TAGLIAFUOCO 2 ASPIRAZIONE ", + "CUMULATIVO ALLARMI ALIMENTAZIONI (24V AC-DC)", + "ALLARME FUORIUSCITA IQUINANTE ", + "ALLARME TERMOVELOCIMETRICO", + "ALLARME RILEVATORE SCINTILLE", + "ALLARME SPORTELLO APERTO", + "ALLARME MOTORE VALVOLA STELLARE FILTRO", + "ALLARME MOTORE COCLEA ", + "ALLARME MOTORE VALVOLA STELLARE CALDAIA", + "ALLARME MOTORE ESTRATTORE FILTRO" + ] + }, + { + "description": "Allarmi Impianto", + "tipoMem": "DInt", + "memAddr": "40004", + "index": 4, + "size": 2, + "messages": [ + "ALLARME MOTORE ASPIRATORE TRAVASO", + "WARNING BY-PASS 1 ASPIRAZIONE", + "WARNING BY-PASS 2 ASPIRAZIONE", + "WARNING BY-PASS 3 ASPIRAZIONE", + "WARNING BY-PASS 4 ASPIRAZIONE", + "ALLARME TERMICO VIBRATORI", + "ALLARME INTASAMENTO ESTRATTORE", + "WARNING FILTRI INTASATI PLENUM", + "CUMULATIVO ALLARMI RECUPERATORE", + "WARNING SERRANDA 1 PARTENZA ASPIRAZIONE", + "WARNING SERRANDA 2 PARTENZA ASPIRAZIONE", + "WARNING SERRANDA 3 PARTENZA ASPIRAZIONE", + "ALLARME IMPLOSIONE TUBAZIONI", + "WARNING IMPLOSIONE TUBAZIONI", + "ALLARME VENTILATORE 3", + "ALLARME INTASAMENTO TASCHE" + ] + } +] \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobModbusTCPZetapack.cs b/IOB-WIN-NEXT/IobModbusTCPZetapack.cs index 754ca2ac..6bd369b7 100644 --- a/IOB-WIN-NEXT/IobModbusTCPZetapack.cs +++ b/IOB-WIN-NEXT/IobModbusTCPZetapack.cs @@ -25,7 +25,7 @@ namespace IOB_WIN_NEXT /// public IobModbusTCPZetapack(AdapterForm caller, IobConfiguration IOBConf) : base(caller, IOBConf) { - lgInfo("NEW IOB ModBus TCP IMAS Aeromec"); + lgInfo("NEW IOB ModBus TCP Zetapack"); // provo lettura una prima volta i dati DYN if (currPLC != null && currPLC.Connected) @@ -43,51 +43,8 @@ namespace IOB_WIN_NEXT #endregion Public Constructors - #region Protected Methods + #region Protected Properties - /// - /// Restituisce status di emergenza, hard coded dall'area di allarmi - /// - protected bool EStop - { - get - { - bool answ = false; - int currStatus = 0; - // hard coded - int statusReg = 40002; - // deve avere allarmi (è un allarme EStop) - if (hasAlarms()) - { - int[] listInt = new int[2]; - listInt = HoldingRegisterLUT[statusReg]; - currStatus = ModbusClient.ConvertRegistersToInt(listInt); - // hard coded il 5° bit - answ = ((currStatus & (1 << 9)) > 0); - } - return answ; - } - } - - /// - /// Restituisce status di LAVORA, hard coded - /// - protected bool Work - { - get - { - bool answ = false; - int currStatus = 0; - // hard coded - int statusReg = 40002; - int[] listInt = new int[2]; - listInt = HoldingRegisterLUT[statusReg]; - currStatus = ModbusClient.ConvertRegistersToInt(listInt); - // hard coded il 5° bit - answ = ((currStatus & (1 << 0)) > 0); - return answ; - } - } /// /// Restituisce status di AUTOmatico, hard coded /// @@ -95,6 +52,8 @@ namespace IOB_WIN_NEXT { get { + return testCondition("WorkBitCond"); +#if false bool answ = false; int currStatus = 0; // hard coded @@ -105,9 +64,49 @@ namespace IOB_WIN_NEXT // hard coded il 5° bit answ = ((currStatus & (1 << 14)) > 0); return answ; +#endif } } + /// + /// Restituisce status di ESTOP triggered (triggered = premuta, altrimenti armed) + /// + protected bool EStopTriggered + { + get + { + return testCondition("EStopBitCond"); + } + } + + /// + /// Restituisce status di LAVORA, hard coded + /// + protected bool Work + { + get + { + return testCondition("WorkBitCond"); +#if false + + bool answ = false; + int currStatus = 0; + // hard coded + int statusReg = 40002; + int[] listInt = new int[2]; + listInt = HoldingRegisterLUT[statusReg]; + currStatus = ModbusClient.ConvertRegistersToInt(listInt); + // hard coded il 5° bit + answ = ((currStatus & (1 << 0)) > 0); + return answ; +#endif + } + } + + #endregion Protected Properties + + #region Protected Methods + /// /// Effettua decodifica aree memoria alla bitmap usata x MAPO /// @@ -139,8 +138,8 @@ namespace IOB_WIN_NEXT } if (HoldingRegisterLUT != null && HoldingRegisterLUT.Count > 0) { - // processo dagli stati + gravi... - if (!EStop) + // se emergenza NON premuta (triggered) indico OK (armata...) + if (!EStopTriggered) { byteSignals += (1 << 7); } @@ -196,6 +195,31 @@ namespace IOB_WIN_NEXT lgTrace("-------------------- Completato test lettura {baseAddr} --------------------"); } + /// + /// Testa la condition modbus da LUT + configurazione + /// + /// + /// + private bool testCondition(string cKey) + { + bool answ = false; + if (OptCheckConditions.ContainsKey(cKey)) + { + int currStatus = 0; + int[] listInt = new int[2]; + listInt = HoldingRegisterLUT[OptCheckConditions[cKey].BaseAddr]; + currStatus = ModbusClient.ConvertRegistersToInt(listInt); + // hard coded il 9° bit a zero + answ = ((currStatus & (1 << OptCheckConditions[cKey].BitNum)) == OptCheckConditions[cKey].ValOk); + lgTrace($"testCondition for {cKey} | BaseAddr: {OptCheckConditions[cKey].BaseAddr} | BitNum: {OptCheckConditions[cKey].BitNum} | ValOk: {OptCheckConditions[cKey].ValOk}"); + } + else + { + lgTrace($"testCondition error: {cKey} not found"); + } + return answ; + } + private void testRead() { foreach (var item in memSetR)