摘要:应甲方要求,西门子控制系统S7-1200需要增加MODBUS RTU通信功能,因此网购了一只CM1241(RS422/485),CPU是1217C,版本号忘记了。原本以为很简单的事情,结果整了一天才搞定,因此总结记录下来,避免下次使用时再次迷糊。
应甲方要求,西门子控制系统S7-1200需要增加MODBUS RTU通信功能,因此网购了一只CM1241(RS422/485),CPU是1217C,版本号忘记了。原本以为很简单的事情,结果整了一天才搞定,因此总结记录下来,避免下次使用时再次迷糊。
1. 打开博图,硬件组态
找到CM1241,对应型号直接插入即可,选择“半双工RS385两线制模式”,其他参数设定可以根据需要更改,如图所示。
图1:硬件组态1
图2:硬件组态2
2. 查看硬件标识符
记住这个代码,每个组态不一样的啊,其实记不住也没关系,后面编程时可以调用这个硬件,自动出来这个代码。
图3:硬件标识符
3. 编写程序
打开OB1,或者新建一个FC块或者FB块,但无论如何一定要在OB1中调用,千万不能在OB100中调用。
使用通信指令中的MODBUS(RTU),千万不要使用MODBUS指令集。MODBUS 指令集即使程序不报错,但也无法通信,不知道为什么,已实际测试过。网上有些攻略时错误的,因为他们并没有实际验证。
图4:OB1中调用MODBUS(RTU)指令
做主站就调用MASTER指令,做从站就调用SLAVE指令。必须保证是同一个指令集下面的指令,不可以混用。
初始化中的MB_DB管脚就是主站或者从站的背景数据块的MB_DB,调用时进行选择即可。
图5:OB1中调用MODBUS(RTU)指令
4. 修改数值
这个过程非常重要,否则通信必定失败。打开初始化数据块,找到MODE项,将数值修改为4,默认数值是422通信。
程序进行编译后即可下载至PLC中。
图6:修改MODE为4
5. 硬件连接1
网购一只九针公头,锁紧螺杆也是公头,要不然插不上。用万用表测出公头十根线对应数字1-9的关系,拿个小本本记下来。主要是3号和8号管脚到底是哪两根线,正常情况下,3和8管脚之间存在DC3V的电压。
图7:九针公头测电压
6. 硬件连接2
网购一只RS485转U口数据线,为了方便使用电脑中的MODSAN32进行测试。将九针公头中的3号和8号分别接到转换器的TR+和TR-,一般来说,CM1241是3+8-,但实际使用中,有同事反应,也可能是3-8+,总之,就用万用表量完,正接正,负接负,就完了。
图8:RS485转换器
7. 数据块
新建一个数据块,在属性中将优化块的访问的钩子去掉,这样就可以显示出地址偏移量了,当然不去掉钩子,也可以通信,但我都给钩子去掉了。变量可以根据需要自己声明想要的类型,这里是WORD类型。
优化后,就只能用寻址的方式P#
图9:数据块
8.监控数据块
给数据块戴眼镜,修改数据块数值。此操作可以后来操作,无所谓。
图10:监控数据块
9.查看COM口编号
打开计算机管理器,查看设备管理器,找到端口选项,打开后就可以看到U口转过的虚拟COM口编号了,记住这个编号。
图11:COM口编号
10.MODSAN32设置
打开MODSAN32程序,此软件为绿色版,直接打开EXE文件即可,有中文版的,没找到,英文版的也不难理解。
打开连接选项,弹出设置对话框,COM口选择正确后,其余设置要和CM1241中的设置完全一致,同时也要保证OB1中程序调用块的参数完全一致。
图12:MODSAN32连接参数设置
11.MODSAN32运行
参数设置完成后,点击OK就可以了。此处要注意的是地址0001,地址长度20,设备地址1,读取类型03,这些参数可以在界面直接修改,也可以打开SETUP进行一次性设置,特别注意的就是地址长度,要与OB1中相对应,否则地址容易丢失。成功后,右边会显示通信成功次数。也可以使用其他串口调试软件。
画红框的地方显示的数据和数据块监视中修改的数据完全一致,说明通信成功。
图13:MODSCAN32运行
40003:4代表读取1200中的寄存器地址,0003代表第3个地址,即DB11.DBW4.0
核心就三点:一是万用表测电压确定38正负极;二是修改MODE值为4;三是指令集调用MODBUS(RTU)。
PS:CB1241为MODBUS通讯卡,和CM1241通信模板略有区别,板卡是可以用MODBUS指令集中的指令,并且为接线柱模式。
来源:琦琦潮科技