diff --git a/IOB-WIN/IobGeneric.cs b/IOB-WIN/IobGeneric.cs index dcfcea4f..6b3f6fe3 100644 --- a/IOB-WIN/IobGeneric.cs +++ b/IOB-WIN/IobGeneric.cs @@ -809,8 +809,6 @@ namespace IOB_WIN utils.callUrl(urlSetM2IOB); } } - - /// /// Chiede elenco dei task da eseguire /// - formato Json @@ -834,6 +832,24 @@ namespace IOB_WIN return answ; } /// + /// Stringa raw dei parametri da scrivere... + /// + /// + protected string getParamws2write() + { + string answ = ""; + if (checkServerAlive) + { + string url2call = $"{urlGetParams2Write}"; + if (verboseLog) + { + lgInfo("chiamata URL " + url2call); + } + answ = utils.callUrl(url2call); + } + return answ; + } + /// /// Cancella dal server i task eseguiti /// /// @@ -1284,7 +1300,7 @@ namespace IOB_WIN Dictionary taskDone = new Dictionary(); // recupero elenco delle cose da fare string resp = getTask2exe(); - if (resp != "") + if (!string.IsNullOrEmpty(resp)) { try { @@ -1359,6 +1375,8 @@ namespace IOB_WIN dataConf currMem = memMap.mMapWrite[item.Key]; string addr = currMem.memAddr; taskVal = $"SET task: {item.Key} --> {item.Value} | mem: {currMem.memAddr} - {currMem.size} byte"; + // salvo il nuovo valore nella memoria... così prox invio lo trasmetterà + memMap.mMapWrite[item.Key].value = item.Value; } else { @@ -1387,15 +1405,21 @@ namespace IOB_WIN lgInfo($"Chiamata stopSetup: taskOk: {taskOk} | taskVal: {taskVal}"); break; case taskType.setParameter: - // i parametri me li aspetto come stringa composta paramName|paramvalue - if (item.Value.Contains("|")) + // richiedo da URL i parametri WRITE da popolare + taskVal = processMemWriteRequests(); + // se restituiscce "" faccio altra prova... + if (string.IsNullOrEmpty(taskVal)) { - string[] paramsJob = item.Value.Split('|'); - taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}"; - } - else - { - taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value"; + // i parametri me li aspetto come stringa composta paramName|paramvalue + if (item.Value.Contains("|")) + { + string[] paramsJob = item.Value.Split('|'); + taskVal = $"REQUEST SET PARAMETERS: {paramsJob[0]} --> {paramsJob[1]}"; + } + else + { + taskVal = $"WRONG REQUEST FOR SET PARAMETERS: {item.Value} doesnt contain pipe for splitting key/value"; + } } break; default: @@ -1409,6 +1433,57 @@ namespace IOB_WIN return taskDone; } + /// + /// Processa le richieste di scrittura memoria + /// + /// + public virtual string processMemWriteRequests() + { + string answ = ""; + // li salvo nei parametri in memoria locale (ogni adapter DOVREBBE salvare POI sul VERO PLC) + List writeList = new List(); + List updatedPar = new List(); + // recupero elenco delle cose da fare + string resp = getParamws2write(); + if (!string.IsNullOrEmpty(resp)) + { + try + { + writeList = JsonConvert.DeserializeObject>(resp); + // se ho da fare chiamo esecuzione.. + if (writeList.Count > 0) + { + foreach (var item in writeList) + { + // scrivo in memoria + if (memMap.mMapWrite.ContainsKey(item.uid)) + { + memMap.mMapWrite[item.uid].value = item.reqValue; + // accodo in stringa taskVal... + answ += $" | Parameter {item.uid} --> {item.reqValue}"; + // sistemo valori + item.reqValue = ""; + // salvo in lista da ritrasmettere + updatedPar.Add(item); + } + else + { + answ += $" | Error: parameter {item.uid} not found"; + } + } + // invio su cloud parametri! + string rawData = JsonConvert.SerializeObject(updatedPar); + utils.callUrl($"{urlUpdateWriteParams}", rawData); + } + } + catch (Exception exc) + { + lgError($"Eccezione in processServerRequests:{Environment.NewLine}{exc}"); + } + } + return answ; + } + /// /// Metodo generico di reset contapezzi... /// @@ -2068,6 +2143,25 @@ namespace IOB_WIN } } /// + /// URL per richiamo parametri da scrivere... + /// + public string urlGetParams2Write + { + get + { + string answ = ""; + try + { + answ = string.Format(@"http://{0}{1}{2}/getObjItems2Write/{3}", cIobConf.serverData.MPIP, cIobConf.serverData.MPURL, cIobConf.serverData.CMDALIVE, cIobConf.codIOB); + } + catch (Exception exc) + { + lgError(exc, "Errore in composizione urlGetParams2Write"); + } + return answ; + } + } + /// /// URL per richiamo task da eseguire... /// public string urlGetTask2Exe @@ -2194,7 +2288,29 @@ namespace IOB_WIN try { string machineName = Environment.MachineName; - answ = string.Format(@"http://{0}{1}{2}/upsertObjItems/{3}", cIobConf.serverData.MPIP, cIobConf.serverData.MPURL, cIobConf.serverData.CMDALIVE, cIobConf.codIOB); + string apiCall = "setObjItems"; + answ = string.Format(@"http://{0}{1}{2}/{3}/{4}", cIobConf.serverData.MPIP, cIobConf.serverData.MPURL, cIobConf.serverData.CMDALIVE, apiCall, cIobConf.codIOB); + } + catch (Exception exc) + { + lgError(exc, "Errore in composizione urlSaveMemConf"); + } + return answ; + } + } + /// + /// URL per salvataggio in UPSERT dei PARAMETRI IOB scritti... + /// + public string urlUpdateWriteParams + { + get + { + string answ = ""; + try + { + string machineName = Environment.MachineName; + string apiCall = "upsertObjItems"; + answ = string.Format(@"http://{0}{1}{2}/{3}/{4}", cIobConf.serverData.MPIP, cIobConf.serverData.MPURL, cIobConf.serverData.CMDALIVE, apiCall, cIobConf.codIOB); } catch (Exception exc) { diff --git a/IOB-WIN/IobSimula.cs b/IOB-WIN/IobSimula.cs index a0659aed..37751b69 100644 --- a/IOB-WIN/IobSimula.cs +++ b/IOB-WIN/IobSimula.cs @@ -523,7 +523,6 @@ namespace IOB_WIN private void decodeOtherData() { } - /// /// Recupero programma in lavorazione /// @@ -535,23 +534,23 @@ namespace IOB_WIN return prgName; } /// - /// Recupero dati override (da area G che è già stata letta...) + /// Genera un valore random POSSIBILMENTE impiegando i valori min/max da conf memoria /// + /// /// - public override Dictionary getOverrides() + protected string getSimVal(string memName) { - Dictionary outVal = new Dictionary(); - // processo SOLO SE connected... - if (connectionOk) + Random rnd = new Random(); + int answ = 0; + int minVal = 0; + int maxVal = 100; + if (memMap.mMapRead.ContainsKey(memName)) { - Random rnd = new Random(); - int feedOvr = rnd.Next(1, 100); - int rapdOvr = rnd.Next(1, 120); - outVal.Add("FEED_OVER", feedOvr.ToString()); - outVal.Add("RAPID_OVER", rapdOvr.ToString()); - + minVal = memMap.mMapRead[memName].minVal; + maxVal = memMap.mMapRead[memName].maxVal; } - return outVal; + answ = rnd.Next(minVal, maxVal); + return answ.ToString(); } /// /// Recupero info sistema generiche @@ -571,15 +570,16 @@ namespace IOB_WIN // valore non presente in vers default... se gestito fare override Dictionary outVal = new Dictionary(); Random rnd = new Random(); - int posX = rnd.Next(1, 1000); - int posY = rnd.Next(1, 1000); - int posZ = rnd.Next(1, 1000); - outVal.Add("POS_X", posX.ToString()); - outVal.Add("POS_Y", posY.ToString()); - outVal.Add("POS_Z", posZ.ToString()); // controllo conf memorie json (se ci sono...) try { + if (memMap.mMapWrite.Count > 0) + { + foreach (var item in memMap.mMapWrite) + { + outVal.Add(item.Key, item.Value.value); + } + } if (memMap.mMapRead.Count > 0) { foreach (var item in memMap.mMapRead) diff --git a/Jenkinsfile b/Jenkinsfile index 299a2219..d22d9def 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -16,7 +16,7 @@ pipeline { /* calcolo numero versione... diverso x branch MASTER/DEVELOP */ script { - withEnv(['NEXT_BUILD_NUMBER=508']) { + withEnv(['NEXT_BUILD_NUMBER=509']) { // env.versionNumber = VersionNumber(versionNumberString : '2.4.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true) env.versionNumber = VersionNumber(versionNumberString : '2.4.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true, overrideBuildsAllTime: '${NEXT_BUILD_NUMBER}') env.APP_NAME = 'MAPO-IOB-WIN'