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