-
Notifications
You must be signed in to change notification settings - Fork 73
我看从机代码,有一个问题咨询? #13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
还有一个问题就是比如我定义了第一个缓冲区为0-99,第二个缓冲区为100-199.但是我软件需要操作99和100两个寄存器,这样会导致系统频繁的读取这200个地址的所有数据。 |
这是我为了应用层代码简单实现的一个方式,你有更好的方式可以自己实现 |
借楼,关于这个问题我也有些想法,这边三个issue两个讲的这同一个问题,我就不新建issue了。
我的问题是:有没有可能给map的get接口添加一个index参数来解决这个问题?读取的时候按地址段的index偏移读满map_buf,之后再进行后续处理,这样看起来可以解决掉这两个小问题。我检查了一下03和06指令的逻辑感觉可以实现,但其他的指令我还不清楚不熟悉,所以在这里请教一下大佬有没有这样考虑过。这样做在处理其他指令的时候会有麻烦吗? |
可以的,后续会增加一些配置项,但其实并没有想的这么简单。用户再使用这个 index 的时候就没有目前这么简单,直接把 map 中所需要的全部拷贝进去即可。 会考虑放入 address 参数供使用,但也会有一些问题需要解决,如: |
我根据agile modbus做了一下二次封装,然后重新编写了slave_util相关函数,实现和解决了我自己提出的上面的问题,采用动态绑定寄存器的方式,在绑定时可以不受124寄存器的限制(读写数据依然会有限制,因为这个是modbus协议标准规范定义的)。并且借助libserialport的开源串口通信库和Pthread的线程库,自己写了一套基于RTOS(目前完成了RT-thread和Free RTOS,后续会增加cmsis_os2)和PC(目前测试了windows和linux)的platform的接口,实现了对底层实现的封装和隔离,使其成为一个可以上手即用的modbus通信库。并且可以用pikapython的REPL操作。谢谢大佬的支持!( https://github.com/SenySunny/modbus_rt ) |
我看了一下从机的代码,一方面对于map_buf数组长度有限制,这个还不是主要问题(因为Modbus协议本身就有定义每次最多只允许操作124个寄存器).
但是不管是读取寄存器还是写入寄存器,你都需要把该字段的所有寄存器全部读取一次,这样的操作是否有冗余,这样的操作是为什么?理论上读取寄存器我们只需要读取对应的寄存器就好了,不需要把整个字段的寄存器都读取出来。写入寄存器的时候也不需要读取寄存器啊!所以这一块没有特别搞懂?是否可以优化。
The text was updated successfully, but these errors were encountered: