diff --git a/IOB-UT-NEXT/ToMapo.cs b/IOB-UT-NEXT/ToMapo.cs index dbd3a1e9..380e74ca 100644 --- a/IOB-UT-NEXT/ToMapo.cs +++ b/IOB-UT-NEXT/ToMapo.cs @@ -143,17 +143,6 @@ namespace IOB_UT_NEXT } } -#if false - /// - /// Effettua decremento blicnk counters - /// - /// - /// - public void updateBlinkCounter() - { - } -#endif - /// /// Confronta un valore di stato allarme con lo stato precedentemente salvato considerando blink/veto /// @@ -220,22 +209,6 @@ namespace IOB_UT_NEXT /// public void updStatusVal(int num, uint newStatus) { -#if false - if (resetBlink) - { - // calcola la maschera di variazione da valore precedente - var variations = newStatus ^ alarmsState[num]; - // ciclo sui 16 bit... - for (int i = 0; i < 16; i++) - { - if ((variations & (1 << i)) == (1 << i)) - { - alarmsBlinkCounter[num * 16 + i] = blinkDownVal; - } - } - } -#endif - // salvo nuovo valore alarmsState[num] = newStatus; } @@ -243,202 +216,6 @@ namespace IOB_UT_NEXT #endregion Public Methods } -#if false - /// - /// Classe gestione configurazione parametri di base x allarmi - /// - public class BaseAlarmConf - { - #region Public Fields - - /// - /// valore di partenza x un segnale di blink in caso di fine variazione (fronte discesa) - /// - public int blinkDownVal { get; set; } = 10; - - /// - /// valore di partenza x un segnale di blink in caso di inizio variazione (fronte salita) - /// - public int blinkUpVal { get; set; } = 3; - - #endregion Public Fields - - #region Public Properties - - /// - /// Elenco dei contatori blink x gestione caso fronte discesa segnale che blinka - /// - public int[] alarmsBlinkDownCounter { get; set; } - - /// - /// Elenco dei contatori blink x gestione caso fronte salita segnale che blinka - /// - public int[] alarmsBlinkUpCounter { get; set; } - - /// - /// BitMask 16bit (1 = valido, 0 = filtro) degli allarmi silenziati/disabilitati (se iniziano per ##) come valore da sottrarre x check - /// - public uint[] alarmsMask { get; set; } - - /// - /// Array dei valori allarme correnti - /// - public uint[] alarmsState { get; set; } - - /// - /// Descrizione area allarmi - /// - public string description { get; set; } = ""; - - /// - /// Indice nell'area di memoria (da valore iniziale = 0) - /// - public int index { get; set; } = 0; - - /// - /// Nome "assoluto" della posizione nell'area di memoria (anche diverso da indice) - /// - public string memAddr { get; set; } = ""; - - /// - /// Elenco allarmi configurati x la bitmap - /// - public List messages { get; set; } = new List(); - - /// - /// Size in byte - /// - public int size { get; set; } = 0; - - /// - /// Tipo di dato - /// - [JsonConverter(typeof(StringEnumConverter))] - public plcDataType tipoMem { get; set; } = plcDataType.Boolean; - - #endregion Public Properties - - #region Public Methods - - /// - /// Calcola il filtro da condizione blink (ovvero maschera per valori indicati blinking) - /// - /// - /// - public uint blinkFilter(int num) - { - uint answ = 0; - int idx = 16 * num; - for (int i = 0; i < 16; i++) - { - if (alarmsBlinkDownCounter[idx + i] > 0) - { - answ += (uint)1 << i; - } - } - return answ; - } - - /// - /// Effettua update dei contatori blink per gestire i segnali alternati sul fronte di salita/discesa - /// - public void updateBlinkCounter() - { - // decremento contatori discesa - int idx = 0; - foreach (var item in alarmsBlinkDownCounter) - { - alarmsBlinkDownCounter[idx] = item > 0 ? item - 1 : item; - idx++; - } - } - - /// - /// Confronta un valore di stato allarme con lo stato precedentemente salvato considerando blink/veto - /// - /// Numero/indice del banco di allarme (uint16) - /// Valore (bitmap) allarmi come uint16 - /// - public bool isChanged(int num, uint newValue) - { - // per prima cosa controllo valori RAW - bool answ = !alarmsState[num].Equals(newValue); - if (answ) - { - // controllo valori filtrati con ## (sottraendo BITMASK dai valori di filtro) - answ = ((alarmsState[num] & alarmsMask[num]) != (newValue & alarmsMask[num])); - // se fossero ancora differenti controllo ulteriore mask dato il counter dei blink: - if (answ) - { - var blinkFilt = blinkFilter(num); - answ = ((alarmsState[num] & (alarmsMask[num] | blinkFilt)) != (newValue & (alarmsMask[num] | blinkFilt))); - } - } - return answ; - } - - /// - /// Inizializzazione classe con valori calcolati: attenzione si aspetta banchi da 32 bit... - /// - public void setupData() - { - // inizializzo vettore valore allarmi x banco int16 - alarmsState = new uint[size / 2]; - alarmsMask = new uint[size / 2]; - - // una volta inizializzata la classe di base sistemo vettori allarmi disabilitati ed il contatore blink dei fronti di discesa - alarmsBlinkDownCounter = new int[messages.Count]; - int idx = 0; - int bank = 0; - foreach (var item in messages) - { - if (item.StartsWith("##")) - { - alarmsBlinkDownCounter[idx] = -999; - alarmsBlinkUpCounter[idx] = -999; - } - else - { - //alarmsBlinkDownCounter[idx] = blinkDownVal; - alarmsBlinkDownCounter[idx] = 1; - alarmsBlinkUpCounter[idx] = blinkUpVal; - alarmsMask[bank] += (uint)1 << idx; - } - idx++; - // sistemo bank/indice - if (idx > 15) - { - bank++; - idx = 0; - } - } - } - - /// - /// Imposta il valore dello status attuale allarme impostando eventuale valore blink x le variazioni - /// - /// - /// - public void updStatusVal(int num, uint newStatus) - { - // calcola la maschera di variazione da valore precedente - var variations = newStatus ^ alarmsState[num]; - // ciclo sui 16 bit... - for (int i = 0; i < 16; i++) - { - if ((variations & (1 << i)) == (1 << i)) - { - alarmsBlinkDownCounter[num * 16 + i] = blinkDownVal; - } - } - // salvo nuovo valore - alarmsState[num] = newStatus; - } - - #endregion Public Methods - } -#endif - /// /// Classe gestione configurazione parametri di base x configuraizone estesa (es MTConnect, OPC-UA, ...) /// diff --git a/IOB-WIN-NEXT/DATA/CONF/MAIN.ini b/IOB-WIN-NEXT/DATA/CONF/MAIN.ini index 84f43446..bb7dc74b 100644 --- a/IOB-WIN-NEXT/DATA/CONF/MAIN.ini +++ b/IOB-WIN-NEXT/DATA/CONF/MAIN.ini @@ -73,6 +73,6 @@ CLI_INST=SteamWareSim ;STARTLIST=MECART_80 ;STARTLIST=PING ;STARTLIST=PIZ09 -STARTLIST=PIZ04 +STARTLIST=PIZ05 MAXCNC=10 \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/PIZ05.json b/IOB-WIN-NEXT/DATA/CONF/PIZ05.json index 4bcdae83..1ffd2f6c 100644 --- a/IOB-WIN-NEXT/DATA/CONF/PIZ05.json +++ b/IOB-WIN-NEXT/DATA/CONF/PIZ05.json @@ -100,8 +100,8 @@ "func": "MEDIAN", "period": 90, "factor": 270, - "minVal": 0, - "maxVal": 100, + "minVal": -1, + "maxVal": 101, "unit": "Kg" }, "MainPress": { diff --git a/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj b/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj index ab3afa88..9903147e 100644 --- a/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj +++ b/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj @@ -254,6 +254,10 @@ Always + + + + Always diff --git a/IOB-WIN-NEXT/IobModbusTCP.cs b/IOB-WIN-NEXT/IobModbusTCP.cs index 97efdabf..051ac134 100644 --- a/IOB-WIN-NEXT/IobModbusTCP.cs +++ b/IOB-WIN-NEXT/IobModbusTCP.cs @@ -131,55 +131,6 @@ namespace IOB_WIN_NEXT // leggo a ciclo le aree degli allarmi CONFIGURATI, se ne trovo --> segnalo allarme... foreach (var item in alarmMaps) { -#if false - // in primis decremento eventuali blink... - item.updateBlinkCounter(); - // banchi in array Int16 --> scompongo - for (int i = 0; i < item.size / 2; i++) - { - // verifico se usare LUT - bool useLUT = memSetR != null && memSetR.Count > 0; - if (useLUT) - { - int lutAddress = 40000 + item.index; - if (HoldingRegisterLUT.ContainsKey(lutAddress)) - { - try - { - listInt = HoldingRegisterLUT[lutAddress]; - } - catch (Exception exc) - { - lgError($"Errore in lettura da HoldingRegisterLUT per indirizzo {lutAddress} | item {item.memAddr}{Environment.NewLine}{exc}"); - } - } - } - else - { - listInt = readInputReg(item.index, item.size); - } - currStatus = ModbusClient.ConvertRegistersToInt(listInt); - - // verifico SE sia variato... confronto allarmi filtrato stile blink per bit status: - // - allarmi che iniziano per # IGNORATI - // - altri allarmi con un countdown da MAX_COUNTER_BLINK a 0 per il fronte di discesa - if (item.isChanged(i, (uint)currStatus)) - { - answ = currStatus > 0; - if (answ) - { - numErrors++; - } - // registro gli allarmi attivi e trasmetto... - if (sendAlarmVariations(item.memAddr, i, item.alarmsState[i], (uint)(item.alarmsMask[i] & currStatus), item.messages)) - { - // se inviato --> salvo stato da current... - item.updStatusVal(i, (uint)(item.alarmsMask[i] & currStatus)); - } - } - } -#endif - // banchi in array Int16 --> scompongo for (int i = 0; i < item.size / 2; i++) { @@ -208,19 +159,17 @@ namespace IOB_WIN_NEXT // aggiornamento blink counters dato nuovo valore item.checkBlinkCounter(i, (uint)currStatus); -#if false - item.updateBlinkCounter(); -#endif + // calcolo indice errori + if ((uint)(item.alarmsMask[i] & currStatus) > 0) + { + numErrors++; + } // verifico SE sia variato... confronto allarmi filtrato stile blink per bit status: // - allarmi che iniziano per # IGNORATI // - altri allarmi con un countdown da MAX_COUNTER_BLINK a 0 per il fronte di discesa if (item.isChanged(i, (uint)currStatus)) { - if (currStatus > 0) - { - numErrors++; - } // registro gli allarmi attivi e trasmetto... if (sendAlarmVariations(item.memAddr, i, item.alarmsState[i], (uint)(item.alarmsMask[i] & currStatus), item.messages)) { @@ -725,7 +674,7 @@ namespace IOB_WIN_NEXT string deltaValStr = getOptPar("DELTA_VAL"); if (!string.IsNullOrEmpty(deltaValStr)) { - double.TryParse(deltaValStr, out deltaVal); + double.TryParse(deltaValStr.Replace(".",","), out deltaVal); } bool enableByApp = utils.CRB("enableContapezzi"); bool enableByIob = (getOptPar("ENABLE_PZCOUNT") == "TRUE"); @@ -1272,9 +1221,10 @@ namespace IOB_WIN_NEXT // refresh stato allarmi!!! if (connectionOk) { + lgInfo($"Connessione OK: {connectionOk}"); if (adpRunning) { - lgInfo($"Connessione OK: {connectionOk} | adpRunning: {adpRunning}"); + lgInfo($"AdpRunning: {adpRunning}"); } } else @@ -1313,18 +1263,21 @@ namespace IOB_WIN_NEXT /// public override void tryDisconnect() { - lgInfo("Richiesta disconnessione adapter ModBusTCP!"); - try + if (currPLC != null && currPLC.Connected) { - if (currPLC.Connected) + lgInfo("Richiesta disconnessione adapter ModBusTCP!"); + try { - currPLC.Disconnect(); + if (currPLC.Connected) + { + currPLC.Disconnect(); + } + lgInfo("Effettuata disconnessione adapter ModBusTCP!"); + } + catch (Exception exc) + { + lgFatal($"Errore nella disconnessione dall'adapter ModBusTCP{Environment.NewLine}{exc}"); } - lgInfo("Effettuata disconnessione adapter ModBusTCP!"); - } - catch (Exception exc) - { - lgFatal($"Errore nella disconnessione dall'adapter ModBusTCP{Environment.NewLine}{exc}"); } connectionOk = false; } diff --git a/IOB-WIN-NEXT/IobSiemensComeca.cs b/IOB-WIN-NEXT/IobSiemensComeca.cs index 0715bf85..948d5656 100644 --- a/IOB-WIN-NEXT/IobSiemensComeca.cs +++ b/IOB-WIN-NEXT/IobSiemensComeca.cs @@ -75,7 +75,6 @@ namespace IOB_WIN_NEXT currStatus = S7.Net.Types.Counter.FromByteArray(RawInput.Skip(item.index + 2 * i).Take(2).ToArray()); // verifica e decremento blink... item.checkBlinkCounter(i, (uint)currStatus); - //item.updateBlinkCounter(); // verifico SE sia variato... confronto allarmi filtrato stile blink per bit status: // - allarmi che iniziano per # IGNORATI