看到论坛里有篇关于modbus轮询的子程序,权限不够不能回帖,在这儿探讨下轮询的需求。
1、modbus通讯对速度通常要求不高,多数读操作可以分钟计,写操作以秒计都是可以的。
2、正常一次通讯也就一二十毫秒,因此即使全部通讯异常也可以通过参数优化到每秒二十次以上,全部正常的话更可以达到每秒50次以上,这对于多数应用来说都是足够的。因此写优先意义不大,掉线排除轮询更是大大增加程序复杂度。
3、简化数据块的使用和占用更重要。比如20型cpu才八千多的V区地址,尽量少占用空间很重要。比如msg的dataptr,在数据块里就不要使用D型数了,直接用W型数据,然后程序里给加上16进制8百万换算成V型地址。还有count也可以用B代替W型数。RW仅是一个位,随便整合到哪个数里
4、读写内容类型完全一致,只是需要更改连续站号,这是刚需。可以直接在数据块中压缩为站号首地址、连续站数量,以及目标数据区首地址。比如连续写1到9号站的2000h地址为vw0开始的九个字,只是增加了一个连续站数量,就使数据块少了8组,即减小空间又降低数据块填写出错概率。
5、按以上思路,可以做到一个通讯口使用1K字节空间,就能支持50组数据,每组可以为连续百多个站号的读或写(把RW整合进连续数量字节里)