diff --git a/IOB-WIN-NEXT/DATA/CONF/FINASSI_HELPI_01.json b/IOB-WIN-NEXT/DATA/CONF/FINASSI_HELPI_01.json index 8312493c..21c8e7cc 100644 --- a/IOB-WIN-NEXT/DATA/CONF/FINASSI_HELPI_01.json +++ b/IOB-WIN-NEXT/DATA/CONF/FINASSI_HELPI_01.json @@ -153,7 +153,7 @@ "name": "PPM", "description": "Velocita espressa come Pacchi Per Minuto", "memAddr": "41106", - "tipoMem": "Real", + "tipoMem": "RealLH", "index": 1106, "size": 2, "unit": "#", diff --git a/IOB-WIN-NEXT/IobModbusTCP.cs b/IOB-WIN-NEXT/IobModbusTCP.cs index 87b68de3..24aa4368 100644 --- a/IOB-WIN-NEXT/IobModbusTCP.cs +++ b/IOB-WIN-NEXT/IobModbusTCP.cs @@ -540,15 +540,16 @@ namespace IOB_WIN_NEXT /// /// /// Valore in formato INT da registri + /// Indirizzo di base dei registri /// - public bool writeInputReg(int startAddr, int[] currRegVal) + public bool writeInputReg(int startAddr, int[] currRegVal, int baseAddr) { bool answ = false; if (currPLC.Connected) { try { - currPLC.WriteMultipleRegisters(startAddr + deltaBase, currRegVal); + currPLC.WriteMultipleRegisters(startAddr + deltaBase + (40000 - baseAddr), currRegVal); answ = true; } catch @@ -797,13 +798,13 @@ namespace IOB_WIN_NEXT CurrVal = ModbusClient.ConvertIntToRegisters(valInt); } - fatto = writeInputReg(currMem.index, CurrVal); + fatto = writeInputReg(currMem.index, CurrVal, parametri.holdRegBaseAddr); break; case plcDataType.DInt: valUInt = getScaledUInt(currMem, true); CurrVal = ModbusClient.ConvertLongToRegisters(valInt); - fatto = writeInputReg(currMem.index, CurrVal); + fatto = writeInputReg(currMem.index, CurrVal, parametri.holdRegBaseAddr); break; //case plcDataType.Word: @@ -820,19 +821,23 @@ namespace IOB_WIN_NEXT case plcDataType.RealHL: valDouble = getScaledDouble(currMem); CurrVal = ModbusClient.ConvertFloatToRegisters((float)valDouble, ModbusClient.RegisterOrder.HighLow); - fatto = writeInputReg(currMem.index, CurrVal); + fatto = writeInputReg(currMem.index, CurrVal, parametri.holdRegBaseAddr); break; case plcDataType.FloatBADC: case plcDataType.RealLH: valDouble = getScaledDouble(currMem); CurrVal = ModbusClient.ConvertFloatToRegisters((float)valDouble, ModbusClient.RegisterOrder.LowHigh); - fatto = writeInputReg(currMem.index, CurrVal); + fatto = writeInputReg(currMem.index, CurrVal, parametri.holdRegBaseAddr); break; case plcDataType.String: - CurrVal = ModbusClient.ConvertStringToRegisters(currMem.value); - fatto = writeInputReg(currMem.index, CurrVal); + CurrVal = ModbusClient.ConvertStringToRegisters(currMem.value.PadRight(currMem.size * 2)); + var regLen = ModbusClient.ConvertIntToRegisters(currMem.size * 2 - 2); + Array.Copy(regLen, 0, CurrVal, CurrVal.Length - regLen.Length, regLen.Length); + //CurrVal[CurrVal.Length - 2] = regLen[1]; + //CurrVal[CurrVal.Length - 1] = regLen[0]; + fatto = writeInputReg(currMem.index, CurrVal, parametri.holdRegBaseAddr); break; default: @@ -1348,14 +1353,6 @@ namespace IOB_WIN_NEXT // valore string... valString = ModbusClient.ConvertRegistersToString(listInt, 0, item.Value.size); } - //else if (item.Value.unit == "EPOCH") - //{ - // // devo prendere i dati come UInt quindi li metto insieme upper/lower - // UInt32 uint32 = (uint)listInt[0]; - // uint32 <<= 16; - // uint32 |= (uint)listInt[1]; - // valore = (double)uint32; - //} else { // valori numerici... @@ -1416,22 +1413,8 @@ namespace IOB_WIN_NEXT { // valore string... valString = ModbusClient.ConvertRegistersToString(listInt, 0, item.Value.size); + valString = valString.Replace("\n", "").Replace("\r", "").Replace("\0", string.Empty).Trim(); } - //else if (item.Value.unit == "EPOCH") - //{ - // // devo prendere i dati come UInt quindi li metto insieme upper/lower - // var hVal = BitConverter.ToUInt16(BitConverter.GetBytes(listInt[0]), 0); - // var lVal = BitConverter.ToUInt16(BitConverter.GetBytes(listInt[1]), 0); - // // ricostruisco da due Uint16 un Uint32 - // UInt32 uint32 = hVal; - // uint32 <<= 16; - // uint32 |= lVal; - // valore = (double)uint32; - // //byte[] rawData = new byte[4]; - // //Array.Copy(BitConverter.GetBytes(listInt[0]), 0, rawData, 2, 2); - // //Array.Copy(BitConverter.GetBytes(listInt[1]), 0, rawData, 0, 2); - // //var valTest = BitConverter.ToUInt32(rawData, 0); - //} else { valore = convertFromReg(listInt, item.Value.size, item.Value.tipoMem); diff --git a/IOB-WIN-NEXT/IobModbusTCPHelpi.cs b/IOB-WIN-NEXT/IobModbusTCPHelpi.cs index 40596d8c..894dd39c 100644 --- a/IOB-WIN-NEXT/IobModbusTCPHelpi.cs +++ b/IOB-WIN-NEXT/IobModbusTCPHelpi.cs @@ -222,5 +222,6 @@ namespace IOB_WIN_NEXT } #endregion Protected Methods + } } \ No newline at end of file