diff --git a/IOB-WIN/DATA/CONF/MAIN.ini b/IOB-WIN/DATA/CONF/MAIN.ini index 294845b9..34444a63 100644 --- a/IOB-WIN/DATA/CONF/MAIN.ini +++ b/IOB-WIN/DATA/CONF/MAIN.ini @@ -39,10 +39,10 @@ CMDIOB2CALL=/IOB/getIob2call?GWIP= ;STARTLIST=VL25 ; INTERCLAYS FORNO -STARTLIST=INTERCL_01 +;STARTLIST=INTERCL_01 ; INTERCLAYS MISCELA -;STARTLIST=INTERCL_02 +STARTLIST=INTERCL_02 diff --git a/IOB-WIN/IobOmron.cs b/IOB-WIN/IobOmron.cs index e4ca7396..c03391f0 100644 --- a/IOB-WIN/IobOmron.cs +++ b/IOB-WIN/IobOmron.cs @@ -46,6 +46,69 @@ namespace IOB_WIN /// protected short[] memWriteWR; + // + /// Calcola la conversione da byte --> num decimale --> HEX --> conversione come stringa in INT + /// + /// + /// + protected int convDHD(short valore) + { + int answ = 0; + string hexVal = valore.ToString("x"); + int.TryParse(hexVal, out answ); + return answ; + } + // + /// Calcola la conversione da INTERO a intero HEX x OMRON + /// + /// + /// + protected int convHD(string hexVal) + { + int answ = 0; + try + { + if (!hexVal.StartsWith("0x")) + { + hexVal = "0x" + hexVal; + } + answ = Convert.ToInt32(hexVal, 16); + } + catch + { } + return answ; + } + /// + /// Converte un valore di 2 short in un unico numero accostato: + /// es: legge delle coppie di valori INT, vanno trasformati in HEX e POI accodati, dove il primo è x 1 e il secondo x 10000 (in pratica va in testa) + /// 12540 --> diviso in 1 | 2540 --> in HEX diventa 1 | 9472, ma il 9472 va su byte[0] e 1 su byte[1] + /// + /// + /// + protected int convFromHex(short[] valori) + { + int answ = 0; + string fullVal = $"{convDHD(valori[1]).ToString("D4")}{convDHD(valori[0]).ToString("D4")}"; + int.TryParse(fullVal, out answ); + return answ; + } + /// + /// Converte un valore intero in 2 short che il PLC riporterà ad HEX x visualizzare: + /// es: legge delle coppie di valori INT, vanno trasformati in HEX e POI accodati, dove il primo è x 1 e il secondo x 10000 (in pratica va in testa) + /// 12540 --> diviso in 1 | 2540 --> in HEX diventa 1 | 9472, ma il 9472 va su byte[0] e 1 su byte[1] + /// + /// + /// + private short[] convToHex(int valoreInt) + { + short[] answ = new short[2]; + string fullVal = valoreInt.ToString("D8"); + // converto un pezzo alla volta... + answ[0] = (short)convHD(fullVal.Substring(4, 4)); + answ[1] = (short)convHD(fullVal.Substring(0, 4)); + return answ; + } + /// /// estende l'init della classe base... /// @@ -58,6 +121,18 @@ namespace IOB_WIN lastPzCountSend = DateTime.Now; lastWarnODL = DateTime.Now; + + // test conversione valori... + short[] valDM = new short[2]; + // cario dati + valDM[0] = 9472; + valDM[1] = 1; + // legge delle coppie di valori INT, vanno trasformati in HEX e POI accodati, dove il primo è x 1 e il secondo x 10000 (in pratica va in testa) + // esempio 12540 --> diviso in 1 | 2540 --> in HEX diventa 1 | 9472, ma il 9472 va su byte[0] e 1 su byte[1] + var testDec = convFromHex(valDM); + + var testHex = convToHex(testDec); + #if false OMRON_ref = new OmronFinsTCP.Net.EtherNetPLC(); OMRON_ref.Link("192.168.250.1", 9600, 500); @@ -96,6 +171,7 @@ namespace IOB_WIN omronFullTest(); #endif } + /// /// Test completo funzioni OMRON /// @@ -423,29 +499,6 @@ namespace IOB_WIN { // controllo tutta la memoria allarmi SE richiesto } - // - /// Calcola la conversione da byte --> num decimale --> HEX --> conversione come stringa in INT - /// - /// - /// - protected int convDHD(short valore) - { - int answ = 0; - string hexVal = valore.ToString("x"); - int.TryParse(hexVal, out answ); - return answ; - } - // - /// Calcola la conversione da INTERO a intero HEX x OMRON - /// - /// - /// - protected short convHD(string hexVal) - { - short answ = 0; - short.TryParse(hexVal, out answ); - return answ; - } /// /// Oggetto per lettura PESO rilevato (DM20-21) /// @@ -494,8 +547,8 @@ namespace IOB_WIN short[] valDM = new short[2]; int highVal = value / 10000; int lowVal = value - (highVal * 10000); - valDM[0] = convHD(lowVal.ToString("x")); - valDM[1] = convHD(highVal.ToString("x")); + valDM[0] = (short)convHD(lowVal.ToString("x")); + valDM[1] = (short)convHD(highVal.ToString("x")); OMRON_ref.WriteWords(OmronFinsTCP.Net.PlcMemory.DM, 26, 2, valDM); } }