好几年前做过用一台226PLC与二十几台变频的modbus通信,当时就是一个msg指令接一个msg的指令编程,把PLC的空间填满了。因为都是同样的变频器,后来通过只改变从站的站号把通信功能实现了。现在知道了,不仅有那种多个msg组成的传统方式,还有对数据区V先赋值再用指针把值传给msg的脚的方式,还有这个帖子里的在程序里进行赋值的方式,有其它方式网友跟帖探讨。
各种方式各有优缺点吧
1,传统方式,优点:比较直观,缺点:当通信的任务多了以后,程序量会比较大。
2,数据区赋值方式,优点:程序量小,缺点:数据区占用的多一些
3,本帖方式,就是在程序里赋值。程序量比数据区赋值方式多一些,但比传统方式的程序量少,数据区占用少一些。
此例程是个子程序
此例程是PLC串口连接了一台电能表(地址2),四台变频器(地址3,4,5,6),
此例程有写操作优先功能
此例程有掉站跳过功能,另外还有1分钟掉站通信恢复功能
拿到程序后的疑问:
1、为什么都是局部变量
这个通信子程序是我程序框架里里的一小部份,全部都是局部变量在我的程序框架里正常工作。下载者将变量自行替换。
2、为什么上升沿信号不是上升沿指令产生的
因为子程序里使用上升沿指令程序工作不正常
3、为什么我直接用这个子程序无法正常工作
此程序是我框架程序里的一部份,直接使用不可以。要根据自己的应用对变量地址更改。
4、可以重复调用吗?
在我的框架程序里是可以重复调用,但也就调用两次,因为只有两个串口嘛,相应的指令也要变一下。
如果有其它问题欢迎留言,共同探讨。
看下面的帖子
【S7-200 Smart开源标准化编程】modbus rtu终极封装-单条msg指令多任务读轮询写优先掉站跳过掉站恢复
https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1760741&b_id=64&s_id=0&num=0#anc