Mapping between Modbus and ADS
The default mapping is shown in the following table:
Modbus areas | Modbus address | ADS area | |
---|---|---|---|
Digital inputs | 0x0000 - 0x7FFF | Index group | Index offset |
0xF021 - process image of the physical inputs (bit access) | 0x0 | ||
0x8000 - 0x80FF | Name of the variables in the PLC program | Data type | |
.mb_Input_Coils | ARRAY [0..255] OF BOOL | ||
Digital outputs (coils) | 0x0000 - 0x7FFF | Index group | Index offset |
0xF031 - process image of the physical outputs (bit access) | 0x0 | ||
0x8000 - 0x80FF | Name of the variables in the PLC program | Data type | |
.mb_Output_Coils | ARRAY [0..255] OF BOOL | ||
Input registers | 0x0000 - 0x7FFF | Index group | Index offset |
0xF020 - process image of the physical inputs | 0x0 | ||
0x8000 - 0x80FF | Name of the variables in the PLC program | Data type | |
.mb_Input_Registers | ARRAY [0..255] OF WORD | ||
Output registers | 0x0000 - 0x2FFF | Index group | Index offset |
0xF030 - process image of the physical outputs | 0x0 | ||
0x3000 - 0x5FFF | 0x4020 - PLC memory area | 0x0 | |
0x6000 - 0x7FFF | 0x4040 - PLC data area | 0x0 | |
0x8000 - 0x80FF | Name of the variables in the PLC program | Data type | |
.mb_Output_Registers | ARRAY [0..255] OF WORD |
The server maps the individuals ADS areas and enables the access to the physical process image and maps the PLC data area.
The mapping can be adjusted by the configurator.
Default XML
The default configuration with optional comments for a better explanation:
<Configuration>
<!-- Modbus TCP port, default = 502-->
<Port>502</Port>
<!-- optional IP configuration for Modbus TCP server-->
<IpAddr/>
<Mapping>
<InputCoils>
<MappingInfo>
<!-- AdsPort: TwinCAT2 PLC1 = 801, PLC2 = 811...-->
<AdsPort>801</AdsPort>
<StartAddress>0</StartAddress>
<EndAddress>32767</EndAddress>
<!-- IndexGroup 61473 = 0xF021 -> physical plc inputs %IX -->
<IndexGroup>61473</IndexGroup>
<!-- Bit offset-->
<IndexOffset>0</IndexOffset>
</MappingInfo>
<MappingInfo>
<AdsPort>801</AdsPort>
<!-- Modbus input coils -->
<StartAddress>32768</StartAddress>
<EndAddress>33023</EndAddress>
<VarName>.mb_Input_Coils</VarName>
</MappingInfo>
</InputCoils>
<OutputCoils>
<MappingInfo>
<AdsPort>801</AdsPort>
<EndAddress>32767</EndAddress>
<!-- IndexGroup 61489 = 0xF031 -> physical plc outputs %QX -->
<IndexGroup>61489</IndexGroup>
<!-- Bit offset-->
<IndexOffset>0</IndexOffset>
</MappingInfo>
<MappingInfo>
<AdsPort>801</AdsPort>
<!-- Modbus output coils-->
<StartAddress>32768</StartAddress>
<EndAddress>33023</EndAddress>
<VarName>.mb_Output_Coils</VarName>
</MappingInfo>
</OutputCoils>
<InputRegisters>
<MappingInfo>
<AdsPort>801</AdsPort>
<StartAddress>0</StartAddress>
<EndAddress>32767</EndAddress>
<!-- IndexGroup 61472 = 0xF020 -> physical plc input register %I -->
<IndexGroup>61472</IndexGroup>
<!-- Byte offset-->
<IndexOffset>0</IndexOffset>
</MappingInfo>
<MappingInfo>
<AdsPort>801</AdsPort>
<!-- Modbus input registers -->
<StartAddress>32768</StartAddress>
<EndAddress>33023</EndAddress>
<VarName>.mb_Input_Registers</VarName>
</MappingInfo>
</InputRegisters>
<OutputRegisters>
<MappingInfo>
<AdsPort>801</AdsPort>
<StartAddress>0</StartAddress>
<EndAddress>12287</EndAddress>
<!-- IndexGroup 61488 = 0xF030 -> physical plc output register %Q -->
<IndexGroup>61488</IndexGroup>
<!-- Byte offset-->
<IndexOffset>0</IndexOffset>
</MappingInfo>
<MappingInfo>
<AdsPort>801</AdsPort>
<StartAddress>12288</StartAddress>
<EndAddress>24575</EndAddress>
<!-- IndexGroup 16416 = 0x4020 -> plc memory area %M -->
<IndexGroup>16416</IndexGroup>
<!-- Byte offset-->
<IndexOffset>0</IndexOffset>
</MappingInfo>
<MappingInfo>
<AdsPort>801</AdsPort>
<StartAddress>24576</StartAddress>
<EndAddress>32767</EndAddress>
<!-- IndexGroup 16448 = 0x4040 -> plc data area -->
<IndexGroup>16448</IndexGroup>
<!-- Byte offset-->
<IndexOffset>0</IndexOffset>
</MappingInfo>
<MappingInfo>
<AdsPort>801</AdsPort>
<!-- Modbus output registers -->
<StartAddress>32768</StartAddress>
<EndAddress>33023</EndAddress>
<VarName>.mb_Output_Registers</VarName>
</MappingInfo>
</OutputRegisters>
</Mapping>
</Configuration>