Fixed Modbus register access

This commit is contained in:
Matthias Heisig
2024-01-17 11:26:11 +01:00
parent 82826c258a
commit 57987cb19f
24 changed files with 1310 additions and 572 deletions

View File

@@ -3,6 +3,7 @@
<DUT Name="E_BATTERY_STATUS" Id="{99b02815-2b47-4159-a889-c86170baa34d}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
{attribute 'to_string'}
TYPE E_BATTERY_STATUS :
(
ERROR := 1,

View File

@@ -3,6 +3,7 @@
<DUT Name="E_CHARGE_STATUS" Id="{7a281462-bf73-4949-96d8-aca55bee6c60}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
{attribute 'to_string'}
TYPE E_CHARGE_STATUS :
(
UNDEFINED := 1,

View File

@@ -3,6 +3,7 @@
<DUT Name="E_REACTIVE_POWER_TYPE" Id="{e2c788a7-c536-4b02-910e-6cbe600afdab}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
{attribute 'to_string'}
TYPE E_REACTIVE_POWER_TYPE :
(
INDUCTIVE := 1,

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ST_MODBUS_REG_10" Id="{0c25ea41-552d-4ad4-8369-cc4ac1877b46}">
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
TYPE ST_MODBUS_REG_10 :
STRUCT
// Addr: 10.000
sManufacturer : STRING(32); // 1 char = 1 byte
// Addr: 10.016
sModelname : STRING(32);
// Addr: 10.032
sSerialnumber : STRING(32);
// Addr: 10.048
sBMSVersion : STRING(64);
// Addr: 10.080
uiTotalParallelMembers : UINT; //uint 16bit = 1 Word
// Addr: 10.081
uiActiveParallelMembers : UINT;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -1,27 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ST_EMS_MODBUS_INTERFACE" Id="{c26c9ee9-feee-46cf-86e6-45d1a1e6819c}">
<Declaration><![CDATA[TYPE ST_EMS_MODBUS_INTERFACE :
<DUT Name="ST_MODBUS_REG_11" Id="{7e772293-d4e3-4809-9da8-3d4e0412ede6}">
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
TYPE ST_MODBUS_REG_11 :
STRUCT
// Size = 16 * 2 byte = 32 byte
// Addr: 10.000
sManufacturer : STRING(32); // 1 char = 1 byte
// Addr: 10.016
sModelname : STRING(32);
// Addr: 10.032
sSerialnumber : STRING(32);
// Addr: 10.048
sBMSVersion : STRING(64);
// Addr: 10.080
uiTotalParallelMembers : UINT; //uint 16bit = 1 Word
// Addr: 10.081
uiActiveParallelMembers : UINT;
// Addr: 11.000
eBatteryStatus : E_BATTERY_STATUS;
@@ -38,19 +20,19 @@ STRUCT
// Addr: 11.006
// Unit: W
udiMaxChargingActivePower : UDINT;
udiMaxChargingActivePower : UDINT := 30_000;
// Addr: 11.008
// Unit: W
udiMaxDischargingActivePower : UDINT;
udiMaxDischargingActivePower : UDINT := 30_000;
// Addr: 11.010
// Unit: var
udiMaxAvailableInductiveReactivePower : UDINT;
udiMaxAvailableInductiveReactivePower : UDINT := 0;
// Addr: 11.012
// Unit: var
udiMaxAvailableCapacitiveReactivePower : UDINT;
udiMaxAvailableCapacitiveReactivePower : UDINT := 0;
// Addr: 11.014
// Unit: %
@@ -58,11 +40,11 @@ STRUCT
// Addr: 11.015
// Unit: %
uiMaxAllowedSOC : UINT;
uiMaxAllowedSOC : UINT := 100;
// Addr: 11.016
// Unit: %
uiMinAllowedSOC : UINT;
uiMinAllowedSOC : UINT := 0;
// Addr: 11.017
// Unit: %
@@ -82,53 +64,43 @@ STRUCT
// Addr: 11.023
// Unit: %
uiCurrentSOH : UINT;
uiCurrentSOH : UINT := 100;
// Addr: 11.024
// Unit: A
diTotalACCurrentPhase1 : DINT;
// Addr: 11.025
// Addr: 11.026
// Unit: A
diTotalACCurrentPhase2 : DINT;
// Addr: 11.026
// Addr: 11.028
// Unit: A
diTotalACCurrentPhase3 : DINT;
// Addr: 11.027
// Addr: 11.030
// Unit: W
diSetpointActivePowerMirror : DINT;
// Addr: 11.028
// Addr: 11.032
rSetpointCosPhiMirror : REAL; // 32 bit
// Addr: 11.030
// Addr: 11.034
// Unit: W
diCurrentActivePower : DINT;
// Addr: 11.031
// Addr: 11.036
// Unit: var
diCurrentReactivePower : DINT;
// Addr: 11.032
// Addr: 11.038
udiLifeMessage : UDINT;
// Addr: 11.033
// Addr: 11.040
lwWarningBitmap : LWORD;
// Addr: 11.035
// Addr: 11.044
lwErrorBitmap : LWORD;
// Addr: 12.000
// Unit: W
diSetpointActivePower : DINT;
// Addr: 12.001
rSetpointCosPhi : REAL;
// Addr: 12.003
eReactivePowerType : E_REACTIVE_POWER_TYPE;
END_STRUCT
END_TYPE
]]></Declaration>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ST_MODBUS_REG_12" Id="{7c428918-2d8d-43ab-8096-edbee8bd4171}">
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
TYPE ST_MODBUS_REG_12 :
STRUCT
// Unit: W
diSetpointActivePower : DINT;
// Addr: 12.002
rSetpointCosPhi : REAL;
// Addr: 12.004
eReactivePowerType : E_REACTIVE_POWER_TYPE;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ST_EMS_MODBUS_INTERFACE" Id="{c26c9ee9-feee-46cf-86e6-45d1a1e6819c}">
<Declaration><![CDATA[// Speicherbereiche, welche über einen kontinuierlichen Registerbereich
// gelesen werden sollen, müssen in einer Struktur mit dem attribut {attribute 'pack_mode' := '1'}
// angelegt werden.
// Der Grund ist, dass der TwinCAT Modbus Server beim zugriff über den ADS
// Server nur die Symbolische erste Adresse anfragt und dann davon ausgeht,
// dass die anderen Register im Speicherbereich hintereinander liegen.
// Bei rein symbolisch angelegten Variablen müss dies nicht der Fall sein und es kommt zu einem
// Fehler beim lesen über die symbolischen grenzen der variablen hinaus.
{attribute 'pack_mode' := '1'}
TYPE ST_EMS_MODBUS_INTERFACE :
STRUCT
// Modbus Registers 10.000 to 10.999
stModbusReg10 : ST_MODBUS_REG_10;
// Modbus Registers 11.000 to 11.999
stModbusReg11 : ST_MODBUS_REG_11;
// Modbus Registers 12.000 to 12.999
stModbusReg12 : ST_MODBUS_REG_12;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>