技术论坛

 S7-1500 “闹鬼”的Modbus_Polling

返回主题列表
作者 主题
曹小明
游士

经验值:235
发帖数:3
精华帖:2
楼主    2020-09-09 12:11:10
主题:S7-1500 “闹鬼”的Modbus_Polling

写在前面:

1、很久没有在论坛内写分项帖了。

2、还真不确定是否这个现象具有代表性,权当提个醒吧。


背景介绍:不赘述完整的硬件配置。CPU:1511-1PN V2,CM:RS422/485 HF,变频:施耐德ATV 6台;Portal V14 SP1

实现的功能:读状态字、输出频率、输出电流、母线电压,写控制字、写频率(PID控制)。

通讯格式:19200 8 1 E


在一个风雨交加的夜晚,一个电话粉碎了“老婆孩子热坑头”的美梦。接到呼叫的时候,以及观察现场CM模块的状态,初步判定是Master主站程序非正常调用导致的问题。自信满满的伙同(这个词不太恰当)**哥哥直奔现场,一路上可谓是雄赳赳气昂昂啊。真是天有不测风云,人要是打脸随时随地啊!


废话完毕,看我碰到的...

到达现场收看看到是:ATV通讯故障停机报警。查看手册后果断 禁用了它!同时观察了PLC,1511正常,CM空闲状态。

不慌不忙的打开程序(之前已经上传到PC了):直奔在线和诊断,硬件OK,程序OK!翻看MODBUS polling程序。咦?SCL?正合我意,没问题呀?那么怎么通讯故障了呢?翻翻master DB瞧瞧吧!


不瞧不知道,一瞧干一宿

先看看这张照片,应该很熟悉:


别看小动物!各位看官,这个状态在分析、确定处理方案前、PLCrestart前持续了近2个小时。备注下:Master程序0.5Hz触发,未明确前没敢妄自下手。不知各位看官从这张照片内读出哪些信息?


查手册:7002--中间调用:?数据传输运行。数据传输运行,那么Blocked_Pro_Timeout 不是超时吗?咋不超时呢?为什么超时3S到达了,不更新状态呢?从站地址是3,谁是3?哎呀呀!从站地址3的ATV没上电!看了一遍手册,再看一遍。按照字里行间的描述:Blocked_Pro_Timeout 参数到达应该更新Master块的很多参数吧?尤其是Done/Error。行吧,咱们Reset下,试试?


S7-1200/S7-1500不支持Reset用法!!!


考虑很久后做出了个决定:重新调用 COMM_LOAD!


重新调用COMM_LOAD解决问题了吗?有时间把后面的补上。同时也请大侠们不吝赐教前面不正确的地方。


继续之前感谢“宝冬”对之前的回复。


宝冬说的切断EN端确实是一个办法,无奈程序编写是SCL,见下文

反复重启PLC并仔细观察程序执行后,与同去的老王一通嘴炮后,试试重新调用COMM_LOAD程序。一番折腾之后,证实了一个事实:COMM_Load指令在Master卡死时,执行毫无意义,无任何作用。*此处个人观点:MODBUS通讯相关组态等信息手册上明确“Modbus_Comm_Load 的组态更改将保存在 CM 中,而不是 CPU 中”。可能正是因为存储在CM中,才不会触发“通信报警或错误“,引用手册内容如下:”Modbus 指令不会使用通信报警事件来控制通信过程。程序必须查询 Modbus_Master 指令来获得完整的命令(DONE、ERROR)。“


既然程序执行中出现了”卡死“,而Master程序在设计时和手册中也提到了Blocked_Pro_Timeout,且Blocked_Pro_Timeout参数可以通过程序读写。


绞尽脑汁的回想MODBUS执行的范例,反复重启PLC后,发现了一个Static变量的变化过程。灵机一动:咱也手动来个3s的”Blocked_Pro_Timeout“,Master.DB.Busy接通3s后咱们把这个变量置零!试试,试试!


结果令人十分振奋:


随后将近一个小时的验证后,看着外面的风雨,回头看看奋战了7、8个小时的现场,挥挥烟灰,家走喽。


总结:路过的大侠们一起品评吧。欢迎大侠们指正!


补充:其实还有另外一个解决办法,是严格意义上的“手拉手”方式接线。只是比较急切,且当时手里确实没有“水晶头”式接口,便没有实施。如有哪路神仙用过这个硬件的办法,还希望积极分享经验。


您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。