Modbus rtu的通信(做主站)
首先进入“设备视图”添加通讯模块RS422/RS485通讯模块,点击通讯接口,配置modbus的参数,常规→端口组态,选择“半双工(RS-485)2线制模式”,波特率、奇偶校验、数据位、以及设置停止位, 但是该模块用于 Modbus 通信时,此设置的停止位无效, 需要在 “Modbus_Comm_Load” 指令的背景 DB 的静态变量中修改 “STOP_BITS” 数值为 2。如图 1-1所示:
图1-1
最后需要在“硬件标识符”里确认一下 CM PtP 模块硬件标识符,该参数在程序编程中会被使用。
创建一个FB块,点击进入,在通信项目数中点开“MODBUS (RTU)”把“Modbus_Comm_Load”和“Modbus_Master”拉出去,以为这个案列是plc做主站,所以不用从站的功能块 。
使用FB块的块接口:Static(静态变量)中建立“Modbus端口”的静态参数,数据类型用“Modbus_Comm_Load”,以及建立“Modbus主站”的静态参数。如下图1-2
图1-2
Modbus RTU 主站编程需要调用 Modbus_Comm_Load 指令和 Modbus_Master 指令,其中 Modbus_Comm_Load 指令通过 Modbus RTU 协议对通信模块进行组态,Modbus_Master 指令可通过由 Modbus_Comm_Load 指令组态的端口作为 Modbus 主站进行通信, Modbus_Comm_Load 指令的 MB_DB 参数必须连接到 Modbus_Master 指令的(静态)MB_DB 参数。如图1-3
图1-3
注意:
① Modbus_Comm_Load 指令不建议在启动组织块 OB100 中调用,建议在 OB1 中调用。
Modbus_Comm_Load 指令在 OB1 中调用时,其输入位“REQ”需使用上升沿触发,本例中该输入位采用 “FirstScan” 系统存储器位。
② Modbus_Comm_Load 指令背景数据块中的静态变量 “MODE” 用于描述点对点模块的工作模式,有效的工作模式包括:
0 = 全双工 (RS232)
1 = 全双工 (RS422) 四线制模式(点对点)
2 = 全双工 (RS422) 四线制模式(多点主站)
3 = 全双工 (RS422) 四线制模式(多点从站)
4 = 半双工 (RS485) 二线制模式
该静态变量 “MODE” 默认数据为 0(RS232 全双工模式),需要根据点对点模块实际组态修改该数值,本例中 CM PtP 模块工作在 RS485 半双工模式需要将该数值修改为 4,如图 1-4所示。
图1-4
或在程序段传输,用move指令把4传给“#Modbus_Comm_Load_Instance_1.MODE”
在数据块的属性中取消“优化的块访问”即可将数据块修改为非优化访问的数据块(鼠标右键数据块,选择“属性”,取消“优化的块访问”)
当 Modbus RTU 网络中存在多个 modbus RTU 从站或一个 modbus RTU 从站同时需要多个作业,例如需要读和写或者读多个区域等,则需要调用多个 Modbus_Master 指令,Modbus_Master 指令之间需要采用轮询方式调用,并且使用相同背景数据块。用“Done”完成位来触发下一个轮询。如图1-5、
图1-6
图1-5
图1-6所示
Modbus rtu的通信(做从站)
Modbus RTU 从站编程需要调用 Modbus_Comm_Load 指令和 Modbus_Slave 指令
Modbus的参数设置以及Modbus_Comm_Load 指令块的编写就和主站一样,Modbus_Comm_Load 指令的 MB_DB 参数必须连接到 Modbus_Master 指令的(静态)MB_DB 参数。 Modbus_Slave 指令的 “MB_HOLD_REG” 用于定义 CPU 的 Modbus 保持寄存器的数据区域地址,该数据区域在 V3.0 支持非优化(标准的)数据块。一般建议使用指针方式填写,例如程序中的 P#DB6.DBX0.0 WORD 100,此外也可以使用基本数据类型数组方式填写,如图1-7
图1-7
调试时注意的问题
①检查硬件标识符是否正确
②检查通信模块是否与软件上的相对应
③RS485 半双工模式需要将该数值修改为 4
④Modbus_Comm_Load 指令的 MB_DB 引脚不能填错
⑤轮询用Done完成位来触发
⑥Modbus_Comm_Load 指令块的“REQ”引脚用“FirstScan” 系统存储器位