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

@@ -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

@@ -0,0 +1,108 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ST_MODBUS_REG_11" Id="{7e772293-d4e3-4809-9da8-3d4e0412ede6}">
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
TYPE ST_MODBUS_REG_11 :
STRUCT
// Addr: 11.000
eBatteryStatus : E_BATTERY_STATUS;
// Addr: 11.001
eChargeStatus : E_CHARGE_STATUS;
// Addr: 11.002
// Unit: Ah
udiChargeCapacity : UDINT; // 32bit
// Addr: 11.004
// Unit: Wh
udiEnergyCapacity : UDINT;
// Addr: 11.006
// Unit: W
udiMaxChargingActivePower : UDINT := 30_000;
// Addr: 11.008
// Unit: W
udiMaxDischargingActivePower : UDINT := 30_000;
// Addr: 11.010
// Unit: var
udiMaxAvailableInductiveReactivePower : UDINT := 0;
// Addr: 11.012
// Unit: var
udiMaxAvailableCapacitiveReactivePower : UDINT := 0;
// Addr: 11.014
// Unit: %
uiSelfDischargeRate : UINT; // 16 bit
// Addr: 11.015
// Unit: %
uiMaxAllowedSOC : UINT := 100;
// Addr: 11.016
// Unit: %
uiMinAllowedSOC : UINT := 0;
// Addr: 11.017
// Unit: %
uiCurrentSOC : UINT;
// Addr: 11.018
// Unit: %
uiCurrentDOD : UINT;
// Addr: 11.019
// Unit: Wh
udiChargedEnergy : UDINT;
// Addr: 11.021
// Unit: Wh
udiAvailableEnergy : UDINT;
// Addr: 11.023
// Unit: %
uiCurrentSOH : UINT := 100;
// Addr: 11.024
// Unit: A
diTotalACCurrentPhase1 : DINT;
// Addr: 11.026
// Unit: A
diTotalACCurrentPhase2 : DINT;
// Addr: 11.028
// Unit: A
diTotalACCurrentPhase3 : DINT;
// Addr: 11.030
// Unit: W
diSetpointActivePowerMirror : DINT;
// Addr: 11.032
rSetpointCosPhiMirror : REAL; // 32 bit
// Addr: 11.034
// Unit: W
diCurrentActivePower : DINT;
// Addr: 11.036
// Unit: var
diCurrentReactivePower : DINT;
// Addr: 11.038
udiLifeMessage : UDINT;
// Addr: 11.040
lwWarningBitmap : LWORD;
// Addr: 11.044
lwErrorBitmap : LWORD;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

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>