2024年8月28日发(作者:郗晨辰)
Rockwell Logix5000使用ModbusTCP通讯—master
以前,AB的PLC本身都是不支持ModbusTCP通讯的,所以很多使用AB PLC的用户都
需要配第三方的协议转换网关将ModBusTCP协议转换为AB自己的EthernetIP协议。可是,
从Logix5000编程软件15版本(实测20版本及以上)以后,对于CompactLogix和Controllogix
系列的PLC,支持了使用PLC程序编写出来的ModbusTCP协议通讯,目前来看,支持该通
讯的协议的产品和版本主要有:
序号
1
2
3
4
5
6
7
8
9
1756-EN3TR
1756-EWEB
1768-EWEB
1769-L30ER,1769-L30ERM,1769-L30ERMS
1769-L30ER-NSE,1769-L33ER,1769-L33ERM,1769-L33ERMS
1769-L36ERM,1769-L36ERMS
1769-L24ER-QB1B, 1769-L24ER-QBFC1B,
1769-L16ER, 1769-L18ER, 1769-L18ERM
1769-L19ER-BB1B
5580系列(1756-L85E,1756-L83E)
5380系列(5069-L340ERM,5069-L320ER)
20.011
20.011
28.011
20.011
型号
1756-EN2T,1756-EN2F,1756-EN2TR
固件最低版本
5.007
4.006
1.002
备注
以上产品刷对应固件后即可支持ModbusTCP协议,并且可作为Master和Slave与其他第三
方设备进行通讯,AB官方提供的例程分为Master和Slavle两部分,可按需分别使用,Master
功能部分可能会占用PLC内200-230K的存储空间,Slave功能部分可能会占用PLC的280-
300K空间。例程可由剑指工控管理员处获得。
注意事项:
此示例代码可能不适用于所有应用程序,示例代码会消耗的控制器内存、资源、CPU带
宽和控制器缓冲区,这可能会影响用户程序的其余部分。确保在使用Modbus代码之前考虑
了使用Modbus代码的影响。
该例程支持的Modbus协议功能码有 01,02,05,15,03,04,06,16
该例程内默认支持访问4个不同IP地址ModbusTCP设备。每个连接支持最多5个操作
(读取或者写入指令)。每个操作支持最多120个地址(Registers或者Coils)。最大本地地
址范围为1024个Coils和DiscreteInput,240个Registers和InputRegisters。
开整,先说Master
一,例程的使用
获取到ModbusTCP通讯例程后,有三种使用方法,一种是直接使用Logix5000编程软
件打开后缀为.ACD的程序文件,在该例程基础上编写你的其他程序。第二种办法就是将该
例程导出为L5X格式的文件,再导入到你已经使用的程序中。第三,下载ModbusTCP的
AOI块导入到你的程序中。此处我们以第二种方法为例说明。
1、将ModbusTCP程序导出
使用Logix5000软件打开例程的ACD文件后,点击Task里面的程序名,右键,导出(Export
Program),然后使用默认的名字即可。
记住保存的位置。
2、程序导入
打开你的程序,将刚才导出的文件导入到你的程序里面。(20及以后版本软件可以在
线导入,不会导致PLC停机)
导入完成后会在Task里面看到ModbusTCP通讯程序。导入进来后是一个单独的Task,与
原有的MainProgram平级的,所以不需要调用。导入的程序部分也不需要修改。
然后可以看到在程序的标签库里面自动创建了很多标签,所有的配置都在这些标签里面进
行。
为了实际测试效果,我们在这个计算机上运行Modsim软件模拟一个ModbusTCP Server,
提供一些数据。模拟了40001-40010供10个数
3、标签库内ModbusTCP的配置
该例程是作为Master功能,所以,在ModbusTCP协议里面,我们需要进行常规的设
置,如,目标主机IP地址和端口,功能码,目标主机数据起始地址,读取数量,本地数据
区起始地址等。
注意事项:针对不同的PLC型号,MBTU_EnetModulPort参数需要设置为不同的内容,如
下表
PLC类型
CompactLogix5370
Controllogix系列
参数内容
$01$00
$01$xx
备注
xx为1756机架背板中以太网模块所在位置,并
且以10进制表示,如插在2号机架,则需要填写
为$01$02
描述
使用到的以太网模块路劲,用法见注意事项
使能连接数,默认只有第一个连接可以使用,如果需要其他3
个起作用,就需要修改这个标签值
每个连接的动作参数配置,读取或者写入就在这个里面配
ModbusTCP程序的使能信号,为 1表示启用该程序
除此之外,还需要设置如下表所示的标签。
标签名
MBTU_EnetModulePort
MBTU_Connections
MBTU_Transactions_00
至
MBTU_Transactions_03
MBTU_EnMBTCP
上表标签在程序里如下位置
标签名
MBTU_DestAddress
MBTU_Enable
MBTU_NumberOfTransac
tions
MBTI_Connected
MBTI_ConnLastError
描述
ModbusTCP协议通讯的目标主机IP地址和端口号,
如’192.168.2.15?port=502’。严格按照这个格式书写
该连接的使能控制
每个连接内操作过程的状态
连接建立的状态信号
连接故障代码,0表示连接正常
上表标签在程序里如下位置
对于一个具体指令操作来说,需要设置如下标签。(指令操作就是我们常说的使用功能码读
取或写入那个地址)
Enabled
PollInterval
Transtype
BeginAddress
使能这个操作
通讯轮询周期
通讯类型,也就是功能码设置,按实际需要设置,可自行搜索每个
功能码对应的功能
目标主机起始地址,配合功能码,如功能码是03,此处填1标书读
取40001地址数据,此处与实际modbus地址可能存在偏移,建议
先测试几个地址就可以找到正确的规律
读取或写入的地址数量,比如连续读取10个地址,此处就写10
本地地址区偏移量,默认从
MBTU_MB_Xxx[0]开始,如
MBTU_MB_4xx[0]就表示本地存放4区类型地址的位置
Count
LocalOffset
上表标签在程序里位置如下
小笔记:每次修改完modbus通讯参数后,请手动将ReqBuilt标签值置0,意为重新使能
该命令。
至此,通过ModbusTCP协议读取第三方设备数据配置完毕,读取回来的数据在
MBTU_M4xx这个数组里面显示,如下图
根据之前配置的不同的功能码读取回来的数值就存储在对应的数据区内。
类似地,我们可以配置通过modbusTCP协议从PLC内写数据到第三方设备,与读取稍微
不同,写入时会将MBTU_MB_0xx、MBTU_MB_4xx、数据区内相应的数据写入到对端,
ModBus协议支持单个写和连续写功能码,分别05/15写单个、多个线圈、06/16写单个、
多个保持寄存器。
小笔记:读取和写入的数据区需要提前规划好,不能重叠。比如使用40001-40050作为读
取回来的数据存储区,40051-40099作为写数据到对端数据区。
我们以16功能码为例测试,将40006-40009连续写4个数据到modsim
程序配置如下:
Polllnterval
TransType
BeginAddres
Count
LocalOffset
ReqBuilt
实际效果如下
10
16
6
4
5
1
轮询间隔设置为10表示10x100ms,也就是1s的间隔,此
处单位为100ms
连续写4xx区的地址
写入到对方设备的40007地址开始(实际可能会有偏移,
需要先用几个地址做测试),一般会前后偏移1个地址
连续写4个地址
本地偏移地址,表示从本地
MBTU_MB_4xx[5]地址开始作
为写入地址区
每次配置完参数都手动置0一下,会瞬间自动恢复为1
至此,在Logix5000内使用ModbusTCP协议程序实验完毕。有兴趣的同学可以考虑如果
要传输浮点数时,应该注意那些地方。
2024年8月28日发(作者:郗晨辰)
Rockwell Logix5000使用ModbusTCP通讯—master
以前,AB的PLC本身都是不支持ModbusTCP通讯的,所以很多使用AB PLC的用户都
需要配第三方的协议转换网关将ModBusTCP协议转换为AB自己的EthernetIP协议。可是,
从Logix5000编程软件15版本(实测20版本及以上)以后,对于CompactLogix和Controllogix
系列的PLC,支持了使用PLC程序编写出来的ModbusTCP协议通讯,目前来看,支持该通
讯的协议的产品和版本主要有:
序号
1
2
3
4
5
6
7
8
9
1756-EN3TR
1756-EWEB
1768-EWEB
1769-L30ER,1769-L30ERM,1769-L30ERMS
1769-L30ER-NSE,1769-L33ER,1769-L33ERM,1769-L33ERMS
1769-L36ERM,1769-L36ERMS
1769-L24ER-QB1B, 1769-L24ER-QBFC1B,
1769-L16ER, 1769-L18ER, 1769-L18ERM
1769-L19ER-BB1B
5580系列(1756-L85E,1756-L83E)
5380系列(5069-L340ERM,5069-L320ER)
20.011
20.011
28.011
20.011
型号
1756-EN2T,1756-EN2F,1756-EN2TR
固件最低版本
5.007
4.006
1.002
备注
以上产品刷对应固件后即可支持ModbusTCP协议,并且可作为Master和Slave与其他第三
方设备进行通讯,AB官方提供的例程分为Master和Slavle两部分,可按需分别使用,Master
功能部分可能会占用PLC内200-230K的存储空间,Slave功能部分可能会占用PLC的280-
300K空间。例程可由剑指工控管理员处获得。
注意事项:
此示例代码可能不适用于所有应用程序,示例代码会消耗的控制器内存、资源、CPU带
宽和控制器缓冲区,这可能会影响用户程序的其余部分。确保在使用Modbus代码之前考虑
了使用Modbus代码的影响。
该例程支持的Modbus协议功能码有 01,02,05,15,03,04,06,16
该例程内默认支持访问4个不同IP地址ModbusTCP设备。每个连接支持最多5个操作
(读取或者写入指令)。每个操作支持最多120个地址(Registers或者Coils)。最大本地地
址范围为1024个Coils和DiscreteInput,240个Registers和InputRegisters。
开整,先说Master
一,例程的使用
获取到ModbusTCP通讯例程后,有三种使用方法,一种是直接使用Logix5000编程软
件打开后缀为.ACD的程序文件,在该例程基础上编写你的其他程序。第二种办法就是将该
例程导出为L5X格式的文件,再导入到你已经使用的程序中。第三,下载ModbusTCP的
AOI块导入到你的程序中。此处我们以第二种方法为例说明。
1、将ModbusTCP程序导出
使用Logix5000软件打开例程的ACD文件后,点击Task里面的程序名,右键,导出(Export
Program),然后使用默认的名字即可。
记住保存的位置。
2、程序导入
打开你的程序,将刚才导出的文件导入到你的程序里面。(20及以后版本软件可以在
线导入,不会导致PLC停机)
导入完成后会在Task里面看到ModbusTCP通讯程序。导入进来后是一个单独的Task,与
原有的MainProgram平级的,所以不需要调用。导入的程序部分也不需要修改。
然后可以看到在程序的标签库里面自动创建了很多标签,所有的配置都在这些标签里面进
行。
为了实际测试效果,我们在这个计算机上运行Modsim软件模拟一个ModbusTCP Server,
提供一些数据。模拟了40001-40010供10个数
3、标签库内ModbusTCP的配置
该例程是作为Master功能,所以,在ModbusTCP协议里面,我们需要进行常规的设
置,如,目标主机IP地址和端口,功能码,目标主机数据起始地址,读取数量,本地数据
区起始地址等。
注意事项:针对不同的PLC型号,MBTU_EnetModulPort参数需要设置为不同的内容,如
下表
PLC类型
CompactLogix5370
Controllogix系列
参数内容
$01$00
$01$xx
备注
xx为1756机架背板中以太网模块所在位置,并
且以10进制表示,如插在2号机架,则需要填写
为$01$02
描述
使用到的以太网模块路劲,用法见注意事项
使能连接数,默认只有第一个连接可以使用,如果需要其他3
个起作用,就需要修改这个标签值
每个连接的动作参数配置,读取或者写入就在这个里面配
ModbusTCP程序的使能信号,为 1表示启用该程序
除此之外,还需要设置如下表所示的标签。
标签名
MBTU_EnetModulePort
MBTU_Connections
MBTU_Transactions_00
至
MBTU_Transactions_03
MBTU_EnMBTCP
上表标签在程序里如下位置
标签名
MBTU_DestAddress
MBTU_Enable
MBTU_NumberOfTransac
tions
MBTI_Connected
MBTI_ConnLastError
描述
ModbusTCP协议通讯的目标主机IP地址和端口号,
如’192.168.2.15?port=502’。严格按照这个格式书写
该连接的使能控制
每个连接内操作过程的状态
连接建立的状态信号
连接故障代码,0表示连接正常
上表标签在程序里如下位置
对于一个具体指令操作来说,需要设置如下标签。(指令操作就是我们常说的使用功能码读
取或写入那个地址)
Enabled
PollInterval
Transtype
BeginAddress
使能这个操作
通讯轮询周期
通讯类型,也就是功能码设置,按实际需要设置,可自行搜索每个
功能码对应的功能
目标主机起始地址,配合功能码,如功能码是03,此处填1标书读
取40001地址数据,此处与实际modbus地址可能存在偏移,建议
先测试几个地址就可以找到正确的规律
读取或写入的地址数量,比如连续读取10个地址,此处就写10
本地地址区偏移量,默认从
MBTU_MB_Xxx[0]开始,如
MBTU_MB_4xx[0]就表示本地存放4区类型地址的位置
Count
LocalOffset
上表标签在程序里位置如下
小笔记:每次修改完modbus通讯参数后,请手动将ReqBuilt标签值置0,意为重新使能
该命令。
至此,通过ModbusTCP协议读取第三方设备数据配置完毕,读取回来的数据在
MBTU_M4xx这个数组里面显示,如下图
根据之前配置的不同的功能码读取回来的数值就存储在对应的数据区内。
类似地,我们可以配置通过modbusTCP协议从PLC内写数据到第三方设备,与读取稍微
不同,写入时会将MBTU_MB_0xx、MBTU_MB_4xx、数据区内相应的数据写入到对端,
ModBus协议支持单个写和连续写功能码,分别05/15写单个、多个线圈、06/16写单个、
多个保持寄存器。
小笔记:读取和写入的数据区需要提前规划好,不能重叠。比如使用40001-40050作为读
取回来的数据存储区,40051-40099作为写数据到对端数据区。
我们以16功能码为例测试,将40006-40009连续写4个数据到modsim
程序配置如下:
Polllnterval
TransType
BeginAddres
Count
LocalOffset
ReqBuilt
实际效果如下
10
16
6
4
5
1
轮询间隔设置为10表示10x100ms,也就是1s的间隔,此
处单位为100ms
连续写4xx区的地址
写入到对方设备的40007地址开始(实际可能会有偏移,
需要先用几个地址做测试),一般会前后偏移1个地址
连续写4个地址
本地偏移地址,表示从本地
MBTU_MB_4xx[5]地址开始作
为写入地址区
每次配置完参数都手动置0一下,会瞬间自动恢复为1
至此,在Logix5000内使用ModbusTCP协议程序实验完毕。有兴趣的同学可以考虑如果
要传输浮点数时,应该注意那些地方。