TwinCAT3中,我们用PLC作为ModbusTCP的server,他的I区和Q区使用和TwinCAT2有些小差异。
1. 首先,在TwinCAT3中我们有一个默认的关于I区和Q区的分配。info链接参考:http://infosys.beckhoff.com/content/1033/tf6250_tc3_modbus_tcp/18014398702228491.html?id=2835119756410355886
如下图表格可见,我们有四个默认区域可以用于I区Q区的通讯。
使用的要求是在GlobalList里面直接申明这些固定名称的数组。
mb_Input_Coils:ARRAY[0..255] OF BOOL;
mb_Output_Coils:ARRAY[0..255] OF BOOL;
mb_Input_Registers:ARRAY[0..255] OF WORD;
mb_Output_Registers:ARRAY[0..255] OF WORD;
注意:这个申明的全局变量空间名非常重要!必须是名称为GVL的GlobalList才可以。打个比方,如果大家把GlobalList名字定义成GVL_Test,那么我软件底层实际读取数组时候用的是GVL_Test.mb_Input_Coils这个名称,那他就不是TwinCAT 3中系统定义的数组变量了,那么大家会发现即使IP地址正确,Modbus映射首地址正确也是通讯不上的。
比如此时modscan会出现这样的报错:
2.对应关系
我们看表格里划出来的起始地址,0x8000,所以当我们用Modscan做测试的时候,实际地址应该是2^15+1=32769以及他们往后的255个地址。
因此测试得出:
mb_Input_Coils 起始地址对应02:input status的32769
mb_Output_Coils 起始地址对应01:coil status的32769
mb_Input_Registers 起始地址对应 04:input register的32769
mb_Output_Registers 起始地址对应 03:holding register的32769
如果连接成功但是地址不正确,Modscan会出现如下报错:
以上就是TwinCAT 3中PLC做ModbusTCP的server时候,I区Q区Default配置的使用方法。