[西门子] S7 -1200 modbus RTU通信案例教程

[复制链接]
查看123 | 回复0 | 2025-4-13 20:38:25 | 显示全部楼层 |阅读模式
Modbus RTU通信实质是串口通信的一种特殊方式,因为协议比较简单,应用面广,支持设备多,目前成为一种主流协议。S7 -1200 modbus通信实现较为简单,也不需要编中断处理函数,主要通过输出DON这个引脚来判断模块处理是否完成,以执行下一步命令。编程时主要注意的是通过上升沿要触发通信。上升沿触发的方式很多,可以用闪烁电路进行,也可以通过轮询逐个控制触点开闭来触发。其次对DATA_ADDR感到迷茫,不知道如何配置。
S7 -1200 modbus库可以在通信库中找到,不需要另外再安装库。

一、初始化端口配置

1、首先根据选择的硬件,要初始化端口。我用的是CB1241通信板,初始化标识可根据软件提示选择"Local~CB_1241_(RS485)"
2、"MB_COMM_LOAD_DB"为初始化端口。这个模块具体参数表示如下:


REQ:触发指令,通常可以上升沿触发。也可以配置首次扫描FirstScan触发,当然也可以配置TRUE,但是TRUE对用定时器触发的闪烁电路不起作用,这一点要注意了。尽量少用TRUE这种方式,否则程序buge较多。

 


若用定时器触发,建议用FirstScan配置REQ。案列如下,REQ若用TRUE,通信无法执行,这可能和S7 -1200内部时钟系统有关,官方没有明确说明。这一点一定要注意。

BAUD:波特率根据情况自己选择。
MB_DB背景数据块的引用,要与配置端口通信的主站或分站DB块一致。案例中我主站配置的DB块为DB2,此处连接DB2数据块。
PARITY奇偶校验选择:0 – 无;1 – 奇校验;2 – 偶校验。
DONE:端口初始化完成输出,若完成输出TRUE(1)M10.01
ERRO:错误检测,当没有错误,启用监视为FALSE(0)
STATUS:错误状态代码,通过查看代码反馈,可以知道错误原因。
在案例中初始化完成后,开启M10.0

二、配置主站DB块参数。

En:表示使能。
REQ:请求数据发送到从站,建议上升沿触发。
MB_ADDR:modbus从站地址。
MODE:模式选择,通过选择01等数确定模式。


DATA_ADDR 从站中的起始地址。主要从从站的协议中查看modbus寄存器的定义。
DATA_LEN:访问数据的个数。
DATA_PTR存放访问到的数据的位置。通过指针指向数据存储的首地址。
BUSY:0表示无MB_MASTER_DB操作,1表示MB_MASTER_DB正在操作。
其他相同参数可参考端口初始化的参数。

三、Modbus通信案例

程序中DATA_ADDR需要查看从站modbus寄存器。以某企业交流电采集模块的modbus通信为例,进行说明。

寄存器定义如下,0000H表示16进制的第一个地址。若访问此地址,且访问一个字节数据,DATA_ADDR配置为40001,DATA_LEN为1。访问0001H这一个字节,DATA_ADDR配置为40002DATA_LEN为1。访问0000H0009H这10个数,DATA_ADDR配置为40001DATA_LEN为10。DATA_PTR是访问到的数据所要存放的地址(指向首个数据的地址)。当然也可以以单个字节选择访问,这就需要访问多次。案例提供0000H0001H的访问,访问两次,这种方式主要针对多个设备轮询,单个设备配置DATA_LEN的数量可以一次访问出来。



案例程序如下:



最后要注意的是硬件配置和软件程序都要下载至PLC,否则导致通信灯不亮,通信不成功,这一点从s7-200转过来的到s7-1200一定要注意。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则