签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
一台SY-DFX9T-8N14N01智能温度巡检仪,站址编为4,一台Y-DW91T-KWh1000智能单相电力巡检仪,站址编为5,均为武汉松野仪表有限公司的产品,用S7-226CN通过modbus通讯可以正常在200上读到从站4的各路温度及从站5的电压、电源频率等参数。后通过串口调试助手看到了200对4和5发出的查询代码后,就改用自由口通讯,发出模拟modbus的查询代码,也能读到响应的数据。但,问题来了,每过一段不确定的时间(短则10分钟,则几个小时),200就无法读回从站的数据了。通过串口调试助手观察,是200没有发出查询代码,可是此时若从串口调试助手上发一次查询代码,则好像200又被激活似的,又可以发出查询代码,通讯又正常了,这种情况反复出现,百思不得其解。
寻求各位大神帮的帮助,谢谢。
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1596025&b_id=3&s_id=0&num=11
我觉得,200只是处于等待状态。
通讯一般要写重试次数,收到报文不正确、有错、无响应、校验不正确、超时,要重发。你写了重试程序段么?
我并没有使用发送及接受中断,而是每隔一秒发送一次查询代码。
引用1楼详细内容:
我觉得这么简单的定时发送的写法,不行。
处理不了通讯中的偶发问题,就卡那里了。
我是定时调用XMT发送,并且在发送前对smb87赋值为0,无论如何应该能发送出去呀。不理解。
直接使用modbus rtu的指令实现不是挺好吗,为什么一定要自己做
modbus rtu早已经玩烂了。这不是兴趣嘛,实际上,那个查询代码就是通过串口调试软件看到的modbus发出的代码才得到的,偷懒不想算CRC校验码。
如果你只是为了玩的话,你程序里的原因是没有超时重试功能
引用详细内容:
故障现象是过一段时间200就不发送查询代码了,而我是每隔一秒调用XMT发送,并且在发送前对smb87赋值为0,无论如何应该能发送出去呀。
又发现一个现象:如果只是单独对从站4或从站5通讯都没有问题。但是如果轮训从站4和从站5通讯,过一段时间就会出现不发送查询代码的问题。
有非致命错误吗?
端口同时XMT/RCV
这个还真没有。
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录