motoedy 发表于 2018-4-12 09:22:14

modbus只读数据只能放输入输入寄存器?保持寄存器可以只读?

以往做的modbus从机数据都是只读,没有做06,16写命令,所以一直用的03码,
但是这次因为要做可读写的,但是我以前的数据因为用的03码而放在了保持寄存器里,
这次加上06,16码,发现这样的话,这些只读的参数也可以被修改,
我看了一些其他厂家的协议,发现好多都是用的03码,但是后面标注了只读,和读写,
这样的话,实际使用中,虽然你的协议标注了某些地址是只读的,但是如果程序里不加限制的话,
使用的人如果不小心发错了指令,且不是容易把本来只读的参数也修改了?
这就让我不解了,标准的modbus的协议里能区别保持寄存器是只读还是读写么?
我的理解就是如果只读的参数,应该放输入寄存器,而保持寄存器只放读写的,
看了好多厂家的协议,基本都是放在保持寄存器里只读和读写混用的,求大婶们指点解惑。

modbus 发表于 2018-4-12 10:21:38

只读用04码,用03码的话程序里加以限制也没问题,很多第三方的主机只有03、06、16码,如果用04码的话那些主机就用不成了,用03码加限制就可以适用于所有主机

motoedy 发表于 2018-4-12 10:26:33

modbus 发表于 2018-4-12 10:21
只读用04码,用03码的话程序里加以限制也没问题,很多第三方的主机只有03、06、16码,如果用04码的话那些主 ...

包括国外的产品,协议也是混合使用的,但是我看国外的是一段读写,一段只读,
这个在程序里限制,搞起来有点麻烦,那么多地址,只读和读写的还是混在一起的。。
客户的协议定死了,地址不能动。。有的基本是一个读写,后面跟个只读。。
有啥经典的处理方法?

modbus 发表于 2018-4-12 11:57:42

motoedy 发表于 2018-4-12 10:26
包括国外的产品,协议也是混合使用的,但是我看国外的是一段读写,一段只读,
这个在程序里限制,搞起来 ...

这种只读和读写区混在一块的情况如果不加限制,即使只读用04码,别人用03码地址错了照样会修改只读区的,必须要程序里限制

mii 发表于 2018-4-12 21:22:51

写过MODBUS程序的人告诉你,程序里必须限制,我写的专门有一个数组标志,每次写命令过来,都判断可不可以写。

motoedy 发表于 2018-4-13 07:47:50

mii 发表于 2018-4-12 21:22
写过MODBUS程序的人告诉你,程序里必须限制,我写的专门有一个数组标志,每次写命令过来,都判断可不可以写 ...

感谢,我也在想列个标志数组,每次有写命令时比对标志。。{:smile:}

ilikemcu 发表于 2018-4-13 08:43:44

我做的从机,习惯了把寄存器最后分到三个区块,只读,可读写,只写,把可读写的放在中间,这样可以读取的和可以写入的寄存器,在地址上是连续的,如果上位机有足够处理能力,可以一次性读取或者一次性写入{:titter:},当然实际这样的客户应用不会存在,但是用modbus poll测试时,一次性读取所有寄存器在PC端观测,还是尤其实际使用价值的。方便别人的同时,也方便自己。{:tongue:}

motoedy 发表于 2018-4-13 11:23:06

ilikemcu 发表于 2018-4-13 08:43
我做的从机,习惯了把寄存器最后分到三个区块,只读,可读写,只写,把可读写的放在中间,这样可以读取的和 ...

如果自己定协议肯定是这样处理最好了,但是客户定协议就各种崩溃。。{:mad:}
页: [1]
查看完整版本: modbus只读数据只能放输入输入寄存器?保持寄存器可以只读?