S7-1200 Modbus RTU通讯例程
S7-1200 Modbus RTU通讯例程
S7-1200进行Modbus RTU通讯,需要拓展模块CM1241或CB1241模块,CM1241模块为DB9插头,接线图定义如下:
在博途软件里对硬件进行组态,修改CM1241模块的通讯参数,启用PLC的系统存储器字节。
一、当S7-1200作为Modbus从站(modbusSlave)
程序编写如下:
首先调用MB_COMM_LOAD指令进行通讯初始化,REQ脚使用FirstScan进行触发,Port脚位CM1241模块的硬件标识符号,BAUD为波特率,PARITY为奇偶校验(0—无校验、1—奇校验、2—偶校验),MB_DB为调用MB_SLAVE指令生成的数据块。
调用MB_SLAVE指令,S7-1200做从站。MB_ADDR为从站地址(0-255),MB_HOLD_REG为通讯数据存放的数据块,可自行定义。
二、当S7-1200作为Modbus主站(modbusMaster)
程序编写如下:
作为Modbus主站读取从站数据,当数据量超过1时,需要进行Modbus轮询,所以在编程之前,建立一个DB块用来存放通讯过程中读取的数据、完成位(DONE)与错误位(ERROR)、沿存储位、轮询步编号等数据,实例如下。
接下来开始编写通讯程序,第一步首先写通讯初始化指令
与做从站一样,填写好REQ、port、BAUD、parity引脚,DONE和ERROR需要填写完成和错误标志位,用于轮询。MB_DB为调用MB_MASTER_DB指令生成的DB块。下面是通讯初始化完成后程序的编写。
在通讯初始化完成以后,用完成位(done)的上升沿触发MOVE指令,将1传送至步编号,进行第一条轮询指令,MB_MASTER指令的使用如下,在本例中,REQ用步编号与设定值比较进行触发、MB_ADDR为从站地址、MODE为操作模式(0是读,1是写)、DATA_ADDR为从站数据地址(填写的时候用40001+十进制从站数据地址)、DATA_LEN为需要读写的数据长度、DATA_PTR为读写的数据存放地址。以下的每一条读写指令只需要复制第一条,无需重复调用,根据实际功能更改引脚的参数即可。