From 2c6b71dee1830a12c02baa2539d29a6bbb41b072 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Mon, 11 May 2020 15:27:30 +0200 Subject: [PATCH] Completato giro con scrittura REAL --- MTH-Siemens/SiemensProxy.cs | 70 ++++++++++++++++++++++++++++---- MTH-Siemens/bin/Debug/setup.json | 4 +- MTH-Siemens/setup.json | 4 +- 3 files changed, 65 insertions(+), 13 deletions(-) diff --git a/MTH-Siemens/SiemensProxy.cs b/MTH-Siemens/SiemensProxy.cs index 07e353b..da0bb84 100644 --- a/MTH-Siemens/SiemensProxy.cs +++ b/MTH-Siemens/SiemensProxy.cs @@ -56,7 +56,7 @@ namespace MHT_Siemens /// /// Ultimi valori registrati da file /// - protected Dictionary lastValues; + protected Dictionary prevValues; /// /// valori correntemente letti dal file /// @@ -75,7 +75,7 @@ namespace MHT_Siemens { lg = LogManager.GetCurrentClassLogger(); tsslApp.Text = $"{utils.CRS("appName")}"; - lastValues = new Dictionary(); + prevValues = new Dictionary(); currValues = new Dictionary(); loadMemConf(); loadPlc(); @@ -260,7 +260,21 @@ namespace MHT_Siemens private void saveToPLC() { // invio TUTTI i dati al PLC secondo configurazione... - + if (testCncConn()) + { + // decodifico memoria... + memAddress memoria = null; + double valore = -999; + foreach (var item in currValues) + { + memoria = new memAddress(item.Key); + double.TryParse(item.Value, out valore); + // hard coded REAL!!! + byte[] DB_Byte = new byte[4]; + S7.Net.Types.Double.ToByteArray(valore).CopyTo(DB_Byte, 0); + currPLC.WriteBytes(DataType.DataBlock, memoria.DbNum, memoria.indiceMem, DB_Byte); + } + } // loggo invio al PLC! lg.Info("New Value sent to PLC"); } @@ -272,20 +286,19 @@ namespace MHT_Siemens { bool answ = false; // se i 2 vettori sono diversi - if (currValues.Count != lastValues.Count) + if (currValues.Count != prevValues.Count) { - // salvo ed esco subito - lastValues = currValues; + resetPrevVal(); return true; } // verifico ogni singolo valore... foreach (var item in currValues) { // cerco... - if (lastValues.ContainsKey(item.Key)) + if (prevValues.ContainsKey(item.Key)) { // verifico se diversi --> trovato cambio! - answ = currValues[item.Key] != lastValues[item.Key]; + answ = currValues[item.Key] != prevValues[item.Key]; } else { @@ -295,12 +308,24 @@ namespace MHT_Siemens if (answ) { // salvo ed esco subito - lastValues = currValues; + resetPrevVal(); return true; } } return answ; } + /// + /// Refresh oggetto valori precedenti + /// + private void resetPrevVal() + { + // salvo ed esco subito + prevValues = new Dictionary(); + foreach (var item in currValues) + { + prevValues.Add(item.Key, item.Value); + } + } /// /// Effettua rilettura da file @@ -389,6 +414,33 @@ namespace MHT_Siemens answ = reply.Status; return answ; } + /// + /// Test connessione CNC + /// + /// + private bool testCncConn() + { + bool answ = false; + IPStatus pingStatus = testPing(); + // se passa il ping faccio il resto... + if (pingStatus != IPStatus.Success) + { + lg.Error("Errore ping"); + } + else + { + if (!currPLC.IsConnected) currPLC.Open(); + if (!currPLC.IsConnected) + { + lg.Error( "Errore connessione"); + } + else + { + answ = true; + } + } + return answ; + } #endregion } diff --git a/MTH-Siemens/bin/Debug/setup.json b/MTH-Siemens/bin/Debug/setup.json index 6f488c5..49e917b 100644 --- a/MTH-Siemens/bin/Debug/setup.json +++ b/MTH-Siemens/bin/Debug/setup.json @@ -9,10 +9,10 @@ "slot": 1 }, "parametersList": { - "DB701.DBD142": { + "DB999.DBD32": { "Column": "Valore assoluto", "Index": 7, - "MemConf": "DB701.DBD142", + "MemConf": "DB999.DBD32", "DataType": "real" } } diff --git a/MTH-Siemens/setup.json b/MTH-Siemens/setup.json index 6f488c5..49e917b 100644 --- a/MTH-Siemens/setup.json +++ b/MTH-Siemens/setup.json @@ -9,10 +9,10 @@ "slot": 1 }, "parametersList": { - "DB701.DBD142": { + "DB999.DBD32": { "Column": "Valore assoluto", "Index": 7, - "MemConf": "DB701.DBD142", + "MemConf": "DB999.DBD32", "DataType": "real" } }