From 4bbd9ab7704c9534e027c7f489724e7c9cd00d79 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Thu, 15 Dec 2022 13:16:28 +0100 Subject: [PATCH 001/164] Aggiunta adapter OPC-UA IMAS --- IOB-UT-NEXT/Enums.cs | 7 +- IOB-WIN-NEXT/AdapterForm.cs | 371 +++++++++--------- IOB-WIN-NEXT/DATA/CONF/3026-MBus.ini | 78 ++++ IOB-WIN-NEXT/DATA/CONF/3026-MBus.json | 110 ++++++ ...3026_MBlock.json => 3026-MBus_MBlock.json} | 0 .../{3026_alarm.json => 3026-MBus_alarm.json} | 0 IOB-WIN-NEXT/DATA/CONF/3026.ini | 33 +- IOB-WIN-NEXT/DATA/CONF/3026.json | 225 ++++++----- IOB-WIN-NEXT/DATA/CONF/GIACO_ULMA_001.ini | 8 +- IOB-WIN-NEXT/IOB-WIN-NEXT.csproj | 7 +- IOB-WIN-NEXT/IobOpcUaImas.cs | 369 +++++++++++++++++ 11 files changed, 892 insertions(+), 316 deletions(-) create mode 100644 IOB-WIN-NEXT/DATA/CONF/3026-MBus.ini create mode 100644 IOB-WIN-NEXT/DATA/CONF/3026-MBus.json rename IOB-WIN-NEXT/DATA/CONF/{3026_MBlock.json => 3026-MBus_MBlock.json} (100%) rename IOB-WIN-NEXT/DATA/CONF/{3026_alarm.json => 3026-MBus_alarm.json} (100%) create mode 100644 IOB-WIN-NEXT/IobOpcUaImas.cs diff --git a/IOB-UT-NEXT/Enums.cs b/IOB-UT-NEXT/Enums.cs index 4d80db55..c35354d0 100644 --- a/IOB-UT-NEXT/Enums.cs +++ b/IOB-UT-NEXT/Enums.cs @@ -360,7 +360,7 @@ namespace IOB_UT_NEXT /// /// Adapter Modubus TCP versione IMAX Aeromacchine (Jetco) /// - MODBUS_TCP_IMAX_AEROMEC, + MODBUS_TCP_IMAS_AEROMEC, /// /// Adapter Modubus TCP versione Saim (Giacovelli) @@ -412,6 +412,11 @@ namespace IOB_UT_NEXT /// OpcUaEwonMecolpress, + /// + /// Adapter OPC-UA per IMAS Aeromec / Jetco + /// + OpcUaImasAeromec, + /// /// Adapter MBH (es Cimolai) /// diff --git a/IOB-WIN-NEXT/AdapterForm.cs b/IOB-WIN-NEXT/AdapterForm.cs index 23c18622..3e2a51af 100644 --- a/IOB-WIN-NEXT/AdapterForm.cs +++ b/IOB-WIN-NEXT/AdapterForm.cs @@ -48,6 +48,79 @@ namespace IOB_WIN_NEXT #endregion Public Fields + #region Protected Fields + + /// + /// contatore veloce + /// + protected int fastCount; + + /// + /// Data-Ora prima apertura FORM... + /// + protected DateTime firstStart; + + /// + /// Oggetto ultimo inviato stato IOB x REDIS + /// + protected IobWinStatus lastIobStatus = new IobWinStatus() { lastUpdate = DateTime.Now.AddHours(-1), lastDataOut = DateTime.Now.AddHours(-1) }; + + /// + /// Oggetto ultimo inviato stato MP-IO x REDIS + /// + protected ServerMpStatus lastSrvStatus = new ServerMpStatus(); + + /// + /// ultimo tentativo riavvio... + /// + protected DateTime lastStartTry; + + /// + /// contatore normale + /// + protected int normCount; + + /// + /// Contatore campionamento memoria + /// + protected int sampleMemCount; + + /// + /// Indica se inviare avvio adapter con FluxLog + /// + protected bool sendStartFLog = false; + + /// + /// contatore lento + /// + protected int slowCount; + + /// + /// contatore sync allarmi + /// + protected int verySlowCount; + + /// + /// Temnpo attesa std in MS + /// + protected int waitRecMSec = 30000; + + #endregion Protected Fields + + #region Private Fields + + /// + /// Dizionario dei valori bloccati x evitare log eccessivo + /// + private Dictionary vetoLogError = new Dictionary(); + + /// + /// Periodo di veto log in minuti + /// + private int vetoPeriodMin = 15; + + #endregion Private Fields + #region Public Constructors /// @@ -150,6 +223,12 @@ namespace IOB_WIN_NEXT #endregion Public Constructors + #region Private Delegates + + private delegate void SafeCallDelegate(string text); + + #endregion Private Delegates + #region Public Properties public int alQueueLen @@ -636,6 +715,94 @@ namespace IOB_WIN_NEXT #endregion Public Properties + #region Protected Properties + + /// + /// Valore protected comunicazione PLC + /// + protected bool _commPlcActive { get; set; } = false; + + /// + /// Valore protetto stato comunicazione + /// + protected int _commSrvActive { get; set; } = 0; + + /// + /// Valore protected semaforo IN + /// + protected Semaforo _sIN { get; set; } = Semaforo.ND; + + /// + /// Valore protected semaforo OUT + /// + protected Semaforo _sOUT { get; set; } = Semaforo.ND; + + /// + /// Codice IOB della macchina cui connettersi (x scegliere corretto file di conf...) + /// + protected string CurrIOB { get; set; } + + protected int delayShowLogMs { get; set; } = utils.CRI("delayShowLogMs"); + + /// + /// Dictionary dei divieti del datamonitor + /// + protected Dictionary dMonDisplVetoVeto { get; set; } = new Dictionary(); + + /// + /// array degli oggetti datamonitor da mostrare + /// + protected Dictionary dMonValues { get; set; } = new Dictionary(); + + /// + /// Veto a NUOVE scritture in COUNTER... + /// + protected DateTime logCounterVeto { get; set; } = DateTime.Now; + + /// + /// Stringa corrente di log... + /// + protected string logWatchString { get; set; } = ""; + + /// + /// Veto a NUOVE scritture in logWatch... + /// + protected DateTime logWatchWriteVeto { get; set; } = DateTime.Now; + + protected int maxAlQueue { get; set; } + + protected int maxEvQueue { get; set; } + + protected int maxFlQueue { get; set; } + + protected int maxMsQueue { get; set; } + + protected int maxRwTrQueue { get; set; } + + protected int maxUlQueue { get; set; } + + protected int qAlLen { get; set; } + + protected int qEvLen { get; set; } + + protected int qFlLen { get; set; } + + protected int qMsLen { get; set; } + + protected int qRTrLen { get; set; } + + protected int qUlLen { get; set; } + + protected int totQueue + { + get + { + return qEvLen + qFlLen + qAlLen + qMsLen + qUlLen; + } + } + + #endregion Protected Properties + #region Public Methods /// @@ -725,7 +892,7 @@ namespace IOB_WIN_NEXT /// /// /// - public void displayTaskAndLog(string txt2show, bool forceDebug=false) + public void displayTaskAndLog(string txt2show, bool forceDebug = false) { lblStatus.Text = txt2show; lblStatus.Invalidate(); @@ -902,153 +1069,6 @@ namespace IOB_WIN_NEXT #endregion Public Methods - #region Protected Fields - - /// - /// contatore veloce - /// - protected int fastCount; - - /// - /// Data-Ora prima apertura FORM... - /// - protected DateTime firstStart; - - /// - /// Oggetto ultimo inviato stato IOB x REDIS - /// - protected IobWinStatus lastIobStatus = new IobWinStatus() { lastUpdate = DateTime.Now.AddHours(-1), lastDataOut = DateTime.Now.AddHours(-1) }; - - /// - /// Oggetto ultimo inviato stato MP-IO x REDIS - /// - protected ServerMpStatus lastSrvStatus = new ServerMpStatus(); - - /// - /// ultimo tentativo riavvio... - /// - protected DateTime lastStartTry; - - /// - /// contatore normale - /// - protected int normCount; - - /// - /// Contatore campionamento memoria - /// - protected int sampleMemCount; - - /// - /// Indica se inviare avvio adapter con FluxLog - /// - protected bool sendStartFLog = false; - - /// - /// contatore lento - /// - protected int slowCount; - - /// - /// contatore sync allarmi - /// - protected int verySlowCount; - - /// - /// Temnpo attesa std in MS - /// - protected int waitRecMSec = 30000; - - #endregion Protected Fields - - #region Protected Properties - - /// - /// Valore protected comunicazione PLC - /// - protected bool _commPlcActive { get; set; } = false; - - /// - /// Valore protetto stato comunicazione - /// - protected int _commSrvActive { get; set; } = 0; - - /// - /// Valore protected semaforo IN - /// - protected Semaforo _sIN { get; set; } = Semaforo.ND; - - /// - /// Valore protected semaforo OUT - /// - protected Semaforo _sOUT { get; set; } = Semaforo.ND; - - /// - /// Codice IOB della macchina cui connettersi (x scegliere corretto file di conf...) - /// - protected string CurrIOB { get; set; } - - protected int delayShowLogMs { get; set; } = utils.CRI("delayShowLogMs"); - - /// - /// Dictionary dei divieti del datamonitor - /// - protected Dictionary dMonDisplVetoVeto { get; set; } = new Dictionary(); - - /// - /// array degli oggetti datamonitor da mostrare - /// - protected Dictionary dMonValues { get; set; } = new Dictionary(); - - /// - /// Veto a NUOVE scritture in COUNTER... - /// - protected DateTime logCounterVeto { get; set; } = DateTime.Now; - - /// - /// Stringa corrente di log... - /// - protected string logWatchString { get; set; } = ""; - - /// - /// Veto a NUOVE scritture in logWatch... - /// - protected DateTime logWatchWriteVeto { get; set; } = DateTime.Now; - - protected int maxAlQueue { get; set; } - - protected int maxEvQueue { get; set; } - - protected int maxFlQueue { get; set; } - - protected int maxMsQueue { get; set; } - - protected int maxRwTrQueue { get; set; } - - protected int maxUlQueue { get; set; } - - protected int qAlLen { get; set; } - - protected int qEvLen { get; set; } - - protected int qFlLen { get; set; } - - protected int qMsLen { get; set; } - - protected int qRTrLen { get; set; } - - protected int qUlLen { get; set; } - - protected int totQueue - { - get - { - return qEvLen + qFlLen + qAlLen + qMsLen + qUlLen; - } - } - - #endregion Protected Properties - #region Protected Methods protected override void Dispose(bool disposing) @@ -1060,6 +1080,20 @@ namespace IOB_WIN_NEXT base.Dispose(disposing); } + /// + /// Effettua logging DEBUG corretto impostanto anche la variabile IOB prima di scrivere... + /// + /// + protected void lgDebug(string txt2log) + { + lg.Factory.Configuration.Variables["codIOB"] = this.CurrIOB; + lg.Debug(txt2log); + // salvo anche in logwatcher... + newDisplayData currDispData = new newDisplayData(); + currDispData.newLiveLogData = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} | INFO | {txt2log}"; + updateFormDisplay(currDispData); + } + /// /// Effettua logging ERROR corretto impostanto anche la variabile IOB prima di scrivere... /// @@ -1093,19 +1127,7 @@ namespace IOB_WIN_NEXT currDispData.newLiveLogData = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} | INFO | {txt2log}"; updateFormDisplay(currDispData); } - /// - /// Effettua logging DEBUG corretto impostanto anche la variabile IOB prima di scrivere... - /// - /// - protected void lgDebug(string txt2log) - { - lg.Factory.Configuration.Variables["codIOB"] = this.CurrIOB; - lg.Debug(txt2log); - // salvo anche in logwatcher... - newDisplayData currDispData = new newDisplayData(); - currDispData.newLiveLogData = $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} | INFO | {txt2log}"; - updateFormDisplay(currDispData); - } + /// /// Effettua logging TRACE corretto impostanto anche la variabile IOB prima di scrivere... /// @@ -1151,26 +1173,6 @@ namespace IOB_WIN_NEXT #endregion Protected Methods - #region Private Fields - - /// - /// Dizionario dei valori bloccati x evitare log eccessivo - /// - private Dictionary vetoLogError = new Dictionary(); - - /// - /// Periodo di veto log in minuti - /// - private int vetoPeriodMin = 15; - - #endregion Private Fields - - #region Private Delegates - - private delegate void SafeCallDelegate(string text); - - #endregion Private Delegates - #region Private Methods private void btnForceAutoOdl_Click(object sender, EventArgs e) @@ -1661,7 +1663,7 @@ namespace IOB_WIN_NEXT start.Enabled = true; break; - case tipoAdapter.MODBUS_TCP_IMAX_AEROMEC: + case tipoAdapter.MODBUS_TCP_IMAS_AEROMEC: iobObj = new IobModbusTCPImaxAeromec(this, IOBConf); start.Enabled = true; break; @@ -1717,6 +1719,11 @@ namespace IOB_WIN_NEXT start.Enabled = true; break; + case tipoAdapter.OpcUaImasAeromec: + iobObj = new IobOpcUaImas(this, IOBConf); + start.Enabled = true; + break; + case tipoAdapter.OpcUaMBH: iobObj = new IobOpcUaMBH(this, IOBConf); start.Enabled = true; diff --git a/IOB-WIN-NEXT/DATA/CONF/3026-MBus.ini b/IOB-WIN-NEXT/DATA/CONF/3026-MBus.ini new file mode 100644 index 00000000..93d60e70 --- /dev/null +++ b/IOB-WIN-NEXT/DATA/CONF/3026-MBus.ini @@ -0,0 +1,78 @@ +;Configurazione IOB-WIN +[IOB] +;Impianto Cedax di Turi (test) - Giacovelli +CNCTYPE=MODBUS_TCP_IMAX_AEROMEC +PING_MS_TIMEOUT=1000 +MinDeltaSec=5 + +[MACHINE] +VENDOR=IMAX +MODEL=Filtro Aria + +[CNC] +IP=192.168.0.80 +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=30 +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=3026.json + +NO_PING=FALSE +; conf blocchi memoria x READ +MEM_BLOCK=3026_MBlock.json +; conf aree allarme +ALARM_CONF=3026_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/3026-MBus.json b/IOB-WIN-NEXT/DATA/CONF/3026-MBus.json new file mode 100644 index 00000000..2ecd5729 --- /dev/null +++ b/IOB-WIN-NEXT/DATA/CONF/3026-MBus.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/3026_MBlock.json b/IOB-WIN-NEXT/DATA/CONF/3026-MBus_MBlock.json similarity index 100% rename from IOB-WIN-NEXT/DATA/CONF/3026_MBlock.json rename to IOB-WIN-NEXT/DATA/CONF/3026-MBus_MBlock.json diff --git a/IOB-WIN-NEXT/DATA/CONF/3026_alarm.json b/IOB-WIN-NEXT/DATA/CONF/3026-MBus_alarm.json similarity index 100% rename from IOB-WIN-NEXT/DATA/CONF/3026_alarm.json rename to IOB-WIN-NEXT/DATA/CONF/3026-MBus_alarm.json diff --git a/IOB-WIN-NEXT/DATA/CONF/3026.ini b/IOB-WIN-NEXT/DATA/CONF/3026.ini index 93d60e70..c6eda758 100644 --- a/IOB-WIN-NEXT/DATA/CONF/3026.ini +++ b/IOB-WIN-NEXT/DATA/CONF/3026.ini @@ -1,8 +1,8 @@ ;Configurazione IOB-WIN [IOB] -;Impianto Cedax di Turi (test) - Giacovelli -CNCTYPE=MODBUS_TCP_IMAX_AEROMEC -PING_MS_TIMEOUT=1000 +;Impianto IMAS AEROMEC Jetco +CNCTYPE=OpcUaImasAeromec +PING_MS_TIMEOUT=500 MinDeltaSec=5 [MACHINE] @@ -11,7 +11,8 @@ MODEL=Filtro Aria [CNC] IP=192.168.0.80 -PORT=502 +PORT=4840 +;GETPRGNAME=true [SERVER] MPIP=http://192.168.1.7 @@ -28,9 +29,6 @@ ADDR_READ=40001 ADDR_WRITE=40001 SIZE_READ=30 SIZE_WRITE=0 -HR_BASE_ADDR=40000 -DELTA_BASE=0 - [BLINK] ;MAX_COUNTER_BLINK = 30 @@ -47,32 +45,27 @@ BLINK_FILT=0 ;BLINK_FILT=28 [OPTPAR] +AUTO_CHANGE_ODL=TRUE +CHANGE_ODL_MODE=DAILY ;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -PZCOUNT_MODE=STD.DB85.DBRE16 -DISABLE_PZCOUNT=TRUE +PZCOUNT_MODE=OPC +DISABLE_PZCOUNT=FALSE 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 +ENABLE_DATA_FILTER=TRUE +ENABLE_CLI_RESTART=TRUE ; gestione delta minimo accettabile tra min/MAX -DELTA_VAL=0.1 +DELTA_VAL=0 ; clock base (da 10ms) timerIntMs=10 ; conf parametri memoria READ/WRITE -PARAM_CONF=3026.json - -NO_PING=FALSE -; conf blocchi memoria x READ -MEM_BLOCK=3026_MBlock.json -; conf aree allarme -ALARM_CONF=3026_alarm.json - -; rimozione check limiti min/max dynData -disDynDataRangeCheck=true +OPC_PARAM_CONF=3026.json [BRANCH] NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/3026.json b/IOB-WIN-NEXT/DATA/CONF/3026.json index 2ecd5729..4e7e58e0 100644 --- a/IOB-WIN-NEXT/DATA/CONF/3026.json +++ b/IOB-WIN-NEXT/DATA/CONF/3026.json @@ -1,110 +1,127 @@ { + "BrowseFullVal": "i=50238", + "BrowseNSIndex": 4, + "BrowseValue": 5001, + "keyPartCount": "", + "keyPartReq": "", + "keyPartId": "", + "keyProgName": "", + "keyExeMode": "", + "keyRunMode": "", + "runModeSend": true, + "pingAsPowerOn": true, + "forcePingOk": false, + "translRunMode": true, + "Identity": { + "UserName": "opc", + "Passwd": "ulmaopc" + }, + "condWork": [], + "condWorkOpc": { + "checkMode": "OR", + "checkList": [ + { + "keyName": "ASPIRATORE 1 IN FUNZIONE", + "targetValue": "True" + } + ] + }, + "condPowerOn": { + "checkMode": "OR", + "negateValue": false, + "checkList": [] + }, + "condReady": { + "checkMode": "OR", + "checkList": [ + { + "keyName": "GENERICO RUN IMPIANTO", + "targetValue": "5" + } + ] + }, + "condManual": { + "checkMode": "OR", + "checkList": [ + { + "keyName": "SCARICO DIRETTO ABILITATO", + "targetValue": "True" + }, + { + "keyName": "SCARICO IN CALDAIA ABILITATO", + "targetValue": "True" + }, + { + "keyName": "SCARICO IN CONTAINER ABILITATO", + "targetValue": "True" + } + ] + }, + "condEStop": { + "checkMode": "AND", + "checkList": [] + }, + "condError": { + "checkMode": "OR", + "checkList": [ + { + "keyName": "ALLARME ALIMENTAZIONE AUSILIARI 24V", + "targetValue": "True" + } + ] + }, + "condCountEnabled": { + "checkMode": "AND", + "checkList": [] + }, + "condWarmUpCoolDown": { + "checkMode": "OR", + "negateValue": true, + "checkList": [] + }, + "condWarning": { + "checkMode": "AND", + "checkList": [] + }, + "condSetup": { + "checkMode": "AND", + "checkList": [] + }, + "fluxLogVeto": [ + ], + "itemTranslation": { + "fdovrd": "PATH FEED OVERRIDE", + "rovrd": "PATH RAPID OVERRIDE", + "RunMode_0": "STOP", + "RunMode_1": "RUN", + "avail": "Machine Available", + "rstat": "Execution Mode", + "mode": "Controller Mode", + "PartName(0)": "Program Name", + "PartDone(0)": "Pezzi Prodotti", + "PartToDo(0)": "Qta Richiesta", + "MachineStatus(0)": "Stato Macchina principale", + "MachineStatus(1)": "Stato Macchina secondario", + "EmergencyState": "Emergenza" + }, "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" - } + "subscribedItems": [ + ], + "WatchDog": { + "IsEnabled": false, + "MemConfRead": "ns=4;s=tomes_1_Watchdog", + "MemConfWrite": "ns=4;s=tomach_1_watchdog", + "MaxVal": 9999 }, - "optMemPar": { - "AutoBitCond": "40002.14=1", - "EStopBitCond": "40002.9=0", - "WorkBitCond": "40002.0=1" + "fluxLogKeyValVeto": { + "RunModeVal": [ + "-1", + "0" + ], + "OPC_PLC/DB231/Attivita": [ + "-1", + "0" + ] } } \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/GIACO_ULMA_001.ini b/IOB-WIN-NEXT/DATA/CONF/GIACO_ULMA_001.ini index 5c26dbb6..5b4032d1 100644 --- a/IOB-WIN-NEXT/DATA/CONF/GIACO_ULMA_001.ini +++ b/IOB-WIN-NEXT/DATA/CONF/GIACO_ULMA_001.ini @@ -1,6 +1,6 @@ ;Configurazione IOB-WIN [IOB] -;Centro di lavoro OpcUa +;impianto ULMA Giacovelli CNCTYPE=OpcUaUlma PING_MS_TIMEOUT=500 MinDeltaSec=5 @@ -29,12 +29,6 @@ ADDR_READ=DB9999.DBB0 ADDR_WRITE=DB9999.DBB0 SIZE_READ=0 SIZE_WRITE=0 -;BIT0=CONN -;BIT1=DB60.DBB1 -;BIT2=PZCOUNT.STD.DB700.DBW22 -;BIT3=DB60.DBB3 -;BIT4=DB60.DBB4 - [BLINK] ;MAX_COUNTER_BLINK = 30 diff --git a/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj b/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj index a13ecd45..e5ff5fdc 100644 --- a/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj +++ b/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj @@ -238,6 +238,7 @@ + @@ -314,15 +315,17 @@ + + - + - + diff --git a/IOB-WIN-NEXT/IobOpcUaImas.cs b/IOB-WIN-NEXT/IobOpcUaImas.cs new file mode 100644 index 00000000..99ef6622 --- /dev/null +++ b/IOB-WIN-NEXT/IobOpcUaImas.cs @@ -0,0 +1,369 @@ +using MapoSDK; +using Newtonsoft.Json; +using Opc.Ua; +using System; +using System.Collections.Generic; +using System.Net.NetworkInformation; + +namespace IOB_WIN_NEXT +{ + public class IobOpcUaImas : IobOpcUa + { + #region Protected Fields + + /// + /// Modalità cambio ODL + /// + protected string CHANGE_ODL_MODE = ""; + + protected bool testDone = false; + + #endregion Protected Fields + + #region Public Constructors + + /// + /// Estende l'init della classe base, impiegando il pacchetto Nuget OPC-UA foundation con la + /// gestione specifica per IMAS OPC-UA (es Jetco) https://github.com/OPCFoundation/UA-.NETStandard + /// + /// + /// + public IobOpcUaImas(AdapterForm caller, IobConfiguration IOBConf) : base(caller, IOBConf) + { + lgInfo("Init OpcUa IMAS"); + // inizializzo classe base... + if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) + { + CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); + } + sendKeyRichiesta = true; + } + + #endregion Public Constructors + + #region Public Methods + + /// + /// Processo i task richiesti e li elimino dalla coda 1:1 + /// + /// + public override Dictionary executeTasks(Dictionary task2exe) + { + // uso metodo base x ora + return base.executeTasks(task2exe); + } + + /// + /// Effettua vero processing contapezzi + /// + public override void processContapezzi() + { + if ((enablePzCountByApp || enablePzCountByIob) && !(disablePzCounteByIob)) + { + // check condizione validazione + if (checkMultiCondition(opcUaParams.condCountEnabled) || opcUaParams.condCountEnabled.checkList.Count == 0) + { + // cerco parametro contapezzi... + string currPzCount = getDataItemValue(opcUaParams.keyPartCount); + + // se ho un contapezzi... processo... + if (!string.IsNullOrEmpty(currPzCount)) + { + int newVal = -1; + bool fatto = Int32.TryParse(currPzCount, out newVal); + + if (fatto) + { + // gestione decremento contapezzi: viene "messo via" solo SE c'è un + // effettivo decremento contapezzi... + if (newVal < contapezziPLC) + { + pzCountResetted = true; + // incremento contatore richiesta + countKeyRichiesta = countKeyRichiesta + 1; + // log + lgInfo("Contapezzi resettato (PLC) --> pzCountResetted = true"); + } + + // salvo nuovo valore contapezziPLC + contapezziPLC = newVal > -1 ? newVal : contapezziPLC; + } + else + { + lgError($"Errore in decodifica valore contapezzi, valore rilevato: {currPzCount}"); + } + } + else + { + lgError("Errore in decodifica valore contapezzi, valore vuoto!"); + } + } + + if (CHANGE_ODL_MODE == "PZCOUNT_RESET") + { + // controllo comunque, se è ZERO il contapezzi, e sul server è maggiore il + // valore x ODL e NON abilitato il trigger reset --> abilito trigger... + if (!pzCountResetted && contapezziPLC == 0 && contapezziIOB > 0) + { + pzCountResetted = true; + // incremento contatore richiesta + countKeyRichiesta = countKeyRichiesta + 1; + // log + lgInfo("Contapezzi resettato (PLC==0 e IOB>PLC) --> pzCountResetted = true"); + } + } + } + } + + /// + /// Effettua reset del contapezzi, NON POSSIBILE in questa versione + /// + /// + public override bool resetcontapezziPLC() + { + bool answ = false; + return answ; + } + + /// + /// Effettua IMPOSTAZIONE FORZATA del contapezzi, NON POSSIBILE in questa versione + /// + /// + public override bool setcontapezziPLC(int newPzCount) + { + bool answ = false; + return answ; + } + + #endregion Public Methods + + #region Protected Methods + + /// + /// Effettua decodifica aree memoria alla bitmap usata x MAPO + /// + protected override void decodeToBaseBitmap() + { + DateTime adesso = DateTime.Now; + // init a zero... + B_input = 0; + + /* ----------------------------------------------------- + * STATE MACHINE 60 STD / SIMULA + *------------------------------------------------------ + * bitmap MAPO + * B0: POWER_ON + * B1: RUN + * B2: pzCount + * B3: allarme + * B4: manuale + * B5: SlowTC (NON gestito qui) + * B6: warm-up / cool-down / setup + * B7: emergenza ARMATA (1=ok, 0 = premuta) + ---------------------------------------------------- */ + + // se valido il check ping lo eseguo... altrimenti lo do x buono + bool checkPing = !opcUaParams.pingAsPowerOn; + string currRun = "N.A."; + if (!checkPing) + { + checkPing = (testPingMachine == IPStatus.Success); + } + // bit 0 (poweron) imposto a 1 SE pingo + PowerOn=="ON"... + bool powerOnOk = checkPing && hasPowerOn; + // procedo SOLO SE mi da ping OK... + if (checkPing) + { + B_input = powerOnOk ? 1 : 0; + + procRunMode(ref currRun); + + // salvo running come = working... + isRunning = isWorking; + + // se ho emergenza premuta --> emergenza! + if (hasEStopArmed) + { + B_input += (1 << 7); + } + // se ho emergenza premuta --> emergenza! + if (isWarmUpCoolDown) + { + B_input += (1 << 6); + } + // se ho almeno 1 allarme E NON SONO IN AUTO --> ALARM! + if (hasError) + { + B_input += (1 << 3); + } + if (isWorking) + { + // RUN = LAVORA! + B_input += (1 << 1); + } + else if (powerOnOk && (!isReady || isManual)) + { + // se NON ready --> manual + B_input += (1 << 4); + } + } + + // se abilitata gestione ODL esegue eventuale chiusura + + // se abilitato watchdog... + if (opcUaParams.WatchDog.IsEnabled) + { + if (adesso.Subtract(lastWatchDogPLC).TotalSeconds > 2) + { + lastWatchDogPLC = adesso; + WatchDog++; + WatchDog = WatchDog > opcUaParams.WatchDog.MaxVal ? 0 : WatchDog; + + lgTrace($"WatchDog val: {WatchDog}"); + try + { + WriteValue commWriteVal = new WriteValue(); + commWriteVal.NodeId = new NodeId(opcUaParams.WatchDog.MemConfWrite); + commWriteVal.AttributeId = Attributes.Value; + commWriteVal.Value = new DataValue(); + commWriteVal.Value.Value = WatchDog; + + List nodes2Write = new List(); + nodes2Write.Add(commWriteVal); + + UA_ref.WriteNodes(nodes2Write); + } + catch (Exception exc) + { + lgError($"Eccezione in gestione WatchDog, valore attuale {WatchDog}{Environment.NewLine}{exc}"); + } + } + } + else + { + lgTrace("WatchDog disabilitato"); + } + + // controllo se sono poweroff e se non ho dati buoni da > 2 minuti --> disconnetto + if (!powerOnOk && adesso.Subtract(lastCurrent).TotalMinutes > 2) + { + tryDisconnect(); + } + + // solo se non ho veto check + int vFactor = 2; + if (vetoCheckStatus < adesso) + { + lgDebug($"Stato variabili checkPing: {testPingMachine}"); + // imposto veto per vetoSeconds... + vetoCheckStatus = adesso.AddSeconds(vetoSeconds * vFactor); + } + + // log opzionale! + if (verboseLog) + { + lgDebug($"Trasformazione checkPing: {checkPing} | hasPowerOn: {hasPowerOn} | B_input: {B_input} | currRun = {currRun}"); + } + } + + /// + /// Effettua vera scrittura parametri + /// + /// + protected override void plcWriteParams(ref List updatedPar) + { + dataConf currMem = null; + int byteSize = 0; + string memAddrWrite = ""; + string serObj = ""; + if (updatedPar != null) + { + List nodes2Write = new List(); + // controllo i parametri... ne gestisco 4... + foreach (var item in updatedPar) + { + try + { + memAddrWrite = ""; + int valInt = 0; + double valReal = 0; + // cerco in area memMapWrite... + if (memMap.mMapWrite.ContainsKey(item.uid)) + { + // recupero! + currMem = memMap.mMapWrite[item.uid]; + byteSize = currMem.size; + memAddrWrite = currMem.memAddr; + + WriteValue commWriteVal = new WriteValue(); + commWriteVal.NodeId = new NodeId(currMem.memAddr); + commWriteVal.AttributeId = Attributes.Value; + commWriteVal.Value = new DataValue(); + commWriteVal.Value.Value = item.reqValue; + + // faccio preliminarmente upsertKey... + upsertKey(currMem.name, currMem.value); + serObj = JsonConvert.SerializeObject(item); + lgInfo($"Inizio processing plcWriteParams per {currMem.name} | valore richiesto {currMem.value}"); + lgInfo($"---------------{Environment.NewLine}UPDATED PARAM:{Environment.NewLine}{serObj}{Environment.NewLine}---------------"); + serObj = JsonConvert.SerializeObject(currMem); + lgInfo($"---------------{Environment.NewLine}MEMORY CONTENT:{Environment.NewLine}{serObj}{Environment.NewLine}---------------"); + + switch (currMem.tipoMem) + { + case plcDataType.Boolean: + break; + + case plcDataType.Int: + case plcDataType.DInt: + case plcDataType.Word: + case plcDataType.DWord: + int.TryParse(item.reqValue, out valInt); + commWriteVal.Value.Value = valInt; + break; + + case plcDataType.Real: + double.TryParse(item.reqValue, out valReal); + commWriteVal.Value.Value = valReal; + break; + + case plcDataType.String: + commWriteVal.Value.Value = item.reqValue; + break; + + default: + break; + } + lgInfo($"---------------{Environment.NewLine}OPC-UA data:{Environment.NewLine}NodeId: {commWriteVal.NodeId}{Environment.NewLine}Value: {commWriteVal.Value.Value}{Environment.NewLine}---------------"); + + if (!string.IsNullOrEmpty(memAddrWrite)) + { + nodes2Write.Add(commWriteVal); + } + else + { + lgInfo($"Errore: memAddrWrite vuoto!"); + } + } + else + { + lgInfo($"Errore uid non trovato in area write memory: {item.uid}, ci sono {memMap.mMapWrite.Count} in area write"); + } + } + catch (Exception exc) + { + lgError($"Eccezione in fase di plcWriteParams per item {item.uid} con valore {item.value}{Environment.NewLine}{exc}"); + } + } + + if (nodes2Write.Count > 0) + { + lgInfo($"Richiesta scrittura {nodes2Write.Count} parametri"); + UA_ref.WriteNodes(nodes2Write); + } + } + } + + #endregion Protected Methods + } +} \ No newline at end of file From 11166ea0245f807aecc23e081fcbe23c75c0aad0 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Thu, 15 Dec 2022 17:01:00 +0100 Subject: [PATCH 002/164] update conf 3026 Jetco --- IOB-WIN-NEXT/DATA/CONF/3026.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IOB-WIN-NEXT/DATA/CONF/3026.ini b/IOB-WIN-NEXT/DATA/CONF/3026.ini index c6eda758..958f8672 100644 --- a/IOB-WIN-NEXT/DATA/CONF/3026.ini +++ b/IOB-WIN-NEXT/DATA/CONF/3026.ini @@ -49,7 +49,7 @@ AUTO_CHANGE_ODL=TRUE CHANGE_ODL_MODE=DAILY ;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice PZCOUNT_MODE=OPC -DISABLE_PZCOUNT=FALSE +DISABLE_PZCOUNT=TRUE ENABLE_SEND_PZC_BLOCK=TRUE MIN_SEND_PZC_BLOCK=0 MAX_SEND_PZC_BLOCK=100 From cf19510baeadc711e2124ef5b60cba0175577d63 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Thu, 15 Dec 2022 17:01:07 +0100 Subject: [PATCH 003/164] ancora udpate 3026 --- IOB-WIN-NEXT/DATA/CONF/3026.json | 55 ++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/IOB-WIN-NEXT/DATA/CONF/3026.json b/IOB-WIN-NEXT/DATA/CONF/3026.json index 4e7e58e0..06048b2c 100644 --- a/IOB-WIN-NEXT/DATA/CONF/3026.json +++ b/IOB-WIN-NEXT/DATA/CONF/3026.json @@ -1,5 +1,5 @@ { - "BrowseFullVal": "i=50238", + "BrowseFullVal": "i=85", "BrowseNSIndex": 4, "BrowseValue": 5001, "keyPartCount": "", @@ -13,8 +13,8 @@ "forcePingOk": false, "translRunMode": true, "Identity": { - "UserName": "opc", - "Passwd": "ulmaopc" + "UserName": "IMAS", + "Passwd": "iM@s_1975" }, "condWork": [], "condWorkOpc": { @@ -59,13 +59,22 @@ }, "condEStop": { "checkMode": "AND", - "checkList": [] + "checkList": [ + { + "keyName": "PULSANTE DI EMERGENZA PREMUTO", + "targetValue": "False" + } + ] }, "condError": { "checkMode": "OR", "checkList": [ { - "keyName": "ALLARME ALIMENTAZIONE AUSILIARI 24V", + "keyName": "CUMULATIVO ALLARMI BLOCCANTI SICUREZZE", + "targetValue": "True" + }, + { + "keyName": "CUMULATIVO ALLARMI IMPIANTO ASPIRAZIONE", "targetValue": "True" } ] @@ -88,13 +97,39 @@ "checkList": [] }, "fluxLogVeto": [ + "Auditing", + "EnabledFlag", + "RedundancySupport", + "LocaleIdArray", + "MaxBrowseContinuationPoints", + "MaxHistoryContinuationPoints", + "MaxMonitoredItemsPerCall", + "MaxNodesPerBrowse", + "MaxNodesPerMethodCall", + "MaxNodesPerNodeManagement", + "MaxNodesPerRegisterNodes", + "MaxNodesPerRead", + "MaxNodesPerTranslateBrowsePathsToNodeIds", + "MaxNodesPerWrite", + "MaxQueryContinuationPoints", + "MinSupportedSampleRate", + "NamespaceArray", + "NamingRule", + "Server", + "ServerArray", + "ServerDiagnostics", + "ServerDiagnosticsSummary", + "ServerProfileArray", + "ServerStatus", + "ServiceLevel", + "SoftwareCertificates" ], "itemTranslation": { "fdovrd": "PATH FEED OVERRIDE", "rovrd": "PATH RAPID OVERRIDE", "RunMode_0": "STOP", "RunMode_1": "RUN", - "avail": "Machine Available", + "SCARICO DIRETTO ABILITATO": "SCARICO DIRETTO ABILITATO", "rstat": "Execution Mode", "mode": "Controller Mode", "PartName(0)": "Program Name", @@ -115,13 +150,5 @@ "MaxVal": 9999 }, "fluxLogKeyValVeto": { - "RunModeVal": [ - "-1", - "0" - ], - "OPC_PLC/DB231/Attivita": [ - "-1", - "0" - ] } } \ No newline at end of file From 2c40dfc38dad8222bed78ef2c7b4977af43311da Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Thu, 15 Dec 2022 17:01:37 +0100 Subject: [PATCH 004/164] =?UTF-8?q?update=20verbosit=C3=A0=20opc-ua=20x=20?= =?UTF-8?q?variazioni=20parametri?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IOB-WIN-NEXT/IobOpcUa.cs | 577 +++++++++++++++-------------- IOB-WIN-NEXT/IobOpcUaOmronIcoel.cs | 2 +- 2 files changed, 290 insertions(+), 289 deletions(-) diff --git a/IOB-WIN-NEXT/IobOpcUa.cs b/IOB-WIN-NEXT/IobOpcUa.cs index 45bddd7e..e763d266 100644 --- a/IOB-WIN-NEXT/IobOpcUa.cs +++ b/IOB-WIN-NEXT/IobOpcUa.cs @@ -17,6 +17,56 @@ namespace IOB_WIN_NEXT { public class IobOpcUa : IobGeneric { + #region Protected Fields + + /// + /// Struttura dove vengono memorizzati i dataitem ed i rispettivi valori x processing + /// + protected Dictionary dataItemMem = new Dictionary(); + + /// + /// Abilitazione restart (da opt par...) + /// + protected bool enableCliRestart = false; + + /// + /// Gestione filtraggio dati + /// + protected bool enableDataFilter = false; + + /// + /// Determina se ha effettuata lettura items in memoria x confronto... + /// + protected bool hasReadItems = false; + + /// + /// Ultimo current received x gestione update periodico... + /// + protected DateTime lastCurrent = DateTime.Now; + + /// + /// Oggetto MAIN x connessione OPC-UA + /// + protected UAClient UA_ref; + + /// + /// Veto controllo status x log... + /// + protected DateTime vetoCheckStatus = DateTime.Now; + + protected int WatchDog = 0; + + #endregion Protected Fields + + #region Private Fields + + /// + /// Elenco degli items da monitorare come risultato del browse iniziale + /// + private Dictionary selectedItemList = new Dictionary(); + + #endregion Private Fields + #region Public Constructors /// @@ -66,6 +116,176 @@ namespace IOB_WIN_NEXT #endregion Public Constructors + #region Protected Properties + + /// + /// Area dati raw per lettura encoded (SE presente) + /// + protected byte[] byteRawData { get; set; } = new byte[1]; + + /// + /// ProgName corrente + /// + protected string currProgName + { + get + { + string answ = ""; + if (!string.IsNullOrEmpty(opcUaParams.keyProgName)) + { + answ = getDataItemValue(opcUaParams.keyProgName); + } + return answ; + } + } + + /// + /// Indica se si debba leggere un area di tipo "encoded" (byte raw --> obj) + /// + protected bool doByteRead { get; set; } = false; + + /// + /// Verifico se abbia ALMENO un errore... + /// + protected bool hasError + { + get + { + return checkMultiCondition(opcUaParams.condError); + } + } + + /// + /// Indica se abbia emergenza ARMATA (cond normale) + /// + protected bool hasEStopArmed + { + get + { + return checkMultiCondition(opcUaParams.condEStop); + } + } + + /// + /// Indica se abbia stato POWER ON (multicondizione) + /// + protected virtual bool hasPowerOn + { + get + { + return checkMultiCondition(opcUaParams.condPowerOn); + } + } + + /// + /// Indica se abbia stato MANUAL (condizioni varie, es stopped) + /// + protected virtual bool isManual + { + get + { + return checkMultiCondition(opcUaParams.condManual); + } + } + + /// + /// Indica se abbia stato READY (condizioni varie, es ausiliari OK) + /// + protected virtual bool isReady + { + get + { + return checkMultiCondition(opcUaParams.condReady); + } + } + + /// + /// Indica se sia in stato Ssetup + /// + protected bool isSetup + { + get + { + return checkMultiCondition(opcUaParams.condSetup); + } + } + + /// + /// Indica se sia in stato WarmUp / CoolDown (riscaldamento/raffreddamento) + /// + protected bool isWarmUpCoolDown + { + get + { + return checkMultiCondition(opcUaParams.condWarmUpCoolDown); + } + } + + /// + /// Indica se sia in stato Warning + /// + protected bool isWarning + { + get + { + return checkMultiCondition(opcUaParams.condWarning); + } + } + + /// + /// Indica se abbia stato READY (condizioni varie, es ausiliari OK) + /// + protected bool isWorking + { + get + { + // cerco SE HO cond OPC Ua o classica... nel caso creo e salvo + if (opcUaParams.condWorkOpc.checkList == null || opcUaParams.condWorkOpc.checkList.Count == 0) + { + opcUaParams.condWorkOpc = new diCheckCondSetup() + { + checkList = opcUaParams.condWork, + checkMode = boolCheckMode.AND, + negateValue = false + }; + } + return checkMultiCondition(opcUaParams.condWorkOpc); + } + } + + /// + /// Periodo massimo (in sec) per letture dati RAW in mancanza di eventi + /// + protected int lastCurrentMaxElapsed { get; set; } = 120; + + /// + /// Parametri specifici MTC + /// + protected OpcUaParamConf opcUaParams { get; set; } + + /// + /// URL x salvataggio elenco dataItems OpcUa + /// + protected string urlSaveDataItems + { + get + { + string answ = ""; + try + { + string machineName = Environment.MachineName; + answ = $@"{cIobConf.serverData.TRANSP}://{cIobConf.serverData.MPIP}{cIobConf.serverData.MPURL}{cIobConf.serverData.CMDALIVE}/saveDataItems/{cIobConf.codIOB}"; + } + catch (Exception exc) + { + lgError(exc, "Errore in composizione urlSaveDataItems"); + } + return answ; + } + } + + #endregion Protected Properties + #region Public Methods /// @@ -190,25 +410,6 @@ namespace IOB_WIN_NEXT return outVal; } - - /// - /// Recupero allarmi specifico x OPC-UA - /// - /// - /// - protected override int getAlarmStatus(BaseAlarmConf item) - { - int answ = 0; - // recupero valore in formato stringa... - string currStatus = getDataItemValue(item.memAddr); - // se non nullo --> recupero int - if (!string.IsNullOrEmpty(currStatus)) - { - int.TryParse(currStatus, out answ); - } - return answ; - } - /// /// Effettua vero processing contapezzi /// @@ -437,7 +638,7 @@ namespace IOB_WIN_NEXT DateTime locTStamp = DateTime.Now; descr = itemTranslation("OPC", MonIt.DisplayName); sVal = $"Change 01: {locTStamp.ToString()} | descr: {descr} | Id: {MonIt.StartNodeId} | Val: {NotifyValue}"; - lgInfo(sVal); + lgDebug(sVal); // verifico se salvare changed = checkSaveValue(MonIt, NotifyValue, true); @@ -513,7 +714,7 @@ namespace IOB_WIN_NEXT DateTime locTStamp = DateTime.Now; descr = itemTranslation("OPC", MonIt.DisplayName); sVal = $"Change 02: {locTStamp.ToString()} | descr: {descr} | Id: {MonIt.StartNodeId} | Val: {currVal}"; - lgInfo(sVal); + lgDebug(sVal); // verifico se salvare changed = checkSaveValue(MonIt, currVal, true) || forceSend; @@ -547,52 +748,6 @@ namespace IOB_WIN_NEXT return changed; } - protected virtual void procRunMode(ref string currRun) - { - // variabili RUN... se richiesto invio runMode - if (opcUaParams.runModeSend) - { - bool hasVetoLK = false; - bool hasVetoLKV = false; - if (!string.IsNullOrEmpty(opcUaParams.keyRunMode)) - { - currRun = getDataItemValue(opcUaParams.keyRunMode); - if (!string.IsNullOrEmpty(currRun)) - { - // se ho valore --> invio - string sVal = ""; - string descr = $"RunModeVal"; - DateTime locTStamp = DateTime.Now; - sVal = $"Change 03: {locTStamp.ToString()} | descr: {descr} | Id: {opcUaParams.keyRunMode} | Val: {currRun}"; - // cerco se sia un dato/valore - hasVetoLK = opcUaParams.fluxLogKeyValVeto.ContainsKey(descr); - if (hasVetoLK) - { - // se c'è controllo il valore... - var valList = opcUaParams.fluxLogKeyValVeto[descr]; - hasVetoLKV = valList.Contains(currRun); - } - if (hasVetoLKV) - { - lgTrace($"NON ACCODATO sample: veto trovato per {descr}/{currRun} in fluxLogKeyValVeto ", false); - } - else - { - accodaFLog(sVal, qEncodeFLog(descr, currRun)); - - // se richiesto provo a tradurre - if (opcUaParams.runModeTrad) - { - string RunModeDescr = itemTranslation("RunMode", currRun); - descr = $"RunMode"; - accodaFLog(sVal, qEncodeFLog(descr, RunModeDescr)); - } - } - } - } - } - } - internal void sendDataItemListToServer(NodeId StartNodeId) { // converto gli attuali nell'elenco dataitem... @@ -645,217 +800,6 @@ namespace IOB_WIN_NEXT #endregion Internal Methods - #region Protected Fields - - /// - /// Struttura dove vengono memorizzati i dataitem ed i rispettivi valori x processing - /// - protected Dictionary dataItemMem = new Dictionary(); - - /// - /// Abilitazione restart (da opt par...) - /// - protected bool enableCliRestart = false; - - /// - /// Gestione filtraggio dati - /// - protected bool enableDataFilter = false; - - /// - /// Determina se ha effettuata lettura items in memoria x confronto... - /// - protected bool hasReadItems = false; - - /// - /// Ultimo current received x gestione update periodico... - /// - protected DateTime lastCurrent = DateTime.Now; - - /// - /// Oggetto MAIN x connessione OPC-UA - /// - protected UAClient UA_ref; - - /// - /// Veto controllo status x log... - /// - protected DateTime vetoCheckStatus = DateTime.Now; - - protected int WatchDog = 0; - - #endregion Protected Fields - - #region Protected Properties - - /// - /// Area dati raw per lettura encoded (SE presente) - /// - protected byte[] byteRawData { get; set; } = new byte[1]; - - /// - /// Indica se si debba leggere un area di tipo "encoded" (byte raw --> obj) - /// - protected bool doByteRead { get; set; } = false; - - /// - /// Verifico se abbia ALMENO un errore... - /// - protected bool hasError - { - get - { - return checkMultiCondition(opcUaParams.condError); - } - } - - /// - /// Indica se abbia emergenza ARMATA (cond normale) - /// - protected bool hasEStopArmed - { - get - { - return checkMultiCondition(opcUaParams.condEStop); - } - } - - /// - /// Indica se abbia stato POWER ON (multicondizione) - /// - protected virtual bool hasPowerOn - { - get - { - return checkMultiCondition(opcUaParams.condPowerOn); - } - } - - /// - /// Indica se abbia stato MANUAL (condizioni varie, es stopped) - /// - protected virtual bool isManual - { - get - { - return checkMultiCondition(opcUaParams.condManual); - } - } - - /// - /// Indica se abbia stato READY (condizioni varie, es ausiliari OK) - /// - protected virtual bool isReady - { - get - { - return checkMultiCondition(opcUaParams.condReady); - } - } - - /// - /// Indica se sia in stato Ssetup - /// - protected bool isSetup - { - get - { - return checkMultiCondition(opcUaParams.condSetup); - } - } - - /// - /// Indica se sia in stato WarmUp / CoolDown (riscaldamento/raffreddamento) - /// - protected bool isWarmUpCoolDown - { - get - { - return checkMultiCondition(opcUaParams.condWarmUpCoolDown); - } - } - - /// - /// Indica se sia in stato Warning - /// - protected bool isWarning - { - get - { - return checkMultiCondition(opcUaParams.condWarning); - } - } - - /// - /// Indica se abbia stato READY (condizioni varie, es ausiliari OK) - /// - protected bool isWorking - { - get - { - // cerco SE HO cond OPC Ua o classica... nel caso creo e salvo - if (opcUaParams.condWorkOpc.checkList == null || opcUaParams.condWorkOpc.checkList.Count == 0) - { - opcUaParams.condWorkOpc = new diCheckCondSetup() - { - checkList = opcUaParams.condWork, - checkMode = boolCheckMode.AND, - negateValue = false - }; - } - return checkMultiCondition(opcUaParams.condWorkOpc); - } - } - - /// - /// ProgName corrente - /// - protected string currProgName - { - get - { - string answ = ""; - if (!string.IsNullOrEmpty(opcUaParams.keyProgName)) - { - answ = getDataItemValue(opcUaParams.keyProgName); - } - return answ; - } - } - - /// - /// Periodo massimo (in sec) per letture dati RAW in mancanza di eventi - /// - protected int lastCurrentMaxElapsed { get; set; } = 120; - - /// - /// Parametri specifici MTC - /// - protected OpcUaParamConf opcUaParams { get; set; } - - /// - /// URL x salvataggio elenco dataItems OpcUa - /// - protected string urlSaveDataItems - { - get - { - string answ = ""; - try - { - string machineName = Environment.MachineName; - answ = $@"{cIobConf.serverData.TRANSP}://{cIobConf.serverData.MPIP}{cIobConf.serverData.MPURL}{cIobConf.serverData.CMDALIVE}/saveDataItems/{cIobConf.codIOB}"; - } - catch (Exception exc) - { - lgError(exc, "Errore in composizione urlSaveDataItems"); - } - return answ; - } - } - - #endregion Protected Properties - #region Protected Methods /// @@ -1134,6 +1078,24 @@ namespace IOB_WIN_NEXT } } + /// + /// Recupero allarmi specifico x OPC-UA + /// + /// + /// + protected override int getAlarmStatus(BaseAlarmConf item) + { + int answ = 0; + // recupero valore in formato stringa... + string currStatus = getDataItemValue(item.memAddr); + // se non nullo --> recupero int + if (!string.IsNullOrEmpty(currStatus)) + { + int.TryParse(currStatus, out answ); + } + return answ; + } + protected byte[] getByteRaw(DataValue obj) { if (obj == null) @@ -1228,17 +1190,54 @@ namespace IOB_WIN_NEXT //reader.Dispose(); } + protected virtual void procRunMode(ref string currRun) + { + // variabili RUN... se richiesto invio runMode + if (opcUaParams.runModeSend) + { + bool hasVetoLK = false; + bool hasVetoLKV = false; + if (!string.IsNullOrEmpty(opcUaParams.keyRunMode)) + { + currRun = getDataItemValue(opcUaParams.keyRunMode); + if (!string.IsNullOrEmpty(currRun)) + { + // se ho valore --> invio + string sVal = ""; + string descr = $"RunModeVal"; + DateTime locTStamp = DateTime.Now; + sVal = $"Change 03: {locTStamp.ToString()} | descr: {descr} | Id: {opcUaParams.keyRunMode} | Val: {currRun}"; + // cerco se sia un dato/valore + hasVetoLK = opcUaParams.fluxLogKeyValVeto.ContainsKey(descr); + if (hasVetoLK) + { + // se c'è controllo il valore... + var valList = opcUaParams.fluxLogKeyValVeto[descr]; + hasVetoLKV = valList.Contains(currRun); + } + if (hasVetoLKV) + { + lgTrace($"NON ACCODATO sample: veto trovato per {descr}/{currRun} in fluxLogKeyValVeto ", false); + } + else + { + accodaFLog(sVal, qEncodeFLog(descr, currRun)); + + // se richiesto provo a tradurre + if (opcUaParams.runModeTrad) + { + string RunModeDescr = itemTranslation("RunMode", currRun); + descr = $"RunMode"; + accodaFLog(sVal, qEncodeFLog(descr, RunModeDescr)); + } + } + } + } + } + } + #endregion Protected Methods - #region Private Fields - - /// - /// Elenco degli items da monitorare come risultato del browse iniziale - /// - private Dictionary selectedItemList = new Dictionary(); - - #endregion Private Fields - #region Private Methods /// @@ -1287,17 +1286,19 @@ namespace IOB_WIN_NEXT Dictionary nodeIdNameList = new Dictionary(); if (!string.IsNullOrEmpty(opcUaParams.BrowseFullVal)) { + lgInfo($"Start browse da BrowseFullVal: {opcUaParams.BrowseFullVal}"); try { UA_ref.Browse(opcUaParams.BrowseFullVal, opcUaParams.filterItemsNodeId, ref nodeIdNameList); } - catch(Exception exc) + catch (Exception exc) { lgError($"Eccezione in browsing BrowseFullVal:{Environment.NewLine}{exc}"); } } else { + lgInfo($"Start browse | BrowseNSIndex: {opcUaParams.BrowseNSIndex} | BrowseValue: {opcUaParams.BrowseValue} | filterItemsNodeId: {opcUaParams.filterItemsNodeId} | "); UA_ref.Browse(opcUaParams.BrowseNSIndex, opcUaParams.BrowseValue, opcUaParams.filterItemsNodeId, ref nodeIdNameList); } // loggo elenco degli item sottocrivibili... diff --git a/IOB-WIN-NEXT/IobOpcUaOmronIcoel.cs b/IOB-WIN-NEXT/IobOpcUaOmronIcoel.cs index 2dec916e..4bc4547f 100644 --- a/IOB-WIN-NEXT/IobOpcUaOmronIcoel.cs +++ b/IOB-WIN-NEXT/IobOpcUaOmronIcoel.cs @@ -507,7 +507,7 @@ namespace IOB_WIN_NEXT string descr = ""; descr = itemTranslation("OPC", MonIt.DisplayName); sVal = $"Change: {locTStamp.ToString()} | descr: {descr} | Id: {MonIt.StartNodeId} | Val: {NotifyValue}"; - lgInfo($"TSP | {sVal}"); + lgDebug($"TSP | {sVal}"); changed = checkSaveValue(MonIt, NotifyValue, false); // cerco se non sia un dato filtrato in FLUXLOG... From 91a0366b3f1ae9a4f83dfedc1a7bb971c53f6473 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 16 Dec 2022 10:05:43 +0100 Subject: [PATCH 005/164] Fix catena display log che pianta SIM_DP_01 --- IOB-WIN-NEXT/AdapterForm.cs | 104 +++++++++++++++++++++++--------- IOB-WIN-NEXT/DATA/CONF/MAIN.ini | 2 +- IOB-WIN-NEXT/IobGeneric.cs | 8 +-- 3 files changed, 79 insertions(+), 35 deletions(-) diff --git a/IOB-WIN-NEXT/AdapterForm.cs b/IOB-WIN-NEXT/AdapterForm.cs index 3e2a51af..8d3adfde 100644 --- a/IOB-WIN-NEXT/AdapterForm.cs +++ b/IOB-WIN-NEXT/AdapterForm.cs @@ -7,6 +7,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.IO; +using System.Linq; using System.Threading; using System.Windows.Forms; @@ -336,19 +337,26 @@ namespace IOB_WIN_NEXT /// public string dataMonitor_0 { +#if false get { return dMonValues[0]; } +#endif set { DateTime adesso = DateTime.Now; - // salvo nell'array... - dMonValues[0] = value; + // salvo in cima alla lista... + dMonValues[0].Insert(0, value); + // se supero limite --> trim! + if (dMonValues[0].Count > nLine2show) + { + dMonValues[0] = dMonValues[0].Take(nLine2show).ToList(); + } if (dMonDisplVetoVeto[0] < adesso) { // se scaduto veto --> display! - lblRawData.Text = value; + lblRawData.Text = String.Join(Environment.NewLine, dMonValues[0]); // update veto! dMonDisplVetoVeto[0] = adesso.AddMilliseconds(delayShowLogMs); } @@ -360,19 +368,26 @@ namespace IOB_WIN_NEXT /// public string dataMonitor_1 { +#if false get { return dMonValues[1]; } +#endif set { DateTime adesso = DateTime.Now; // salvo nell'array... - dMonValues[1] = value; + dMonValues[1].Insert(0, value); + // se supero limite --> trim! + if (dMonValues[1].Count > nLine2show) + { + dMonValues[1] = dMonValues[1].Take(nLine2show).ToList(); + } if (dMonDisplVetoVeto[1] < adesso) { // se scaduto veto --> display! - lblOutMessage.Text = value; + lblOutMessage.Text = String.Join(Environment.NewLine, dMonValues[1]); // update veto! dMonDisplVetoVeto[1] = adesso.AddMilliseconds(delayShowLogMs); } @@ -384,19 +399,26 @@ namespace IOB_WIN_NEXT /// public string dataMonitor_2 { +#if false get { return dMonValues[2]; } +#endif set { DateTime adesso = DateTime.Now; // salvo nell'array... - dMonValues[2] = value; + dMonValues[2].Insert(0, value); + // se supero limite --> trim! + if (dMonValues[2].Count > nLine2show) + { + dMonValues[2] = dMonValues[2].Take(nLine2show).ToList(); + } if (dMonDisplVetoVeto[2] < adesso) { // se scaduto veto --> display! - lblOutMessage2.Text = value; + lblOutMessage2.Text = String.Join(Environment.NewLine, dMonValues[2]); // update veto! dMonDisplVetoVeto[2] = adesso.AddMilliseconds(delayShowLogMs); } @@ -408,19 +430,26 @@ namespace IOB_WIN_NEXT /// public string dataMonitor_3 { +#if false get { return dMonValues[3]; } +#endif set { DateTime adesso = DateTime.Now; // salvo nell'array... - dMonValues[3] = value; + dMonValues[3].Insert(0, value); + // se supero limite --> trim! + if (dMonValues[3].Count > nLine2show) + { + dMonValues[3] = dMonValues[3].Take(nLine2show).ToList(); + } if (dMonDisplVetoVeto[3] < adesso) { // se scaduto veto --> display! - lblOutMessage3.Text = value; + lblOutMessage3.Text = String.Join(Environment.NewLine, dMonValues[3]); // update veto! dMonDisplVetoVeto[3] = adesso.AddMilliseconds(delayShowLogMs); } @@ -523,13 +552,19 @@ namespace IOB_WIN_NEXT { try { - logWatchString = limitLine2show($"{value}{Environment.NewLine}{logWatchString}"); + // aggiungo in testa la NUOVA stringa (eventualmente multiline) + logWatchString.Insert(0, value); + // se supero limite --> trim! + if (logWatchString.Count > nLine2show) + { + logWatchString = logWatchString.Take(nLine2show).ToList(); + } DateTime adesso = DateTime.Now; if (logWatchWriteVeto < adesso) { this.UIThread(delegate { - lblLogfile.Text = logWatchString; + lblLogfile.Text = string.Join(Environment.NewLine, logWatchString); lblLogfile.Refresh(); }); @@ -674,7 +709,13 @@ namespace IOB_WIN_NEXT { try { - lblTaskLog.Text = limitLine2show($"{value}{Environment.NewLine}{lblTaskLog.Text}"); + logTaskString.Insert(0, value); + // se supero limite --> trim! + if (logTaskString.Count > nLine2show) + { + logTaskString = logTaskString.Take(nLine2show).ToList(); + } + lblTaskLog.Text = string.Join(Environment.NewLine, logTaskString); lblTaskLog.Refresh(); } catch (Exception exc) @@ -752,7 +793,7 @@ namespace IOB_WIN_NEXT /// /// array degli oggetti datamonitor da mostrare /// - protected Dictionary dMonValues { get; set; } = new Dictionary(); + protected Dictionary> dMonValues { get; set; } = new Dictionary>(); /// /// Veto a NUOVE scritture in COUNTER... @@ -760,9 +801,14 @@ namespace IOB_WIN_NEXT protected DateTime logCounterVeto { get; set; } = DateTime.Now; /// - /// Stringa corrente di log... + /// Lista String da mostrare quale TaskLog corrente... /// - protected string logWatchString { get; set; } = ""; + protected List logTaskString { get; set; } = new List(); + + /// + /// Lista String da mostrare quale WatchLog corrente... + /// + protected List logWatchString { get; set; } = new List(); /// /// Veto a NUOVE scritture in logWatch... @@ -920,6 +966,7 @@ namespace IOB_WIN_NEXT fermaTutto(false, tryRestart, forceDequeue, updateForm); } +#if false /// /// Effettua un trim della stringa al numero max di linee da mostrare a video /// @@ -939,6 +986,7 @@ namespace IOB_WIN_NEXT } return newString; } +#endif /// /// Salva su file l'oggetto di persistenza dati @@ -994,19 +1042,23 @@ namespace IOB_WIN_NEXT // RealTime display if (!string.IsNullOrWhiteSpace(currDispData.newInData)) { - dataMonitor_0 = limitLine2show($"{currDispData.newInData}{Environment.NewLine}{dataMonitor_0}"); + //dataMonitor_0 = limitLine2show($"{currDispData.newInData}{Environment.NewLine}{dataMonitor_0}"); + dataMonitor_0 = currDispData.newInData; } if (!string.IsNullOrWhiteSpace(currDispData.newSignalData)) { - dataMonitor_1 = limitLine2show($"{currDispData.newSignalData}{Environment.NewLine}{dataMonitor_1}"); + //dataMonitor_1 = limitLine2show($"{currDispData.newSignalData}{Environment.NewLine}{dataMonitor_1}"); + dataMonitor_1 = currDispData.newSignalData; } if (!string.IsNullOrWhiteSpace(currDispData.newFLogData)) { - dataMonitor_3 = limitLine2show($"{currDispData.newFLogData}{Environment.NewLine}{dataMonitor_3}"); + //dataMonitor_3 = limitLine2show($"{currDispData.newFLogData}{Environment.NewLine}{dataMonitor_3}"); + dataMonitor_3 = currDispData.newFLogData; } if (!string.IsNullOrWhiteSpace(currDispData.newUrlCallData)) { - dataMonitor_2 = limitLine2show($"{currDispData.newUrlCallData}{Environment.NewLine}{dataMonitor_2}"); + //dataMonitor_2 = limitLine2show($"{currDispData.newUrlCallData}{Environment.NewLine}{dataMonitor_2}"); + dataMonitor_2 = currDispData.newUrlCallData; } // Bitmap lettura attuale @@ -1054,17 +1106,9 @@ namespace IOB_WIN_NEXT { this.UIThread(delegate { - lblOutMessage3.Text = text; + // accoda messaggio in gestione + dataMonitor_3 = text; }); - - //if (lblOutMessage3.InvokeRequired) - //{ - // var d = new SafeCallDelegate(WriteTextSafe); - // lblOutMessage3.Invoke(d, new object[] { text }); - //} - //else - //{ - //} } #endregion Public Methods @@ -1480,7 +1524,7 @@ namespace IOB_WIN_NEXT for (int i = 0; i < 4; i++) { dMonDisplVetoVeto.Add(i, DateTime.Now); - dMonValues.Add(i, ""); + dMonValues.Add(i, new List()); } } diff --git a/IOB-WIN-NEXT/DATA/CONF/MAIN.ini b/IOB-WIN-NEXT/DATA/CONF/MAIN.ini index 794a370b..d750ed94 100644 --- a/IOB-WIN-NEXT/DATA/CONF/MAIN.ini +++ b/IOB-WIN-NEXT/DATA/CONF/MAIN.ini @@ -45,6 +45,6 @@ CLI_INST=SteamWareSim ;STARTLIST=BAGLIETTO_CIMOLAI_01 ;STARTLIST=SIMUL_01 ;STARTLIST=GIACO_SAIM_003 -STARTLIST=GIACO_SAIM_003 +STARTLIST=SIMUL_01 MAXCNC=10 \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobGeneric.cs b/IOB-WIN-NEXT/IobGeneric.cs index 276a831d..fa02c70f 100644 --- a/IOB-WIN-NEXT/IobGeneric.cs +++ b/IOB-WIN-NEXT/IobGeneric.cs @@ -1538,10 +1538,8 @@ namespace IOB_WIN_NEXT /// public void accodaOtherData(string newLine) { - // inserisco in cima allo stack, trimmo e aggiorno display - string strOtherData = limitLine2show(string.Format("{0}{1}{2}", newLine, Environment.NewLine, parentForm.dataMonitor_3)); - //parentForm.dataMonitor_3 = strOtherData; - parentForm.WriteTextSafe(strOtherData); + // inserisco in cima allo stack + parentForm.WriteTextSafe(newLine); } /// @@ -4512,6 +4510,7 @@ namespace IOB_WIN_NEXT /// Dizionario condizioni di veto log x ogni tipo di messaggio (periodo differente secondo livello) /// protected Dictionary VetoLog { get; set; } = new Dictionary(); + /// /// Dizionario conteggio numero volte che si fa veto log x ogni tipo di messaggio /// @@ -5259,6 +5258,7 @@ namespace IOB_WIN_NEXT } } } + /// /// Verifica se ci sia veto log attivo e gestisce casistiche /// From 34ec183982e489cd626ab377891467c2ecc96dc7 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 16 Dec 2022 17:04:26 +0100 Subject: [PATCH 006/164] minor typo x ModBus read (ok saim 1) --- IOB-WIN-NEXT/DATA/CONF/GIACO_SAIM_003.ini | 4 +-- IOB-WIN-NEXT/DATA/CONF/GIACO_SAIM_003.json | 42 +++++++++++----------- IOB-WIN-NEXT/DATA/CONF/MAIN.ini | 2 +- IOB-WIN-NEXT/IobModbusTCP.cs | 20 ++++++++--- 4 files changed, 39 insertions(+), 29 deletions(-) diff --git a/IOB-WIN-NEXT/DATA/CONF/GIACO_SAIM_003.ini b/IOB-WIN-NEXT/DATA/CONF/GIACO_SAIM_003.ini index 65f2c8dd..401ac1c8 100644 --- a/IOB-WIN-NEXT/DATA/CONF/GIACO_SAIM_003.ini +++ b/IOB-WIN-NEXT/DATA/CONF/GIACO_SAIM_003.ini @@ -10,8 +10,8 @@ VENDOR=SAIM MODEL=Trattamento Ozono [CNC] -IP=192.168.18.12 ;IP=192.168.18.10 +IP=192.168.18.12 PORT=502 [SERVER] @@ -83,7 +83,7 @@ disDynDataRangeCheck=true ; conf file import FILE_IMPORT_FOLDER=C:\GiacenzeLocorotondo FILE_IMPORT_TYPE=*.xlsx -FILE_ARCHIVE_FOLDER=C:\GiacenzeLocorotondo\archivio +FILE_ARCHIVE_FOLDER=C:\GiacenzeLocorotondo\SAIM002 [BRANCH] NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/GIACO_SAIM_003.json b/IOB-WIN-NEXT/DATA/CONF/GIACO_SAIM_003.json index 74acefa7..1ec7013c 100644 --- a/IOB-WIN-NEXT/DATA/CONF/GIACO_SAIM_003.json +++ b/IOB-WIN-NEXT/DATA/CONF/GIACO_SAIM_003.json @@ -7,7 +7,7 @@ "tipoMem": "Int", "index": 31, "size": 1, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 1000, "unit": "PPM" @@ -19,7 +19,7 @@ "tipoMem": "Int", "index": 32, "size": 1, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 1000, "unit": "PPM" @@ -33,7 +33,7 @@ "tipoMem": "Int", "index": 31, "size": 1, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 1000, "unit": "PPM" @@ -45,7 +45,7 @@ "tipoMem": "Int", "index": 32, "size": 1, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 1000, "unit": "PPM" @@ -57,7 +57,7 @@ "tipoMem": "Int", "index": 33, "size": 1, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 1000, "unit": "PPM" @@ -69,7 +69,7 @@ "tipoMem": "Int", "index": 34, "size": 1, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 1000, "unit": "PPM" @@ -81,7 +81,7 @@ "tipoMem": "Int", "index": 33, "size": 1, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 1000, "unit": "PPM" @@ -93,7 +93,7 @@ "tipoMem": "Int", "index": 34, "size": 1, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 1000, "unit": "PPM" @@ -105,7 +105,7 @@ "tipoMem": "Int", "index": 33, "size": 1, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 1000, "unit": "PPM" @@ -117,7 +117,7 @@ "tipoMem": "Int", "index": 34, "size": 1, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 1000, "unit": "PPM" @@ -129,7 +129,7 @@ "tipoMem": "Int", "index": 33, "size": 1, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 1000, "unit": "PPM" @@ -141,7 +141,7 @@ "tipoMem": "Int", "index": 34, "size": 1, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 1000, "unit": "PPM" @@ -153,7 +153,7 @@ "tipoMem": "Int", "index": 33, "size": 1, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 1000, "unit": "PPM" @@ -165,7 +165,7 @@ "tipoMem": "Int", "index": 34, "size": 1, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 1000, "unit": "PPM" @@ -179,7 +179,7 @@ "size": 1, "func": "MAX", "period": 90, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 999999999, "unit": "#" @@ -193,7 +193,7 @@ "size": 1, "func": "MAX", "period": 90, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 999999999, "unit": "#" @@ -207,7 +207,7 @@ "size": 1, "func": "MAX", "period": 90, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 999999999, "unit": "#" @@ -221,7 +221,7 @@ "size": 1, "func": "MAX", "period": 90, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 999999999, "unit": "#" @@ -235,7 +235,7 @@ "size": 1, "func": "MAX", "period": 90, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 999999999, "unit": "#" @@ -249,7 +249,7 @@ "size": 1, "func": "MAX", "period": 90, - "factor": 0.01, + "factor": 1, "minVal": 0, "maxVal": 999999999, "unit": "#" @@ -452,7 +452,7 @@ } }, "optMemPar": { - "AlarmBitCond": "10002.0=0", + "AlarmBitCond": "10002.0=1", "WorkBitCond": "10001.0=1" }, "fileDecod": { diff --git a/IOB-WIN-NEXT/DATA/CONF/MAIN.ini b/IOB-WIN-NEXT/DATA/CONF/MAIN.ini index d750ed94..794a370b 100644 --- a/IOB-WIN-NEXT/DATA/CONF/MAIN.ini +++ b/IOB-WIN-NEXT/DATA/CONF/MAIN.ini @@ -45,6 +45,6 @@ CLI_INST=SteamWareSim ;STARTLIST=BAGLIETTO_CIMOLAI_01 ;STARTLIST=SIMUL_01 ;STARTLIST=GIACO_SAIM_003 -STARTLIST=SIMUL_01 +STARTLIST=GIACO_SAIM_003 MAXCNC=10 \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobModbusTCP.cs b/IOB-WIN-NEXT/IobModbusTCP.cs index 837cdd45..82006fdc 100644 --- a/IOB-WIN-NEXT/IobModbusTCP.cs +++ b/IOB-WIN-NEXT/IobModbusTCP.cs @@ -1115,8 +1115,15 @@ namespace IOB_WIN_NEXT bool answ = false; if (OptCheckCondBit.ContainsKey(cKey)) { - answ = DiscreteInputLUT[OptCheckCondBit[cKey].BaseAddr + indexLutCorr]; - lgTrace($"testDisInBitCondition for {cKey} | BaseAddr: {OptCheckCondBit[cKey].BaseAddr} | BitNum: {OptCheckCondBit[cKey].BitNum} | ValOk: {OptCheckCondBit[cKey].ValOk} | actual: {answ}"); + if (DiscreteInputLUT.Count > 0) + { + int idxMem = OptCheckCondBit[cKey].BaseAddr + indexLutCorr; + if (DiscreteInputLUT.ContainsKey(idxMem)) + { + answ = DiscreteInputLUT[idxMem] == (OptCheckCondBit[cKey].ValOk != 0); + lgTrace($"testDisInBitCondition for {cKey} | BaseAddr: {OptCheckCondBit[cKey].BaseAddr} | BitNum: {OptCheckCondBit[cKey].BitNum} | ValOk: {OptCheckCondBit[cKey].ValOk} | actual: {answ}"); + } + } } else { @@ -1849,7 +1856,8 @@ namespace IOB_WIN_NEXT try { stopwatch.Restart(); - rawData = currPLC.ReadDiscreteInputs(startAddr - baseAddr, numReg); + int memAddr = startAddr - baseAddr; + rawData = currPLC.ReadDiscreteInputs(memAddr, numReg); stopwatch.Stop(); lgTrace($"Lettura in blocco DiscreteInput | startAddr: {startAddr} | numReg {numReg} | rawData.lenght: {rawData.Length} | {stopwatch.ElapsedMilliseconds}ms"); lastReadPLC = DateTime.Now; @@ -1917,7 +1925,8 @@ namespace IOB_WIN_NEXT try { stopwatch.Restart(); - rawData = currPLC.ReadHoldingRegisters(startAddr - baseAddr, numReg); + int memAddr = startAddr - baseAddr; + rawData = currPLC.ReadHoldingRegisters(memAddr, numReg); stopwatch.Stop(); lgTrace($"Lettura in blocco HoldingRegisters| startAddr: {startAddr} | numReg {numReg} | rawData.lenght: {rawData.Length} | {stopwatch.ElapsedMilliseconds}ms"); lastReadPLC = DateTime.Now; @@ -1987,7 +1996,8 @@ namespace IOB_WIN_NEXT try { stopwatch.Restart(); - rawData = currPLC.ReadInputRegisters(startAddr - baseAddr, numReg); + int memAddr = startAddr - baseAddr; + rawData = currPLC.ReadInputRegisters(memAddr, numReg); stopwatch.Stop(); lgTrace($"Lettura in blocco InputRegisters| startAddr: {startAddr} | numReg {numReg} | rawData.lenght: {rawData.Length} | {stopwatch.ElapsedMilliseconds}ms"); lastReadPLC = DateTime.Now; From 8a07a80599df4f2d0e487315b9ab143ceee7d2f2 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 16 Dec 2022 18:05:19 +0100 Subject: [PATCH 007/164] modifica x test datasync excel: si pianta x lib compression --- IOB-WIN-NEXT/IobGeneric.cs | 2 +- IOB-WIN-NEXT/IobModbusTCP.cs | 1 + IOB-WIN-NEXT/IobModbusTCPSaim.cs | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/IOB-WIN-NEXT/IobGeneric.cs b/IOB-WIN-NEXT/IobGeneric.cs index fa02c70f..214b03ec 100644 --- a/IOB-WIN-NEXT/IobGeneric.cs +++ b/IOB-WIN-NEXT/IobGeneric.cs @@ -6460,7 +6460,7 @@ namespace IOB_WIN_NEXT /// /// Imposta eventuali altri valori default /// - private void fixDefaultPar() + protected void fixDefaultPar() { // parametro max tentativi PING... string s_maxPingRetry = getOptPar("MAX_PING_RETRY"); diff --git a/IOB-WIN-NEXT/IobModbusTCP.cs b/IOB-WIN-NEXT/IobModbusTCP.cs index 82006fdc..7e95ffa6 100644 --- a/IOB-WIN-NEXT/IobModbusTCP.cs +++ b/IOB-WIN-NEXT/IobModbusTCP.cs @@ -945,6 +945,7 @@ namespace IOB_WIN_NEXT // carico conf vettore memoria... loadMemConf(); + fixDefaultPar(); // avvio conf blocchi memoria setupMemBlocks(); // aggiungo DELTA x calcolo min/MAX... diff --git a/IOB-WIN-NEXT/IobModbusTCPSaim.cs b/IOB-WIN-NEXT/IobModbusTCPSaim.cs index cd94d356..86b6895c 100644 --- a/IOB-WIN-NEXT/IobModbusTCPSaim.cs +++ b/IOB-WIN-NEXT/IobModbusTCPSaim.cs @@ -39,6 +39,7 @@ namespace IOB_WIN_NEXT processDynData(); if (EnableTest) { + processDataSync(); testReadExt(); } } From 39e3a9f7fa79a41dbd3693c3beaf095aa2767d81 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 16 Dec 2022 20:14:04 +0100 Subject: [PATCH 008/164] EgwApp - Console: - Impostato esempio call consol 2 console - pronto x creare il vero excel importer (+ altre utils) --- EgwCApp/EgwCApp.ExImp.sln | 31 ++++++++++++ EgwCApp/EgwCApp.ExImp/EgwCApp.ExImp.csproj | 19 ++++++++ EgwCApp/EgwCApp.ExImp/Program.cs | 41 ++++++++++++++++ .../EgwCApp.Testing/EgwCApp.Testing.csproj | 29 +++++++++++ EgwCApp/EgwCApp.Testing/Program.cs | 42 ++++++++++++++++ EgwCApp/EgwCApp.Testing/Utils/ExImp.exe | Bin 0 -> 153500 bytes IOB-WIN-NEXT/AdapterForm.cs | 46 ------------------ 7 files changed, 162 insertions(+), 46 deletions(-) create mode 100644 EgwCApp/EgwCApp.ExImp.sln create mode 100644 EgwCApp/EgwCApp.ExImp/EgwCApp.ExImp.csproj create mode 100644 EgwCApp/EgwCApp.ExImp/Program.cs create mode 100644 EgwCApp/EgwCApp.Testing/EgwCApp.Testing.csproj create mode 100644 EgwCApp/EgwCApp.Testing/Program.cs create mode 100644 EgwCApp/EgwCApp.Testing/Utils/ExImp.exe diff --git a/EgwCApp/EgwCApp.ExImp.sln b/EgwCApp/EgwCApp.ExImp.sln new file mode 100644 index 00000000..b0204a89 --- /dev/null +++ b/EgwCApp/EgwCApp.ExImp.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.2.32516.85 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EgwCApp.ExImp", "EgwCApp.ExImp\EgwCApp.ExImp.csproj", "{86A1CD70-EEBE-4B85-A73C-EA3E4CC772EB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EgwCApp.Testing", "EgwCApp.Testing\EgwCApp.Testing.csproj", "{E37013B7-E5C6-48ED-8051-0BA5F29CB234}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {86A1CD70-EEBE-4B85-A73C-EA3E4CC772EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {86A1CD70-EEBE-4B85-A73C-EA3E4CC772EB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {86A1CD70-EEBE-4B85-A73C-EA3E4CC772EB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {86A1CD70-EEBE-4B85-A73C-EA3E4CC772EB}.Release|Any CPU.Build.0 = Release|Any CPU + {E37013B7-E5C6-48ED-8051-0BA5F29CB234}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E37013B7-E5C6-48ED-8051-0BA5F29CB234}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E37013B7-E5C6-48ED-8051-0BA5F29CB234}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E37013B7-E5C6-48ED-8051-0BA5F29CB234}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {2AF3181F-288A-47D5-8087-2AB660476D85} + EndGlobalSection +EndGlobal diff --git a/EgwCApp/EgwCApp.ExImp/EgwCApp.ExImp.csproj b/EgwCApp/EgwCApp.ExImp/EgwCApp.ExImp.csproj new file mode 100644 index 00000000..14954787 --- /dev/null +++ b/EgwCApp/EgwCApp.ExImp/EgwCApp.ExImp.csproj @@ -0,0 +1,19 @@ + + + + Exe + net6.0 + enable + enable + ExImp + + + + none + + + + none + + + diff --git a/EgwCApp/EgwCApp.ExImp/Program.cs b/EgwCApp/EgwCApp.ExImp/Program.cs new file mode 100644 index 00000000..a691315e --- /dev/null +++ b/EgwCApp/EgwCApp.ExImp/Program.cs @@ -0,0 +1,41 @@ +namespace EgwCApp.ExImp +{ + internal class Program + { + #region Private Methods + + /// + /// ExImp: Excel Importer, per IobWin in logica lettura Giacenze + /// parametri: + /// $0: Path ConfigFile file da impiegare (File da importare, Tipo Import, configurazione decodifica, target output...) + /// + /// + private static void Main(string[] args) + { + string separator = "--------------------------------------"; + // controllo args, se mancassero o incompleti mostro help + if (args.Length < 1) + { + Console.WriteLine(separator); + Console.WriteLine("- ExcelFileImporter - Core 6.0"); + Console.WriteLine("- v.0.0.0.0 | @Egalware 2022+"); + Console.WriteLine(separator); + Console.WriteLine(); + Console.WriteLine("Mancano parametri per esecuzione:"); + Console.WriteLine(""); + Console.WriteLine("$0: ConfigFile da impiegare"); + } + else + { + string filePath = args[0]; + var rawRows = File.ReadAllLines(filePath); + foreach (var riga in rawRows) + { + Console.WriteLine(riga); + } + } + } + + #endregion Private Methods + } +} \ No newline at end of file diff --git a/EgwCApp/EgwCApp.Testing/EgwCApp.Testing.csproj b/EgwCApp/EgwCApp.Testing/EgwCApp.Testing.csproj new file mode 100644 index 00000000..fb4fa120 --- /dev/null +++ b/EgwCApp/EgwCApp.Testing/EgwCApp.Testing.csproj @@ -0,0 +1,29 @@ + + + + Exe + net6.0 + enable + enable + $(MSBuildProjectName) + + + + none + + + + none + + + + + + + + + Always + + + + diff --git a/EgwCApp/EgwCApp.Testing/Program.cs b/EgwCApp/EgwCApp.Testing/Program.cs new file mode 100644 index 00000000..b5e3c66c --- /dev/null +++ b/EgwCApp/EgwCApp.Testing/Program.cs @@ -0,0 +1,42 @@ +// See https://aka.ms/new-console-template for more information + +using System.Diagnostics; + +string separator = "--------------------------------------"; +Console.WriteLine(separator); +Console.WriteLine("Console Test Application"); +Console.WriteLine(separator); +Console.WriteLine(); + +Console.WriteLine("calling ext app with args[]:"); +string appPath = "./Utils/ExImp.exe"; +string procArg = @"C:\Temp\test.log"; +Console.WriteLine($"{appPath} {procArg}"); + +ProcessStartInfo psi = new ProcessStartInfo +{ + FileName = appPath, + Arguments = $"{procArg}", + WindowStyle = ProcessWindowStyle.Minimized, + //WindowStyle = ProcessWindowStyle.Hidden, + UseShellExecute = false, + //CreateNoWindow = true, + RedirectStandardOutput = true, + RedirectStandardInput = true, +}; + +//childProc.StartInfo = psi; +Process p = Process.Start(psi); + +string q = ""; +while (!p.HasExited) +{ + q += p.StandardOutput.ReadToEnd(); +} + +Console.WriteLine("Ext prog ended"); +Console.WriteLine("Data received:"); +Console.WriteLine(); +Console.WriteLine(q); + +Console.ReadLine(); \ No newline at end of file diff --git a/EgwCApp/EgwCApp.Testing/Utils/ExImp.exe b/EgwCApp/EgwCApp.Testing/Utils/ExImp.exe new file mode 100644 index 0000000000000000000000000000000000000000..5addc18dd2f9f7d79f520b94a315c75d1cf2fc12 GIT binary patch literal 153500 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 VepAh6wyLAKTM)X#P)LmD_$Q9w=_CLE literal 0 HcmV?d00001 diff --git a/IOB-WIN-NEXT/AdapterForm.cs b/IOB-WIN-NEXT/AdapterForm.cs index 8d3adfde..d258301c 100644 --- a/IOB-WIN-NEXT/AdapterForm.cs +++ b/IOB-WIN-NEXT/AdapterForm.cs @@ -337,12 +337,6 @@ namespace IOB_WIN_NEXT /// public string dataMonitor_0 { -#if false - get - { - return dMonValues[0]; - } -#endif set { DateTime adesso = DateTime.Now; @@ -368,12 +362,6 @@ namespace IOB_WIN_NEXT /// public string dataMonitor_1 { -#if false - get - { - return dMonValues[1]; - } -#endif set { DateTime adesso = DateTime.Now; @@ -399,12 +387,6 @@ namespace IOB_WIN_NEXT /// public string dataMonitor_2 { -#if false - get - { - return dMonValues[2]; - } -#endif set { DateTime adesso = DateTime.Now; @@ -430,12 +412,6 @@ namespace IOB_WIN_NEXT /// public string dataMonitor_3 { -#if false - get - { - return dMonValues[3]; - } -#endif set { DateTime adesso = DateTime.Now; @@ -966,28 +942,6 @@ namespace IOB_WIN_NEXT fermaTutto(false, tryRestart, forceDequeue, updateForm); } -#if false - /// - /// Effettua un trim della stringa al numero max di linee da mostrare a video - /// - /// - /// - public string limitLine2show(string newString) - { - if (!string.IsNullOrEmpty(newString)) - { - // se num righe superiore a limite trimmo... - if (newString.Split('\n').Length > nLine2show) - { - //int idx = newString.LastIndexOf('\r'); - int idx = newString.LastIndexOf(Environment.NewLine); - newString = newString.Substring(0, idx); - } - } - return newString; - } -#endif - /// /// Salva su file l'oggetto di persistenza dati /// From 48fcce3c9be8a4bed36a68d8bb35fb8df1db6e11 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 16 Dec 2022 20:19:32 +0100 Subject: [PATCH 009/164] Aggiunta calcolo tempi esecuzione --- EgwCApp/EgwCApp.Testing/Program.cs | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/EgwCApp/EgwCApp.Testing/Program.cs b/EgwCApp/EgwCApp.Testing/Program.cs index b5e3c66c..de1f7f34 100644 --- a/EgwCApp/EgwCApp.Testing/Program.cs +++ b/EgwCApp/EgwCApp.Testing/Program.cs @@ -12,6 +12,10 @@ Console.WriteLine("calling ext app with args[]:"); string appPath = "./Utils/ExImp.exe"; string procArg = @"C:\Temp\test.log"; Console.WriteLine($"{appPath} {procArg}"); +Console.WriteLine(); +Console.WriteLine("press enter to proceed..."); + +Console.ReadLine(); ProcessStartInfo psi = new ProcessStartInfo { @@ -25,7 +29,9 @@ ProcessStartInfo psi = new ProcessStartInfo RedirectStandardInput = true, }; -//childProc.StartInfo = psi; +Stopwatch sw = new Stopwatch(); +sw.Start(); + Process p = Process.Start(psi); string q = ""; @@ -34,9 +40,19 @@ while (!p.HasExited) q += p.StandardOutput.ReadToEnd(); } -Console.WriteLine("Ext prog ended"); +sw.Stop(); +var timeElaps = sw.Elapsed; +Console.WriteLine($"Ext prog executed in {timeElaps.TotalMilliseconds} ms"); +Console.WriteLine(separator); +Console.WriteLine("press enter to proceed..."); + +Console.ReadLine(); +sw.Restart(); Console.WriteLine("Data received:"); -Console.WriteLine(); Console.WriteLine(q); +Console.WriteLine(); +sw.Stop(); +timeElaps = sw.Elapsed; +Console.WriteLine($"Display executed in {timeElaps.TotalMilliseconds} ms"); Console.ReadLine(); \ No newline at end of file From 7064047f9ad4749b5e9a937569fa914a725f567e Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 16 Dec 2022 20:34:23 +0100 Subject: [PATCH 010/164] Cambio nome progetto --- EgwCApp/EgwCApp.ExImp.sln | 12 ++--- EgwCApp/EgwCApp.ExImp/EgwCApp.ExImp.csproj | 19 -------- EgwCApp/EgwCApp.ExImp/Program.cs | 41 ------------------ .../EgwCApp.ExcImport.csproj | 11 +++++ EgwCApp/EgwCApp.ExcImport/Program.cs | 28 ++++++++++++ .../EgwCApp.Testing/EgwCApp.Testing.csproj | 2 +- EgwCApp/EgwCApp.Testing/Program.cs | 2 +- .../Utils/{ExImp.exe => ExcImport.exe} | Bin 153500 -> 153524 bytes 8 files changed, 47 insertions(+), 68 deletions(-) delete mode 100644 EgwCApp/EgwCApp.ExImp/EgwCApp.ExImp.csproj delete mode 100644 EgwCApp/EgwCApp.ExImp/Program.cs create mode 100644 EgwCApp/EgwCApp.ExcImport/EgwCApp.ExcImport.csproj create mode 100644 EgwCApp/EgwCApp.ExcImport/Program.cs rename EgwCApp/EgwCApp.Testing/Utils/{ExImp.exe => ExcImport.exe} (96%) diff --git a/EgwCApp/EgwCApp.ExImp.sln b/EgwCApp/EgwCApp.ExImp.sln index b0204a89..b704b95e 100644 --- a/EgwCApp/EgwCApp.ExImp.sln +++ b/EgwCApp/EgwCApp.ExImp.sln @@ -3,24 +3,24 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.2.32516.85 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EgwCApp.ExImp", "EgwCApp.ExImp\EgwCApp.ExImp.csproj", "{86A1CD70-EEBE-4B85-A73C-EA3E4CC772EB}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EgwCApp.Testing", "EgwCApp.Testing\EgwCApp.Testing.csproj", "{E37013B7-E5C6-48ED-8051-0BA5F29CB234}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EgwCApp.ExcImport", "EgwCApp.ExcImport\EgwCApp.ExcImport.csproj", "{D689CB4E-14DB-4CD4-B0D6-D2029219EF7E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {86A1CD70-EEBE-4B85-A73C-EA3E4CC772EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {86A1CD70-EEBE-4B85-A73C-EA3E4CC772EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86A1CD70-EEBE-4B85-A73C-EA3E4CC772EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {86A1CD70-EEBE-4B85-A73C-EA3E4CC772EB}.Release|Any CPU.Build.0 = Release|Any CPU {E37013B7-E5C6-48ED-8051-0BA5F29CB234}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E37013B7-E5C6-48ED-8051-0BA5F29CB234}.Debug|Any CPU.Build.0 = Debug|Any CPU {E37013B7-E5C6-48ED-8051-0BA5F29CB234}.Release|Any CPU.ActiveCfg = Release|Any CPU {E37013B7-E5C6-48ED-8051-0BA5F29CB234}.Release|Any CPU.Build.0 = Release|Any CPU + {D689CB4E-14DB-4CD4-B0D6-D2029219EF7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D689CB4E-14DB-4CD4-B0D6-D2029219EF7E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D689CB4E-14DB-4CD4-B0D6-D2029219EF7E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D689CB4E-14DB-4CD4-B0D6-D2029219EF7E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/EgwCApp/EgwCApp.ExImp/EgwCApp.ExImp.csproj b/EgwCApp/EgwCApp.ExImp/EgwCApp.ExImp.csproj deleted file mode 100644 index 14954787..00000000 --- a/EgwCApp/EgwCApp.ExImp/EgwCApp.ExImp.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - Exe - net6.0 - enable - enable - ExImp - - - - none - - - - none - - - diff --git a/EgwCApp/EgwCApp.ExImp/Program.cs b/EgwCApp/EgwCApp.ExImp/Program.cs deleted file mode 100644 index a691315e..00000000 --- a/EgwCApp/EgwCApp.ExImp/Program.cs +++ /dev/null @@ -1,41 +0,0 @@ -namespace EgwCApp.ExImp -{ - internal class Program - { - #region Private Methods - - /// - /// ExImp: Excel Importer, per IobWin in logica lettura Giacenze - /// parametri: - /// $0: Path ConfigFile file da impiegare (File da importare, Tipo Import, configurazione decodifica, target output...) - /// - /// - private static void Main(string[] args) - { - string separator = "--------------------------------------"; - // controllo args, se mancassero o incompleti mostro help - if (args.Length < 1) - { - Console.WriteLine(separator); - Console.WriteLine("- ExcelFileImporter - Core 6.0"); - Console.WriteLine("- v.0.0.0.0 | @Egalware 2022+"); - Console.WriteLine(separator); - Console.WriteLine(); - Console.WriteLine("Mancano parametri per esecuzione:"); - Console.WriteLine(""); - Console.WriteLine("$0: ConfigFile da impiegare"); - } - else - { - string filePath = args[0]; - var rawRows = File.ReadAllLines(filePath); - foreach (var riga in rawRows) - { - Console.WriteLine(riga); - } - } - } - - #endregion Private Methods - } -} \ No newline at end of file diff --git a/EgwCApp/EgwCApp.ExcImport/EgwCApp.ExcImport.csproj b/EgwCApp/EgwCApp.ExcImport/EgwCApp.ExcImport.csproj new file mode 100644 index 00000000..e59d1452 --- /dev/null +++ b/EgwCApp/EgwCApp.ExcImport/EgwCApp.ExcImport.csproj @@ -0,0 +1,11 @@ + + + + Exe + net6.0 + enable + enable + ExcImport + + + diff --git a/EgwCApp/EgwCApp.ExcImport/Program.cs b/EgwCApp/EgwCApp.ExcImport/Program.cs new file mode 100644 index 00000000..b47db7f7 --- /dev/null +++ b/EgwCApp/EgwCApp.ExcImport/Program.cs @@ -0,0 +1,28 @@ +// See https://aka.ms/new-console-template for more information + +// ExcImport: Excel Importer, per IobWin in logica lettura Giacenze +// parametri: +// $0: Path ConfigFile file da impiegare (File da importare, Tipo Import, configurazione decodifica, target output...) + +string separator = "--------------------------------------"; +// controllo args, se mancassero o incompleti mostro help +if (args.Length < 1) +{ + Console.WriteLine(separator); + Console.WriteLine("- ExcelFileImporter - Core 6.0"); + Console.WriteLine("- v.0.0.0.0 | @Egalware 2022+"); + Console.WriteLine(separator); + Console.WriteLine(); + Console.WriteLine("Mancano parametri per esecuzione:"); + Console.WriteLine(""); + Console.WriteLine("$0: ConfigFile da impiegare"); +} +else +{ + string filePath = args[0]; + var rawRows = File.ReadAllLines(filePath); + foreach (var riga in rawRows) + { + Console.WriteLine(riga); + } +} \ No newline at end of file diff --git a/EgwCApp/EgwCApp.Testing/EgwCApp.Testing.csproj b/EgwCApp/EgwCApp.Testing/EgwCApp.Testing.csproj index fb4fa120..d72a0f21 100644 --- a/EgwCApp/EgwCApp.Testing/EgwCApp.Testing.csproj +++ b/EgwCApp/EgwCApp.Testing/EgwCApp.Testing.csproj @@ -21,7 +21,7 @@ - + Always diff --git a/EgwCApp/EgwCApp.Testing/Program.cs b/EgwCApp/EgwCApp.Testing/Program.cs index de1f7f34..60b1d137 100644 --- a/EgwCApp/EgwCApp.Testing/Program.cs +++ b/EgwCApp/EgwCApp.Testing/Program.cs @@ -9,7 +9,7 @@ Console.WriteLine(separator); Console.WriteLine(); Console.WriteLine("calling ext app with args[]:"); -string appPath = "./Utils/ExImp.exe"; +string appPath = "./Utils/ExcImport.exe"; string procArg = @"C:\Temp\test.log"; Console.WriteLine($"{appPath} {procArg}"); Console.WriteLine(); diff --git a/EgwCApp/EgwCApp.Testing/Utils/ExImp.exe b/EgwCApp/EgwCApp.Testing/Utils/ExcImport.exe similarity index 96% rename from EgwCApp/EgwCApp.Testing/Utils/ExImp.exe rename to EgwCApp/EgwCApp.Testing/Utils/ExcImport.exe index 5addc18dd2f9f7d79f520b94a315c75d1cf2fc12..6890b06914180a52c788cad2dfd2eb5bd354ddc8 100644 GIT binary patch delta 1882 zcmdT_|4&<06hHU0lv1EjVKB#7TG?C~(!mDX+OaRt650u)qm(&)aVxa2$J)NGuQ>1r zt09^D0VXKfHRvQWCKxn<#l^ZG%t+>9sx#3T5;XG%6Mx#0Wr;EV;u6n${jx9q1>TqY zx#xV&xu@rzd*17Z%SG3gi&mx>>;7Vz?Wbijjc=!srP7EC6>N=*RVWq@c_J|>p0EYO z;neR{Sf-tA(xx74!nxYoRRs7$3+gyEiEx)a(pUMFeYk*T!HTtY|_yi%OW{WQiH@qFBAtrL&d*7~;LeWTfew zl(AS#6>~aA#!Fewu`DO;z^Zwxk=%-_N*YQE_48^Vef3Kv`ofFiuKPQ-pp}(zeJ5Iv zt`8_ULuaSO7(L2J@Ag#)v z?W~Kx)rl3!vW%)w>ai8QI4dho8cKXe36PwO{5$?rogQvGjN*~!z@WHG`~@` z^BZr{&P>`Hu?TKbiY7uGJWFVRdctyOR?)6vyNVtakEwV9l8RG+6djy}LzIYu7MOry z+yo%`Ha!_T|1l7H^T@A-@e_wt`SxVbR< ze)9(&tTg#1kAEsLqiEsigN1_9HZ@$3$O)QuzPVXo%7b<39Y zHuv1E#ovk-O@D#b%$Qzd23A0V$)u=8U7^NUYt(CjWDOmx09dWjs9!mBGHF^fIC!ud zBc(j%!ucaL8kuDsz@e4P%#FNfl?AO|92p>RlWNke0iP&6S61EM?@ z2>TLaK~eI?CFS6<&=ZJBjh^0)#^au&Lg&aiXL~G`TW$HY1!-_p=%a7}IV40wi9LsH zO~N@b+Bm+aMaX;EV!=W1x!ZTO?tyG>f97(dbM71a`SPh(r$^;)Ke~Qf`Rpz*Zaj+7 z4PL6<%wd34r3l&aKl{{j`qZ9br&9IDa2YT4{X{THj qH5HG!g<`U8RFsODHm=(Xgju< zNHH^mA3&I>2Nx3HpC%?Vk+{sn#Hb0(kQfqUVq%OY{y`G)0}>^Y_?~myYWU+{&$8#f z&+|U#z3(~a-rj3V)=Nv)_s=l)(;;B_+%d3c&%h)Q{Do`s5#FFlat}p*k zfu-gJPx10E8}W^rnu`eVqZ#DbK8NrV`-flTSGVJ3{DW~{2X3nVic$f z6rSzC`tkt8AW1?yC}ivf4RlcXmrJa2t*GAvGaxPeb_Z@XwS$ejm@j{Z3qC;sXnD~E@c0FX zX(ylcV2k&$thiu9^Cucp?r zyt6bPHDkr1(@wrM6(ubtMa7GUKW69D(<`iY3g zGAS({O^XA#MvLvI)*6Ci@RtHW6``Ro80e;JNfAJ|$ocd{SeR+hbT+}gJy@14BTBP{ zM2Bl^9qkVYoo2~@kpsBH1Q)I@=0gSEl{gQrSPEgXDDWBFVhWsRR?5~&{1!y~r^EwN zc~8b;AS!&!9%gC6JNS?=4gyzXe4RaHHmH-zda%jc8aHR6A!Y|JEZ{bZ4Yo+-1QYAB z!!$Lvjbice+u=T|MlYCXk&SQyI|*;HF6gflMdz!sF6x89NRGP5%HVK;^%9#dFp)bg z*#ekxkeIn1Xv|lMDq@!yoIxwNkb#3xfenNcufzbjvXmH=@d7*pnBOOo+n1c=bUjWkHIs(n@DZvDFvL9p?B%-ysPN+fd|>}|SL+wLe`1gy zY-;)bYsaVj!zaGg?wtNw5auht-spQ6s`Oxc=M@Ml9X${V|#_^6x9O`f5*eU~O5PL+hoC#u_ zwIw3^+mC9)-hrpn!&6(-{l2!q@z`*1@2D0Wn4a Date: Sat, 17 Dec 2022 11:36:57 +0100 Subject: [PATCH 011/164] fix PIZ04/05 --- IOB-WIN-NEXT/DATA/CONF/PIZ04_MBlock.json | 6 +++--- IOB-WIN-NEXT/DATA/CONF/PIZ05_MBlock.json | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/IOB-WIN-NEXT/DATA/CONF/PIZ04_MBlock.json b/IOB-WIN-NEXT/DATA/CONF/PIZ04_MBlock.json index 96d8f415..0074e94e 100644 --- a/IOB-WIN-NEXT/DATA/CONF/PIZ04_MBlock.json +++ b/IOB-WIN-NEXT/DATA/CONF/PIZ04_MBlock.json @@ -1,7 +1,7 @@ { "ReadBlocks": { - "40001": 64, - "40421": 64, - "40901": 8 + "40000": 64, + "40420": 64, + "40900": 8 } } \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/PIZ05_MBlock.json b/IOB-WIN-NEXT/DATA/CONF/PIZ05_MBlock.json index 96d8f415..0074e94e 100644 --- a/IOB-WIN-NEXT/DATA/CONF/PIZ05_MBlock.json +++ b/IOB-WIN-NEXT/DATA/CONF/PIZ05_MBlock.json @@ -1,7 +1,7 @@ { "ReadBlocks": { - "40001": 64, - "40421": 64, - "40901": 8 + "40000": 64, + "40420": 64, + "40900": 8 } } \ No newline at end of file From a7a60f28397d033dd58890d40c6f7cf1b9233b80 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Sat, 17 Dec 2022 12:37:06 +0100 Subject: [PATCH 012/164] Update x inserimento componenti excel import --- EgwCApp/EgwCApp.Core/ConfigFile.cs | 19 ++++ EgwCApp/EgwCApp.Core/EgwCApp.Core.csproj | 13 +++ EgwCApp/EgwCApp.Core/Enum.cs | 15 +++ EgwCApp/EgwCApp.Core/ExcelMan.cs | 106 ++++++++++++++++++ EgwCApp/EgwCApp.ExImp.sln | 8 +- .../EgwCApp.ExcImport.csproj | 4 + 6 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 EgwCApp/EgwCApp.Core/ConfigFile.cs create mode 100644 EgwCApp/EgwCApp.Core/EgwCApp.Core.csproj create mode 100644 EgwCApp/EgwCApp.Core/Enum.cs create mode 100644 EgwCApp/EgwCApp.Core/ExcelMan.cs diff --git a/EgwCApp/EgwCApp.Core/ConfigFile.cs b/EgwCApp/EgwCApp.Core/ConfigFile.cs new file mode 100644 index 00000000..2202cd1b --- /dev/null +++ b/EgwCApp/EgwCApp.Core/ConfigFile.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EgwCApp.Core +{ + /// + /// Implementazione di riferimento x un file di configurazione x esecuzione task tramite EgwCApp + /// + public class ConfigFile + { + + public string FilePath { get; set; } = "demoIn.txt"; + + public ImportType ImportType { get; set; } = ImportType.ND; + } +} diff --git a/EgwCApp/EgwCApp.Core/EgwCApp.Core.csproj b/EgwCApp/EgwCApp.Core/EgwCApp.Core.csproj new file mode 100644 index 00000000..f33e7304 --- /dev/null +++ b/EgwCApp/EgwCApp.Core/EgwCApp.Core.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + enable + + + + + + + diff --git a/EgwCApp/EgwCApp.Core/Enum.cs b/EgwCApp/EgwCApp.Core/Enum.cs new file mode 100644 index 00000000..40900e7d --- /dev/null +++ b/EgwCApp/EgwCApp.Core/Enum.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EgwCApp.Core +{ + public enum ImportType + { + ND = 0, + CSV, + Excel + } +} diff --git a/EgwCApp/EgwCApp.Core/ExcelMan.cs b/EgwCApp/EgwCApp.Core/ExcelMan.cs new file mode 100644 index 00000000..eda89a9f --- /dev/null +++ b/EgwCApp/EgwCApp.Core/ExcelMan.cs @@ -0,0 +1,106 @@ +using ExcelDataReader; +using System; +using System.Collections.Generic; +using System.Data; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EgwCApp.Core +{ + /// + /// Gestione lettura excel: + /// https://github.com/ExcelDataReader/ExcelDataReader + /// + public class ExcelMan + { + protected string _path { get; set; } = ""; + /// + /// Avvio componente x il file indicato + /// + /// + public ExcelMan(string filePath) + { + // verifico esistenza file... + if (File.Exists(filePath)) + { + _path = filePath; + } + } + + public DataSet getDataSet() + { + DataSet result = new DataSet(); + using (var stream = File.Open(_path, FileMode.Open, FileAccess.Read)) + { + // Auto-detect format, supports: + // - Binary Excel files (2.0-2003 format; *.xls) + // - OpenXml Excel files (2007 format; *.xlsx, *.xlsb) + using (var reader = ExcelReaderFactory.CreateReader(stream)) + { + // 2. Use the AsDataSet extension method + //result = reader.AsDataSet(); + // The result of each spreadsheet is in result.Tables + + // modalità lettura con intestazione + result = reader.AsDataSet(new ExcelDataSetConfiguration() + { + ConfigureDataTable = (_) => new ExcelDataTableConfiguration() + { + UseHeaderRow = true + } + }); + +#if false + result = reader.AsDataSet(); +#endif + + } + } + return result; + } + + public IExcelDataReader getExcelReader() + { + // ExcelDataReader works with the binary Excel file, so it needs a FileStream + // to get started. This is how we avoid dependencies on ACE or Interop: + FileStream stream = File.Open(_path, FileMode.Open, FileAccess.Read); + + // We return the interface, so that + IExcelDataReader reader = null; + try + { + if (_path.EndsWith(".xls")) + { + reader = ExcelReaderFactory.CreateBinaryReader(stream); + } + if (_path.EndsWith(".xlsx")) + { + reader = ExcelReaderFactory.CreateOpenXmlReader(stream); + } + return reader; + } + catch (Exception) + { + throw; + } + } + public IEnumerable getWorksheetNames() + { + var reader = this.getExcelReader(); + var workbook = reader.AsDataSet(); + var sheets = from DataTable sheet in workbook.Tables select sheet.TableName; + return sheets; + } + + public IEnumerable getData(string sheet, bool firstRowIsColumnNames = true) + { + var reader = this.getExcelReader(); + //reader.IsFirstRowAsColumnNames = firstRowIsColumnNames; + var workSheet = reader.AsDataSet().Tables[sheet]; + var rows = from DataRow a in workSheet.Rows select a; + return rows; + } + } +} \ No newline at end of file diff --git a/EgwCApp/EgwCApp.ExImp.sln b/EgwCApp/EgwCApp.ExImp.sln index b704b95e..d57a072e 100644 --- a/EgwCApp/EgwCApp.ExImp.sln +++ b/EgwCApp/EgwCApp.ExImp.sln @@ -3,10 +3,12 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.2.32516.85 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EgwCApp.Testing", "EgwCApp.Testing\EgwCApp.Testing.csproj", "{E37013B7-E5C6-48ED-8051-0BA5F29CB234}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EgwCApp.Testing", "EgwCApp.Testing\EgwCApp.Testing.csproj", "{E37013B7-E5C6-48ED-8051-0BA5F29CB234}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EgwCApp.ExcImport", "EgwCApp.ExcImport\EgwCApp.ExcImport.csproj", "{D689CB4E-14DB-4CD4-B0D6-D2029219EF7E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EgwCApp.Core", "EgwCApp.Core\EgwCApp.Core.csproj", "{DF02D478-2309-48B8-BF0D-90B02327AF02}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -21,6 +23,10 @@ Global {D689CB4E-14DB-4CD4-B0D6-D2029219EF7E}.Debug|Any CPU.Build.0 = Debug|Any CPU {D689CB4E-14DB-4CD4-B0D6-D2029219EF7E}.Release|Any CPU.ActiveCfg = Release|Any CPU {D689CB4E-14DB-4CD4-B0D6-D2029219EF7E}.Release|Any CPU.Build.0 = Release|Any CPU + {DF02D478-2309-48B8-BF0D-90B02327AF02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DF02D478-2309-48B8-BF0D-90B02327AF02}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF02D478-2309-48B8-BF0D-90B02327AF02}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DF02D478-2309-48B8-BF0D-90B02327AF02}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/EgwCApp/EgwCApp.ExcImport/EgwCApp.ExcImport.csproj b/EgwCApp/EgwCApp.ExcImport/EgwCApp.ExcImport.csproj index e59d1452..e9408bce 100644 --- a/EgwCApp/EgwCApp.ExcImport/EgwCApp.ExcImport.csproj +++ b/EgwCApp/EgwCApp.ExcImport/EgwCApp.ExcImport.csproj @@ -8,4 +8,8 @@ ExcImport + + + + From 5258088ad49d337d52300723117a767bbe033e3b Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Sat, 17 Dec 2022 16:14:32 +0100 Subject: [PATCH 013/164] Fix catena compilazione con recupero exe --- EgwCApp/EgwCApp.Core/ConfigFile.cs | 31 +++++++++++++----- EgwCApp/EgwCApp.Core/Enum.cs | 16 ++++++++- .../EgwCApp.Testing/EgwCApp.Testing.csproj | 4 +++ EgwCApp/EgwCApp.Testing/Program.cs | 14 ++++++-- EgwCApp/EgwCApp.Testing/Utils/ExcImport.exe | Bin 153524 -> 333915 bytes EgwCApp/EgwCApp.Testing/preBuild.bat | 7 ++++ 6 files changed, 59 insertions(+), 13 deletions(-) create mode 100644 EgwCApp/EgwCApp.Testing/preBuild.bat diff --git a/EgwCApp/EgwCApp.Core/ConfigFile.cs b/EgwCApp/EgwCApp.Core/ConfigFile.cs index 2202cd1b..a117a41e 100644 --- a/EgwCApp/EgwCApp.Core/ConfigFile.cs +++ b/EgwCApp/EgwCApp.Core/ConfigFile.cs @@ -1,19 +1,32 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace EgwCApp.Core +namespace EgwCApp.Core { /// /// Implementazione di riferimento x un file di configurazione x esecuzione task tramite EgwCApp /// public class ConfigFile { + #region Public Properties + /// + /// Path file da processare + /// public string FilePath { get; set; } = "demoIn.txt"; - public ImportType ImportType { get; set; } = ImportType.ND; + /// + /// Parametri per processing file + /// + public Dictionary ProcessParams { get; set; } = new Dictionary(); + + /// + /// Modalità ritorno risutlati + /// + public ReturnMode Return { get; set; } = ReturnMode.ND; + + /// + /// Tipologia di iport da condurre + /// + public ImportType Type { get; set; } = ImportType.ND; + + #endregion Public Properties } -} +} \ No newline at end of file diff --git a/EgwCApp/EgwCApp.Core/Enum.cs b/EgwCApp/EgwCApp.Core/Enum.cs index 40900e7d..4c59ad7b 100644 --- a/EgwCApp/EgwCApp.Core/Enum.cs +++ b/EgwCApp/EgwCApp.Core/Enum.cs @@ -6,10 +6,24 @@ using System.Threading.Tasks; namespace EgwCApp.Core { + /// + /// Tipologia file da importare + /// public enum ImportType { ND = 0, CSV, Excel } -} + + /// + /// Modalità ritorno risultati + /// + public enum ReturnMode + { + ND = 0, + Console, + File, + Redis + } +} \ No newline at end of file diff --git a/EgwCApp/EgwCApp.Testing/EgwCApp.Testing.csproj b/EgwCApp/EgwCApp.Testing/EgwCApp.Testing.csproj index d72a0f21..9a516631 100644 --- a/EgwCApp/EgwCApp.Testing/EgwCApp.Testing.csproj +++ b/EgwCApp/EgwCApp.Testing/EgwCApp.Testing.csproj @@ -26,4 +26,8 @@ + + + + diff --git a/EgwCApp/EgwCApp.Testing/Program.cs b/EgwCApp/EgwCApp.Testing/Program.cs index 60b1d137..5e639fc3 100644 --- a/EgwCApp/EgwCApp.Testing/Program.cs +++ b/EgwCApp/EgwCApp.Testing/Program.cs @@ -2,6 +2,9 @@ using System.Diagnostics; +Dictionary statsColl = new Dictionary(); +Stopwatch sw = new Stopwatch(); + string separator = "--------------------------------------"; Console.WriteLine(separator); Console.WriteLine("Console Test Application"); @@ -29,7 +32,6 @@ ProcessStartInfo psi = new ProcessStartInfo RedirectStandardInput = true, }; -Stopwatch sw = new Stopwatch(); sw.Start(); Process p = Process.Start(psi); @@ -42,7 +44,7 @@ while (!p.HasExited) sw.Stop(); var timeElaps = sw.Elapsed; -Console.WriteLine($"Ext prog executed in {timeElaps.TotalMilliseconds} ms"); +statsColl.Add("Ext prog executed", timeElaps); Console.WriteLine(separator); Console.WriteLine("press enter to proceed..."); @@ -53,6 +55,12 @@ Console.WriteLine(q); Console.WriteLine(); sw.Stop(); timeElaps = sw.Elapsed; -Console.WriteLine($"Display executed in {timeElaps.TotalMilliseconds} ms"); +statsColl.Add("Data Received", timeElaps); + +foreach (var item in statsColl) +{ + Console.WriteLine($"{item.Key} {item.Value.TotalMilliseconds} ms"); +} +//Console.WriteLine($"Display executed in {timeElaps.TotalMilliseconds} ms"); Console.ReadLine(); \ No newline at end of file diff --git a/EgwCApp/EgwCApp.Testing/Utils/ExcImport.exe b/EgwCApp/EgwCApp.Testing/Utils/ExcImport.exe index 6890b06914180a52c788cad2dfd2eb5bd354ddc8..9739200bf116555c1d26c97b10a5b573be01db60 100644 GIT binary patch literal 333915 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�?YA96IK%z10cK7)r>Aup4yjw4f6a6?Vc@ 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