有关modbus读不连续的寄存器数据怎么办?
设备定义了1000,1600,1700的寄存器号,如果我读起始的寄存器号为1000,个数为3;那么这时候设备要怎么响应啊?是正确读出1000,1600,1700寄存器的值;还是报错? 如果你用工控软件这样操作是读不上你要的数据的,报不报错就看你下位机的响应,要是没有做相应的响应,工控软件就告诉你连接错误或无设备无响应(个人理解) 也就是说必须读寄存器必须是连续的了,否则就没有意义了吧。我看了modbus协议里面好像有讲到可以包括不连续的寄存器.http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_613121U33POY.JPG
(原文件名:不连续的寄存器.JPG) 这个我还真没弄过,那样看你上位机用的是什么软件了,看此软件是否支持。 不会报错,只能分3次读了 要看对方协议怎么来编写的。可以让报异议,也可以不报异议。 协议的意思应该是:
如果读1000 开始的三个地址比如 1000,1002,1004,如果使用读多寄存器功能,假设上位机设置读5个连续地址,
那么1000,1001,1002,1003,1004 这5个会连续读上来,只取你需要的即可。 Modbus协议只支持连续地址读取,编程的时候,如果一次通讯较长连续地址的时间大于分段读取的时间,那就分段读取,也就是说读取数据的长度是个变量,你事先设置的,取决于波特率和从机反应总时间,系统要通讯的不连续地址间隔大于这个长度,就分几次读, 西门子的PPI MPI是支持一个通讯数据帧,读取若干任意不连续地址的,协议支持不连续读写
页:
[1]