问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

S7-1200 Modbus RTU通讯例程

创作时间:
作者:
@小白创作中心

S7-1200 Modbus RTU通讯例程

引用
CSDN
1.
https://blog.csdn.net/qq_29919785/article/details/143036347

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为读写的数据存放地址。以下的每一条读写指令只需要复制第一条,无需重复调用,根据实际功能更改引脚的参数即可。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号