找回密码
 注册

QQ登录

只需一步,快速开始

搜索

[工业通信] 发个S7200的modbus通讯例程源程序下载

[复制链接]
山海致远 发表于 2018-4-17 17:41:55 | 显示全部楼层 |阅读模式
厂商
厂商: 西门子
说下这个项目:
某扬水站的5台机组的远程控制,有5台智能表,检测5台机组的工作电压,工作电流,有功功率,功率因数等参数
还有5台软起的参数读取,因为怕用485控制软起不可靠,所以只读取软起的工作状态,不知道做过的,有没有知道,用modbus控制好不好用
言归正传 1.jpg PLC那边是母头,这边准备一个9针的公头就可以了  3脚是A    8脚是B    2or5是地线,也就是内部的M端子
如果距离近,可以不接地线,有关这个地线怎么的说法很多,有的说可以不接,有的说接地是消除共模电压,打过西门子技术,说是和设备地连一起
度娘了下,也有的说接地了反而不好的,现场实际,我是把所有的地线(注意不是屏蔽哦,是GND  )都连一起,不知那种做法好
另外说下,短距离通讯,只要从设备支持,用高点的波特率,提高反应速度  西门子技术说:s7200只支持50m的通讯距离,再远了要加中继器
设备上就不说了,就A B GND
还啰嗦一句,从设备的链接不能用星型解法,是一个一个的串联的,手牵手链接

下面是程序了
说说我的方法:
按照官网的例程,是采用的轮询,在初始化后,启动modbus读写,启动后要做循环,就是操作完最后一个读写块后,要重新启动第一个读写块
也就是说,读MBUS_MSG这个模块要一个一个读,官网上说,不能同时执行2个MBUS_MSG读写,启动MBUS_MSG后,第一个读完的完成位是第二个MBUS_MSG启动的条件
第二个MBUS_MSG是后一个的启动条件,最后一个读完后,再启动第一个MBUS_MSG
具体做法看程序,我这里是读的一个从站的2个地址,还有另一个从站的一个地址
在最开始调试的时候,可以用sm0.5这个位作为启动条件,测试一个MBUS_MSG  测试硬件是否正常,用状态表监控收到的数据

2.jpg 重点说说这个模块
EN   使能位,这个是模块执行的条件,也是模块的启动条件
Fisrt   模块触发位,上升沿启动模块通讯
Slave   从站地址,这个不用说了吧
RW    读写控制   0读 1写
Addr    从站寄存器地址  可以参考官网的说明,实际这里如果是寄存器操作  40001  400001好像都可以 注意你的设备地址,数据
       40001  400001是首地址
Count    要读写的数据个数  这个刚开始很纠结,后来才知道的,新手是不是都纠结这个呀??????
          这个是你要读写的数据的个数,特别提醒,这个是字的个数,不是字节的个数,在485协议里可以看看
Dataptr    数据指针,你要读出的数据,和要写会的数据都放在这里
Done    模块读写完成位,也是下一个模块的执行条件,当一个模块读写完成后,尽快的把要采集的数据读出
Error     错误标志位,在程序里用来检测错误,和错误处理
3.jpg
程序说明:
因为还没有调试完,暂时只读了6个从站
首先是初始化modbus   然后读第一个MBUS_MSG    然后读第二个,读完最后一个后,根据条件把数据导出
注意数据导出条件   读完标志位上升沿导出,不加条件,读的数据会窜站
读完数据后,更改从站地址,继续下个从站的读写,一直把所有的都读完。然后,在读首从站 ,从站地址在程序里控制
然后是数据刷新,和总线故障处理

S7200的modbus通讯例程.rar (32.47 KB, 售价: 1 E币)

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

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-12-25 14:17

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表