首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

S7-1200串口CM1241的Modus-RTU通讯要点

最近在用1200通过Modbus-RTU采集某流量传感器的数据,西门子侧选择的是CM1241(RS422/485)(订货号是6ES7 241-1CH32-0XB0,固件版本V2.2),CPU是1214C,固件版本是V4.2,自认为调试应该很简单,但是却花费了很多时间,并查阅了很多资料、视频,才实现了通讯。下面逐步介绍一下步骤,可能的坑及解决办法。

1、硬件接线

通讯卡9针插座的3和8针用于485通讯(Modbus的通讯),西门子手册上标识为:3+(B),8-(A),流量传感器上标识为A+、B-。通讯不通时,我在这儿折腾了很久,后来用万用表直接测量电压搞定,原则:不用理会AB,直接测量电压,+对+,-对-即可。未通讯时,电压在3-5VDC之间。

2、硬件配置

基本配置(要与从站保持一致),记下硬件标识符:这里是269。

3、端口初始化编程

注意选择V3.1这一套程序,不要与下面的V2.2程序混用(注意这套程序的版本限制“使用CM1241 自固件版本V2.1起...”)。

初始化程序放置在OB1循环调用的子程序里,官方提醒不要放在OB100(启动程序里),设置好参数(与硬件里的基本一致),自动生成顶部的背景数据块(这里是DB1)。

打开DB1,将里面的MODE修改成4,其他保持默认值(这也是个大坑,谁会想着去修改背景数据块?所有需要修改的应该都通过接口参数开放出来呀!)。

MB_DB要与后面的Modbus_Master的背景数据块保持一致,在创建Modbus_Master时,会自动生成,然后再回过头来修改,我这边为DB2。

4、创建读写指令

我这边用到了轮询,所以,程序相对复杂,会调用多个Modbus_Master模块(注意:他们必须用相同的背景数据块,不要每次都新建)。如果只是单站读取,REQ端用时钟脉冲即可。REQ是上升沿触发,如果常置位,则只会进行一次读取,因此用时钟脉冲可以周期读取。

MB_ADDR是从站地址,MODE是模式,与DATA_ADDR配合,在后台生成标准的MODBUS指令,比如,我要实现传感器厂家的指令帧:

起始地址是0x800E,转换成十进制地址是32782,功能码是0x03

通过Modbus_Master的帮助可以看到,我的MODE要选择0,DATA_ADDR填写:432782(实际上由于是否从0开始的问题,这儿最终填写的是432783)

这样,就可以读取了。

5、最快速度轮询时的效果

我用录波软件PLC-Recorder对于采集回的值、轮询指令等进行了录波,以10ms的速度记录,从这个波形上可以看到,实际轮询周期能达到100ms(我这里有两个从站):

将其中一个传感器断电,制造单站故障后的轮询周期大都加长,达到了600ms(因为要等待超时):

6、如果通讯怎么都不通时,怎么判断?

首先要利用调试软件方便测试PLC和传感器。对于传感器,可以用厂家调试软件,配合USB转485的接口进行测试,确定通讯参数和状态好坏。

对于PLC,有朋友利用MODBUS从站模拟软件进行测试(我没有找到),也可以打开模块上部的盖板,查看发送灯是否亮来判断,模块是不是已经启用。正常轮询时,发送和接收都会黄灯闪烁的。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201124A01LMA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券