From 3ea332ca33dfafc1800673cd6932544830d233cd Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 7 Nov 2024 10:47:21 +0100 Subject: [PATCH] FANUC: - fix salvataggio ART/Comm - log ulteriore x MACRO --- IOB-WIN-NEXT/DATA/CONF/VL27.ini | 4 +- IOB-WIN-NEXT/Iob/Fanuc.cs | 157 +++++++++++++++++++++++++++++--- 2 files changed, 147 insertions(+), 14 deletions(-) diff --git a/IOB-WIN-NEXT/DATA/CONF/VL27.ini b/IOB-WIN-NEXT/DATA/CONF/VL27.ini index 0370e3b9..cce1d3a3 100644 --- a/IOB-WIN-NEXT/DATA/CONF/VL27.ini +++ b/IOB-WIN-NEXT/DATA/CONF/VL27.ini @@ -72,8 +72,8 @@ ENABLE_SEND_PZC_BLOCK=TRUE MIN_SEND_PZC_BLOCK=0 MAX_SEND_PZC_BLOCK=100 ; conf cablata set Art/Commessa -SET_NUM_ART=MACRO.966 -SET_NUM_COM=MACRO.965 +SET_NUM_ART=STD.MACRO.966 +SET_NUM_COM=STD.MACRO.965 ; conf parametri memoria READ/WRITE PARAM_CONF=VL27.json DISABLE_SEND_WDST=TRUE diff --git a/IOB-WIN-NEXT/Iob/Fanuc.cs b/IOB-WIN-NEXT/Iob/Fanuc.cs index 11d75e5d..63d64bf5 100644 --- a/IOB-WIN-NEXT/Iob/Fanuc.cs +++ b/IOB-WIN-NEXT/Iob/Fanuc.cs @@ -184,6 +184,7 @@ namespace IOB_WIN_NEXT.Iob bool taskOk = false; string taskVal = ""; string newVal = ""; + string memAddr = ""; int newValInt = 0; // cerco task specifici: se ho startSetup --> imposto bit DBB701.DBB0.4 foreach (var item in task2exe) @@ -204,7 +205,7 @@ namespace IOB_WIN_NEXT.Iob if (memMap.mMapWrite.ContainsKey(item.Key)) { dataConf currMem = memMap.mMapWrite[item.Key]; - string addr = currMem.memAddr; + memAddr = currMem.memAddr; taskVal = $"SET task: {item.Key} --> {newVal} | mem: {currMem.memAddr} - {currMem.size} byte"; // salvo il nuovo valore nella memoria... così prox invio lo trasmetterà memMap.mMapWrite[item.Key].value = newVal; @@ -219,7 +220,7 @@ namespace IOB_WIN_NEXT.Iob taskVal = $"NO MemMap found, SET task: {item.Key} --> {newVal} ({item.Value})"; } // salvo in currProd.. - saveProdData(new KeyValuePair(item.Key, newVal)); + saveProdData(new KeyValuePair(item.Key, item.Value)); break; case taskType.nihil: @@ -251,7 +252,7 @@ namespace IOB_WIN_NEXT.Iob if (memMap.mMapWrite.ContainsKey(item.Key)) { dataConf currMem = memMap.mMapWrite[item.Key]; - string addr = currMem.memAddr; + memAddr = currMem.memAddr; taskVal = $"SET task: {item.Key} --> {newVal} | mem: {currMem.memAddr} - {currMem.size} byte"; // salvo il nuovo valore nella memoria... così prox invio lo trasmetterà memMap.mMapWrite[item.Key].value = newVal; @@ -271,14 +272,15 @@ namespace IOB_WIN_NEXT.Iob //se ho successo rileggo ed eventualmente sistemo valore if (taskOk) { - var rVal = getValByParam("SET_NUM_ART"); + //var rVal = getValByParam("SET_NUM_ART"); + var rVal = getValByMemAddr(memAddr); if (rVal == newVal) { lgInfo("All OK"); } else { - lgError($"Error | rVal: {rVal} | newVal: {newVal}"); + lgError($"Error | memAddr: {memAddr} | rVal: {rVal} | newVal: {newVal}"); } } else @@ -299,7 +301,7 @@ namespace IOB_WIN_NEXT.Iob if (memMap.mMapWrite.ContainsKey(item.Key)) { dataConf currMem = memMap.mMapWrite[item.Key]; - string addr = currMem.memAddr; + memAddr = currMem.memAddr; taskVal = $"SET task: {item.Key} --> {newVal} | mem: {currMem.memAddr} - {currMem.size} byte"; // salvo il nuovo valore nella memoria... così prox invio lo trasmetterà memMap.mMapWrite[item.Key].value = newVal; @@ -316,7 +318,24 @@ namespace IOB_WIN_NEXT.Iob // invio a controller... taskOk = setNumCom(newValInt); - + //se ho successo rileggo ed eventualmente sistemo valore + if (taskOk) + { + //var rVal = getValByParam("SET_NUM_COM"); + var rVal = getValByMemAddr(memAddr); + if (rVal == newVal) + { + lgInfo("All OK"); + } + else + { + lgError($"Error | memAddr: {memAddr} | rVal: {rVal} | newVal: {newVal}"); + } + } + else + { + lgError("Errore in scrittura SetNumCom"); + } // salvo in currProd.. saveProdData(new KeyValuePair(item.Key, newVal)); break; @@ -1928,8 +1947,8 @@ namespace IOB_WIN_NEXT.Iob /// private string getValByParam(string varName) { +#if false string answ = ""; - // verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con indicazione area) string memAddr = getOptPar(varName); if (memAddr.StartsWith("STD")) { @@ -1956,20 +1975,134 @@ namespace IOB_WIN_NEXT.Iob // 2022.05.23 gestione MACRO da testare (Jetco) else if (memAddr.StartsWith("MACRO.")) { + double macroVal = 0; // recupero parametro... int.TryParse(memAddr.Replace("MACRO.", ""), out cntAddr); - lgTrace($"MACRO | Read 01 | memAddr: {memAddr} | idx: {cntAddr}"); + lgTrace($"MACRO | Read 01 | memAddr: {memAddr} | idx: {cntAddr} | macroVal: {macroVal}"); // processo parametro stopwatch.Restart(); - double macroVal = 0; - bool esitoMacro = FANUC_ref.F_Read_macro(cntAddr, ref macroVal); + FANUC_ref.F_Read_macro(cntAddr, ref macroVal); if (utils.CRB("recTime")) { TimingData.addResult(cIobConf.codIOB, "R-MACRO", stopwatch.ElapsedTicks); } // salvo valore answ = macroVal.ToString(); - lgTrace($"MACRO | Read 02 | memAddr: {memAddr} | idx: {cntAddr} | esito: {esitoMacro} | macroVal: {macroVal}"); + lgTrace($"MACRO | Read 02 | memAddr: {memAddr} | idx: {cntAddr} | macroVal: {macroVal}"); + } + // altrimenti se legge da area memoria specifica leggo da li... formto tipo STD.D.1604.DW + else + { + memAddressFanuc areaCounter = new memAddressFanuc(memAddr); + + if (isVerboseLog) + { + lgInfo("getValByParam [0] area memoria: {0}.{1}.{2}", areaCounter.mType, areaCounter.mPos, areaCounter.vType); + } + + // leggo! + stopwatch.Restart(); + // switch x tipo dati --> tipo lettura... e salvo ultimo conteggio rilevato + switch (areaCounter.vType) + { + case "B": + byte valB = 0; + FANUC_ref.F_RW_Byte(false, areaCounter.mType, areaCounter.mPos, ref valB); + outputVal = valB; + break; + + case "D": + ushort valW = 0; + FANUC_ref.F_RW_Word(false, areaCounter.mType, areaCounter.mPos, ref valW); + outputVal = valW; + break; + + case "DW": + uint valDW = 0; + FANUC_ref.F_RW_DWord(false, areaCounter.mType, areaCounter.mPos, ref valDW); + if (isVerboseLog) + { + lgInfo("[1] valDW PAR: {0}", valDW); + } + + outputVal = valDW; + if (isVerboseLog) + { + lgInfo("[2] outputVal PAR: {0}", outputVal); + } + + break; + + default: + break; + } + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, string.Format("R-{0}.{1}.{2}", areaCounter.mType, areaCounter.mPos, areaCounter.vType), stopwatch.ElapsedTicks); + } + + // salvo... + answ = outputVal.ToString(); + if (isVerboseLog) + { + lgInfo("[3] PAR letto: {0} | {1}", varName, answ); + } + } + stopwatch.Stop(); + } +#endif + string memAddr = getOptPar(varName); + string answ =getValByMemAddr(memAddr); + return answ; + } + /// + /// Recupera il valore INT dal nome del parametro per successivo processing + /// + /// + /// + private string getValByMemAddr(string memAddr) + { + string answ = ""; + // verifico quale modalità sia richiesta: STD (6711) oppure BIT (Custom, con indicazione area) + if (memAddr.StartsWith("STD")) + { + // inizio verifica area memoria/parametro levando prima parte codice + memAddr = memAddr.Replace("STD.", ""); + // var di appoggio + int cntAddr = 0; + object outputVal = new object(); + // verifico se si tratta di lettura parametro... formato tipo STD.PAR.6711 + if (memAddr.StartsWith("PAR.")) + { + // recupero parametro... + int.TryParse(memAddr.Replace("PAR.", ""), out cntAddr); + // processo parametro + stopwatch.Restart(); + FANUC_ref.F_RW_Param_Integer(false, cntAddr, 3, ref outputVal); + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, string.Format("R{0}-PAR", 4), stopwatch.ElapsedTicks); + } + // salvo valore + answ = outputVal.ToString(); + } + // 2022.05.23 gestione MACRO da testare (Jetco) + else if (memAddr.StartsWith("MACRO.")) + { + double macroVal = 0; + // recupero parametro... + int.TryParse(memAddr.Replace("MACRO.", ""), out cntAddr); + lgTrace($"MACRO | Read 01 | memAddr: {memAddr} | idx: {cntAddr} | macroVal: {macroVal}"); + // processo parametro + stopwatch.Restart(); + FANUC_ref.F_Read_macro(cntAddr, ref macroVal); + if (utils.CRB("recTime")) + { + TimingData.addResult(cIobConf.codIOB, "R-MACRO", stopwatch.ElapsedTicks); + } + // salvo valore + answ = macroVal.ToString(); + lgTrace($"MACRO | Read 02 | memAddr: {memAddr} | idx: {cntAddr} | macroVal: {macroVal}"); } // altrimenti se legge da area memoria specifica leggo da li... formto tipo STD.D.1604.DW else