diff --git a/IOB-WIN/DATA/CONF/INTERCL_01.ini b/IOB-WIN/DATA/CONF/INTERCL_01.ini index 516c6fd3..3df616e4 100644 --- a/IOB-WIN/DATA/CONF/INTERCL_01.ini +++ b/IOB-WIN/DATA/CONF/INTERCL_01.ini @@ -57,6 +57,7 @@ PZCOUNT_MODE=STD.DB1275.DBDW4 DISABLE_PZCOUNT=TRUE ENABLE_DYN_DATA=TRUE FORCE_DYN_DATA=TRUE +NEW_DYN_DATA=TRUE ; conf parametri x gestione invio dati "ricetta" PARAM_CONF=INTERCL_01.json diff --git a/IOB-WIN/IobSiemens.cs b/IOB-WIN/IobSiemens.cs index 44030bc8..34f9ccf4 100644 --- a/IOB-WIN/IobSiemens.cs +++ b/IOB-WIN/IobSiemens.cs @@ -909,6 +909,75 @@ namespace IOB_WIN { // valore non presente in vers default... se gestito fare override Dictionary outVal = new Dictionary(); + if (utils.CRB("enableTSVC")) + { + // processing SOLO SE ho in memoria abbastanza dati... + if (RawInput.Length < parametri.memSizeRead) + { + lgError($"Impossibile processare getDynData x Siemens PLC, vettore memoria troppo piccolo: {RawInput.Length} byte / {parametri.memSizeRead} byte presenti/richiesti)"); + } + else + { + try + { + // processo x ogni valore configurato... + if (memMap.mMapRead.Count > 0) + { + // inizializzo i valori + bool scaduto = false; + bool valBool = false; + int valInt = 0; + double valDouble = 0; + string valString = ""; + // procedo x ogni valore configurato...... + foreach (var item in memMap.mMapRead) + { + // in primis DEVO determinare di quale TIPO di valore ho bisogno... + switch (item.Value.tipoMem) + { + case siemensDataType.Boolean: + valBool = S7.Net.Types.Boolean.GetValue(RawInput[item.Value.index], item.Value.size); + break; + case siemensDataType.Int: + valInt = S7.Net.Types.Int.FromByteArray(RawInput.Skip(item.Value.index).Take(item.Value.size).ToArray()); + scaduto = stackVal_TSVC(item.Key, valInt); + // recupero VC + valInt = getVal_TSVC_int(item.Key, scaduto); ; + outVal.Add(item.Key, $"{valInt}"); + LastTSVC[item.Key] = valInt; + break; + case siemensDataType.DInt: + valInt = S7.Net.Types.DInt.FromByteArray(RawInput.Skip(item.Value.index).Take(item.Value.size).ToArray()); + scaduto = stackVal_TSVC(item.Key, valInt); + // recupero VC + valInt = getVal_TSVC_int(item.Key, scaduto); ; + outVal.Add(item.Key, $"{valInt}"); + LastTSVC[item.Key] = valInt; + break; + case siemensDataType.Real: + valDouble = S7.Net.Types.Double.FromByteArray(RawInput.Skip(item.Value.index).Take(item.Value.size).ToArray()); + scaduto = stackVal_TSVC(item.Key, valInt); + // recupero VC + valInt = getVal_TSVC_int(item.Key, scaduto); ; + outVal.Add(item.Key, $"{valInt:N2}"); + LastTSVC[item.Key] = valInt; + break; + case siemensDataType.String: + valString = S7.Net.Types.String.FromByteArray(RawInput.Skip(item.Value.index).Take(item.Value.size).ToArray()); + break; + default: + break; + } + } + } + } + catch (Exception exc) + { + lgError(exc, "Errore in getDynData x Siemens PLC"); + } + } + } + return outVal; } diff --git a/IOB-WIN/IobSiemensAt2001.cs b/IOB-WIN/IobSiemensAt2001.cs index 3be4ab16..8921707b 100644 --- a/IOB-WIN/IobSiemensAt2001.cs +++ b/IOB-WIN/IobSiemensAt2001.cs @@ -33,40 +33,6 @@ namespace IOB_WIN { lgInfo("NEW IOB SIEMENS versione VIPA"); lastPLCWatchDog = DateTime.Now.AddMinutes(-1); -#if false - // imposto i parametri speciali x calcolo... - var chiaviTSVC = findOptPar("TSVC"); - if (chiaviTSVC.Count > 0) - { - lgInfo($"Trovate {chiaviTSVC.Count} chiavi TSVC"); - string[] codVal; - VCData currConf; - int periodo = 0; - VC_func funz = VC_func.POINT; - // accodo nella conf... - foreach (var item in chiaviTSVC) - { - codVal = item.Value.Split(':'); - Enum.TryParse(codVal[0], out funz); - int.TryParse(codVal[1], out periodo); - currConf = new VCData() - { - Funzione = funz, - Period = periodo, - DTStart = DateTime.Now.AddHours(-1), - dataArray = new List() - }; - TSVC_Data.Add(item.Key.Replace("TSVC_", ""), currConf); - } - // documento... - foreach (var item in TSVC_Data) - { - lgInfo($"TSVC: {item.Key} | periodo: {item.Value.Period} | funz: {item.Value.Funzione}"); - // salvo i valori PREC... - LastTSVC.Add(item.Key, 0); - } - } -#endif } #region Metodi specifici (da verificare/completare in implementazione) @@ -187,9 +153,6 @@ namespace IOB_WIN // scrivo comunque! taskOk = S7WriteBB(ref MemBlock); - - - return taskDone; } @@ -200,100 +163,107 @@ namespace IOB_WIN public override Dictionary getDynData() { Dictionary outVal = new Dictionary(); - // processing SOL OSE ho in memoria abb dati... - if (RawInput.Length < parametri.memSizeRead) + // controllo se eseguire versione base del getDynData + if (getOptPar("NEW_DYN_DATA") != "") { - lgError($"Impossibile processare getDynData x Siemens AT2001, vettore memoria troppo piccolo: {RawInput.Length} byte / {parametri.memSizeRead} byte presenti/richiesti)"); + outVal = base.getDynData(); } else { - try + // processing SOL OSE ho in memoria abb dati... + if (RawInput.Length < parametri.memSizeRead) { - // campi REAL - double T_Attuale_Cil = S7.Net.Types.Double.FromByteArray(RawInput.Skip(16).Take(4).ToArray()); - int Bruc_0_100 = S7.Net.Types.Int.FromByteArray(RawInput.Skip(28).Take(2).ToArray()); - int Dep_Cil_mmH2O = S7.Net.Types.Int.FromByteArray(RawInput.Skip(30).Take(2).ToArray()); - int Asp_0_100 = S7.Net.Types.Int.FromByteArray(RawInput.Skip(32).Take(2).ToArray()); - int Ampere_Asp = S7.Net.Types.Int.FromByteArray(RawInput.Skip(34).Take(2).ToArray()); - int Temp_Filtro = S7.Net.Types.Int.FromByteArray(RawInput.Skip(36).Take(2).ToArray()); - int Ampere_Cil = S7.Net.Types.Int.FromByteArray(RawInput.Skip(38).Take(2).ToArray()); - int Flowrate = S7.Net.Types.Int.FromByteArray(RawInput.Skip(40).Take(2).ToArray()); - int Ampere_Dosat = S7.Net.Types.Int.FromByteArray(RawInput.Skip(42).Take(2).ToArray()); - int Tot_Parz_Dosatore = S7.Net.Types.DInt.FromByteArray(RawInput.Skip(48).Take(4).ToArray()); - int Tot_Dosatore = S7.Net.Types.DInt.FromByteArray(RawInput.Skip(52).Take(4).ToArray()); - - // verifico SE devo riportare dati VC - if (utils.CRB("enableTSVC")) + lgError($"Impossibile processare getDynData x Siemens AT2001, vettore memoria troppo piccolo: {RawInput.Length} byte / {parametri.memSizeRead} byte presenti/richiesti)"); + } + else + { + try { - bool[] scaduti = new bool[11]; - // salvo in stack le VC rilevate - scaduti[0] = stackVal_TSVC("T_Attuale_Cil", T_Attuale_Cil); - scaduti[1] = stackVal_TSVC("Bruc_0_100", Bruc_0_100); - scaduti[2] = stackVal_TSVC("Dep_Cil_mmH2O", Dep_Cil_mmH2O); - scaduti[3] = stackVal_TSVC("Asp_0_100", Asp_0_100); - scaduti[4] = stackVal_TSVC("Ampere_Asp", Ampere_Asp); - scaduti[5] = stackVal_TSVC("Temp_Filtro", Temp_Filtro); - scaduti[6] = stackVal_TSVC("Ampere_Cil", Ampere_Cil); - scaduti[7] = stackVal_TSVC("Flowrate", Flowrate); - scaduti[8] = stackVal_TSVC("Ampere_Dosat", Ampere_Dosat); - scaduti[9] = stackVal_TSVC("Tot_Parz_Dosatore", Tot_Parz_Dosatore); - scaduti[10] = stackVal_TSVC("Tot_Dosatore", Tot_Dosatore); + // campi REAL + double T_Attuale_Cil = S7.Net.Types.Double.FromByteArray(RawInput.Skip(16).Take(4).ToArray()); + int Bruc_0_100 = S7.Net.Types.Int.FromByteArray(RawInput.Skip(28).Take(2).ToArray()); + int Dep_Cil_mmH2O = S7.Net.Types.Int.FromByteArray(RawInput.Skip(30).Take(2).ToArray()); + int Asp_0_100 = S7.Net.Types.Int.FromByteArray(RawInput.Skip(32).Take(2).ToArray()); + int Ampere_Asp = S7.Net.Types.Int.FromByteArray(RawInput.Skip(34).Take(2).ToArray()); + int Temp_Filtro = S7.Net.Types.Int.FromByteArray(RawInput.Skip(36).Take(2).ToArray()); + int Ampere_Cil = S7.Net.Types.Int.FromByteArray(RawInput.Skip(38).Take(2).ToArray()); + int Flowrate = S7.Net.Types.Int.FromByteArray(RawInput.Skip(40).Take(2).ToArray()); + int Ampere_Dosat = S7.Net.Types.Int.FromByteArray(RawInput.Skip(42).Take(2).ToArray()); + int Tot_Parz_Dosatore = S7.Net.Types.DInt.FromByteArray(RawInput.Skip(48).Take(4).ToArray()); + int Tot_Dosatore = S7.Net.Types.DInt.FromByteArray(RawInput.Skip(52).Take(4).ToArray()); // verifico SE devo riportare dati VC - if (baseUtils.CountTrue(scaduti) > 0) + if (utils.CRB("enableTSVC")) { - T_Attuale_Cil = getVal_TSVC_int("T_Attuale_Cil", scaduti[0]); - Bruc_0_100 = getVal_TSVC_int("Bruc_0_100", scaduti[1]); - Dep_Cil_mmH2O = getVal_TSVC_int("Dep_Cil_mmH2O", scaduti[2]); - Asp_0_100 = getVal_TSVC_int("Asp_0_100", scaduti[3]); - Ampere_Asp = getVal_TSVC_int("Ampere_Asp", scaduti[4]); - Temp_Filtro = getVal_TSVC_int("Temp_Filtro", scaduti[5]); - Ampere_Cil = getVal_TSVC_int("Ampere_Cil", scaduti[6]); - Flowrate = getVal_TSVC_int("Flowrate", scaduti[7]); - Ampere_Dosat = getVal_TSVC_int("Ampere_Dosat", scaduti[8]); - Tot_Parz_Dosatore = getVal_TSVC_int("Tot_Parz_Dosatore", scaduti[9]); - Tot_Dosatore = getVal_TSVC_int("Tot_Dosatore", scaduti[10]); - outVal.Add("T_Attuale_Cil", $"{T_Attuale_Cil:N1}"); - outVal.Add("Bruc_0_100", $"{Bruc_0_100}"); - outVal.Add("Dep_Cil_mmH2O", $"{Dep_Cil_mmH2O}"); - outVal.Add("Asp_0_100", $"{Asp_0_100}"); - outVal.Add("Ampere_Asp", $"{Ampere_Asp}"); - outVal.Add("Temp_Filtro", $"{Temp_Filtro}"); - outVal.Add("Ampere_Cil", $"{Ampere_Cil}"); - outVal.Add("Flowrate", $"{Flowrate}"); - outVal.Add("Ampere_Dosat", $"{Ampere_Dosat}"); - outVal.Add("Tot_Parz_Dosatore", $"{Tot_Parz_Dosatore}"); - outVal.Add("Tot_Dosatore", $"{Tot_Dosatore}"); + bool[] scaduti = new bool[11]; + // salvo in stack le VC rilevate + scaduti[0] = stackVal_TSVC("T_Attuale_Cil", T_Attuale_Cil); + scaduti[1] = stackVal_TSVC("Bruc_0_100", Bruc_0_100); + scaduti[2] = stackVal_TSVC("Dep_Cil_mmH2O", Dep_Cil_mmH2O); + scaduti[3] = stackVal_TSVC("Asp_0_100", Asp_0_100); + scaduti[4] = stackVal_TSVC("Ampere_Asp", Ampere_Asp); + scaduti[5] = stackVal_TSVC("Temp_Filtro", Temp_Filtro); + scaduti[6] = stackVal_TSVC("Ampere_Cil", Ampere_Cil); + scaduti[7] = stackVal_TSVC("Flowrate", Flowrate); + scaduti[8] = stackVal_TSVC("Ampere_Dosat", Ampere_Dosat); + scaduti[9] = stackVal_TSVC("Tot_Parz_Dosatore", Tot_Parz_Dosatore); + scaduti[10] = stackVal_TSVC("Tot_Dosatore", Tot_Dosatore); - // salvo! - LastTSVC["T_Attuale_Cil"] = T_Attuale_Cil; - LastTSVC["Bruc_0_100"] = Bruc_0_100; - LastTSVC["Dep_Cil_mmH2O"] = Dep_Cil_mmH2O; - LastTSVC["Asp_0_100"] = Asp_0_100; - LastTSVC["Ampere_Asp"] = Ampere_Asp; - LastTSVC["Temp_Filtro"] = Temp_Filtro; - LastTSVC["Ampere_Cil"] = Ampere_Cil; - LastTSVC["Flowrate"] = Flowrate; - LastTSVC["Ampere_Dosat"] = Ampere_Dosat; - LastTSVC["Tot_Parz_Dosatore"] = Tot_Parz_Dosatore; - LastTSVC["Tot_Dosatore"] = Tot_Dosatore; + // verifico SE devo riportare dati VC + if (baseUtils.CountTrue(scaduti) > 0) + { + T_Attuale_Cil = getVal_TSVC_int("T_Attuale_Cil", scaduti[0]); + Bruc_0_100 = getVal_TSVC_int("Bruc_0_100", scaduti[1]); + Dep_Cil_mmH2O = getVal_TSVC_int("Dep_Cil_mmH2O", scaduti[2]); + Asp_0_100 = getVal_TSVC_int("Asp_0_100", scaduti[3]); + Ampere_Asp = getVal_TSVC_int("Ampere_Asp", scaduti[4]); + Temp_Filtro = getVal_TSVC_int("Temp_Filtro", scaduti[5]); + Ampere_Cil = getVal_TSVC_int("Ampere_Cil", scaduti[6]); + Flowrate = getVal_TSVC_int("Flowrate", scaduti[7]); + Ampere_Dosat = getVal_TSVC_int("Ampere_Dosat", scaduti[8]); + Tot_Parz_Dosatore = getVal_TSVC_int("Tot_Parz_Dosatore", scaduti[9]); + Tot_Dosatore = getVal_TSVC_int("Tot_Dosatore", scaduti[10]); + outVal.Add("T_Attuale_Cil", $"{T_Attuale_Cil:N1}"); + outVal.Add("Bruc_0_100", $"{Bruc_0_100}"); + outVal.Add("Dep_Cil_mmH2O", $"{Dep_Cil_mmH2O}"); + outVal.Add("Asp_0_100", $"{Asp_0_100}"); + outVal.Add("Ampere_Asp", $"{Ampere_Asp}"); + outVal.Add("Temp_Filtro", $"{Temp_Filtro}"); + outVal.Add("Ampere_Cil", $"{Ampere_Cil}"); + outVal.Add("Flowrate", $"{Flowrate}"); + outVal.Add("Ampere_Dosat", $"{Ampere_Dosat}"); + outVal.Add("Tot_Parz_Dosatore", $"{Tot_Parz_Dosatore}"); + outVal.Add("Tot_Dosatore", $"{Tot_Dosatore}"); + + // salvo! + LastTSVC["T_Attuale_Cil"] = T_Attuale_Cil; + LastTSVC["Bruc_0_100"] = Bruc_0_100; + LastTSVC["Dep_Cil_mmH2O"] = Dep_Cil_mmH2O; + LastTSVC["Asp_0_100"] = Asp_0_100; + LastTSVC["Ampere_Asp"] = Ampere_Asp; + LastTSVC["Temp_Filtro"] = Temp_Filtro; + LastTSVC["Ampere_Cil"] = Ampere_Cil; + LastTSVC["Flowrate"] = Flowrate; + LastTSVC["Ampere_Dosat"] = Ampere_Dosat; + LastTSVC["Tot_Parz_Dosatore"] = Tot_Parz_Dosatore; + LastTSVC["Tot_Dosatore"] = Tot_Dosatore; + } + else + { + outVal.Add("DYNDATA", $"T_Attuale_Cil {LastTSVC["T_Attuale_Cil"]:N1} | Tot_Dosatore {LastTSVC["Tot_Dosatore"]} | Bruc_0_100 {LastTSVC["Bruc_0_100"]} | Flowrate {LastTSVC["Flowrate"]}"); + } } else { outVal.Add("DYNDATA", $"T_Attuale_Cil {LastTSVC["T_Attuale_Cil"]:N1} | Tot_Dosatore {LastTSVC["Tot_Dosatore"]} | Bruc_0_100 {LastTSVC["Bruc_0_100"]} | Flowrate {LastTSVC["Flowrate"]}"); } } - else + catch (Exception exc) { - outVal.Add("DYNDATA", $"T_Attuale_Cil {LastTSVC["T_Attuale_Cil"]:N1} | Tot_Dosatore {LastTSVC["Tot_Dosatore"]} | Bruc_0_100 {LastTSVC["Bruc_0_100"]} | Flowrate {LastTSVC["Flowrate"]}"); + lgError(exc, "Errore in getDynData x Siemens AT2001"); } } - catch (Exception exc) - { - lgError(exc, "Errore in getDynData x Siemens AT2001"); - } } - return outVal; } diff --git a/Jenkinsfile b/Jenkinsfile index edb86738..ef25258d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -16,7 +16,7 @@ pipeline { /* calcolo numero versione... diverso x branch MASTER/DEVELOP */ script { - withEnv(['NEXT_BUILD_NUMBER=473']) { + withEnv(['NEXT_BUILD_NUMBER=474']) { // env.versionNumber = VersionNumber(versionNumberString : '2.3.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true) env.versionNumber = VersionNumber(versionNumberString : '2.3.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true, overrideBuildsAllTime: '${NEXT_BUILD_NUMBER}') env.APP_NAME = 'MAPO-IOB-WIN'