CP341主站通讯

我用一个CP341做主站,读取一个MODBUS从站,读取到从站的数值放到DB块里,然而每次在线监控时看到的数值只能是从站某一次发送的,在线观察时所有数据均不变化(而从站内是变化的),当关闭数据块监控,过段时间再打开相应的数据块监控,刚打开时,监控到的数据有可能还会变化一次,之后就再也不变。
我的CP341主站和从站的距离很近,大约四五米远,中间采用的是一段普通不带屏蔽的两芯电缆,电缆铺设在一段电缆槽内,槽内有380V动力电缆。
曾经找朋友确认过通讯程序是没有问题的,现在就不知道问题出在什么地方,会导致由从站读取的数据不变化。
着重提出一次,用MODSCAN32测试了从站其发送的数据均是正常变化的。

问题补充:
我用过关闭DB块监控,再打开监控,还是不变化;还有就是变量表我也用了,监控本应该变化的数据也不变化。
  突然想起来,我的程序是利用FB7里的接收完成位来触发下一次发送的,然而监控时感觉老是接收不能完成,但是明明数据已经接收到了呀?我开始用FB8发送完成位作为触发时观察接收数据块里的FB7的接收数据长度LEN总是小于主站要求收的数据长度,是不是和这个有关系?是不是因为从站实际可以发送的数据长度(应答回传的数据长度)小于我实际需要的?所以我这里接收完成位就一直不能置位呢?
    但我的数据表里的数据确时也就收到数据了呀。还有按理来说如果接收完成不置位,接收错误位也应该置位呀?

图片说明:

CP341主站通讯   

最佳答案

共享数据块可能会会出现这样的问题,你试着监控,然后再取消监控,如果冲站数值在变,DB块里的数值也会变。
或者在VAT 里面建数据,然后再监控,如果你的数据没有问题,里面数值一直会有变化的。

检查你的程序,看看 FB 的STSTUS 里面 有没有错误,如果没有问题,建议降低一下 读取数据的 速度。

提问者对于答案的评价:
问题的答案我已经找到了。问题在于西门子网站给的轮询例程有问题,例程中不但两次调用线圈M0.0的初级错误,而且还出现了轮询各个从站时都用L0.0做引导,无法区分从站,可能导致程序混乱,或者说程序可能在每个周期都是讲L0.0引导的最终数值送给DB1(存储地址和功能码等数据),也就是说即使能够通讯也只能访问最后一次从站,其他的站不会被访问到。还有听朋友讲尽量不用L做引导,而改用M,总之问题解决了,在这里也分享一下结论。
    感谢各位朋友的大力支持,分值只能给一个朋友,这里只能是口头感谢各位朋友了。
还有就是建议西门子的网站能够更正一下例程中的错误。以免以后给其他朋友再造成不必要的麻烦。
如果有需要兄弟我帮忙的朋友,可以发邮件到我邮箱yangzhgts@163.com,只要我能办到一定尽力帮忙。
再次感谢!

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc229733.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日
下一篇 2018年12月1日

相关推荐