上午, 在微信群《PLC标准化编程技术社区》里, 有网友讨论起S7-1200中MODBUS编程的问题。
虽然社区的成立是为了参加我分享标准化编程项目的, 但大家都是纯而专的技术爱好者, 自然讨论的热火朝天。
我先是忙别的事了, 等看到大家在讨论这个,就站出来说, 我给大家讲讲吧!
然后语音大致讲了一下我的思路。
现在再用文字转述一下要点:
1,MODBUS通讯, 首先是对一个站点, 一个数据任务区的读或者写任务的操作, 这是一个小的循环。目前1200/1500都有现成的库函数可以实现。
2,通常一个485网络上会带多个站点, 通讯时需要调度对每个站进行轮询。 即对一个站的读/写完成后, 再对下一个操作。 完成之前只能等待。
3,轮询操作中最大的坑是掉站,或者说坏站。 坏站的原因有可能是某个子站没有上电, 或者通讯压根没接线。 这种情况下系统的库函数无能为力。只能被动等待超时出错后再进行轮询下一个。
4, 如果一条线上10个从站, 在最差的情况下只有1个站正常, 而其它的9个站均为坏站的情况下, 如果设置每个站的超时时间为2S, 那么一个轮询周期的时间就接近20S, 对这个正常的站来说, 数据刷新太慢, 基本不可接受。
这种情况在项目开始调试时最常出现。谁都不能保证所有站一步到位都在线才开始调试。
5,我给出的解决的方法是建立同步和异步通讯机制。 所有的站点, 根据轻重缓急,划分为同步或者异步。 比如电度表, 水表等不重要的累积仪表,可以设置为异步通讯。
同步子站在每一个轮询周期中都被轮询到。 而设置为异步通讯的清单中的子站, 每一个轮询周期中只安排对其中一个的访问。下一个轮询周期再访问下一个。
这样即便有多个坏站, 每个循环周期也只遇到1个,总的循环周期就控制在2S。
甚至可以对顽固的坏站,更进一步降低访问频率,控制在10min左右访问一次即可。 即如果这个站恢复上电了,可以正常通讯了,最多10分钟, 操作人员从现场回到上位机, 就能看到数据回来了。
6,而所有曾经标记的坏站,一旦恢复正常访问一次,就标记为好站,再次排列到同步访问列表中,进行正常数据刷新。
同步异步机制的访问是这样的:
假设10个子站, 其中5个为同步站分别为同步1-5, 另5个为异步站, 分别命名为异步1-5.
那么,顺序为:
同步1>>同步2>>同步3>>同步4>>同步5>>异步1>>同步1>>同步2>>同步3>>同步4>>同步5>>异步2>>同步1>>同步2>>同步3>>同步4>>同步5>>异步3>>同步1>>同步2>>同步3>>同步4>>同步5>>异步4>>同步1>>同步2>>同步3>>同步4>>同步5>>异步5>>同步1>>同步2>>同步3>>同步4>>同步5>>异步1>>........不断循环。
讲完之后, 学员纷纷称赞有道理。
但很快就有学员表示, 自己实现起来有难度。
然后我就把我自己几年前做过的标准块的程序分享给了大家。
表示:大家虽然是来报名跟我学习标准化编程的, 但在其它方面, 有用的知识, 我还是会尽量分享给大家, 让大家从中持续获益。
这样的活动和技术探讨, 我们已经在社区中进行了好几次了。
当然,这只能局限于已经报名排队的。 还在门外观望的, 就无法享受这种待遇了。 毕竟, 我不可能把讲解对每个后来者都复述一遍。也不可能每次都这样把过程都整理成文章。
技术的细节千千万, 都在具体每一个细节中。
所以, 还在观望的,抓紧报名吧! 现在排队火热,开班在即!
不了解详情的, 请浏览:【万泉河】一个完全不使用T和M全局变量的好标准的PLC程序分享计划
加微信178616417, 注明:众筹报名。
支付100定金,即可入群。