找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
{{itemCategory}}
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
两种可能,一种是由于模拟量和开关量使用的FC号是不一样的,如果你用同一个DB而没有进行地方的偏移,有可能开关量的信息被覆盖了,当然了,这个最初级的错误。
如果你的问题没有出现在上面,那么你的开关量信号应该也可以读过来,应该是没有和实际的状态对应起来,也就是和实际的状态(1,0)不相符。这是因为ModBus的通讯协议造成的,你仔细看看CP341的手册便可发现(按下面的方法即可解决):
Modbus ID 和DB地址号对应起来后,一般以WORD传送,你看FC1,FC2举例。这样的话,一次传送的是两个字节,16个位。传送过来你读取的时候需要分解,也就是说你在看现场设备的开关量时要对传过来的WORD字来拆分。
Modbus的数据如果以WORD传送,那么高低字节需要互换才能和设备状态对应,如果在程序中不做任何处理,那么你在对这些信号进行控制监控的时候自己算一下即可,具体事例:
如你的Modbus ID从10001到10016传送到DB1.DW0
那么你的10001对应的是DB1.DBX1.0
10002对应的是DB1.DBX1.1
。。。。
10007对应的是DB1.DBX1.7
10008对应的是DB1.DBX0.0
。。。。
10016对应的是DB1.DBX0.7
你可以按上面的方法试试,如果还不能解决问题,发邮件吧
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!