有些命令是定长的,很多命令的响应是定长的,而且长度较短,这些咱们就不用关心了.
程序写的时候,接收和发送可以共用一个缓存区,这样就不用关心是读还是写命令了.
对于ASCII模式,程序设计为先转换格式再发送或接收,则缓存区和RTU模式将相同.
所以我们关心的就是多位读写命令和多寄存器读写命令.
在一个请求或请求响应中,协议产生的开销基本是确定的,这包括从机地址,命令,读写地址,读写长度,返回字节数,最后因为RTU和ASCII协议不同为lrc+CRLF或CRC16,所以为1+1+2+2+1+3(2)
最后剩下的就是决定缓存区的关键部分,数据区长度,这里保存接收到的数据或带发送的数据, 大小有多位读写命令和多寄存器读写命令中的数据长度决定, 多位读写命最是(数据长度/8+1), 多寄存器读写命令数据长度是(数据长度x2).
说白了,缓存大小关键要看多位操作的位长度或多寄存器操作的字长度,就是一次要操作多少位线圈或多少寄存器(字)
综上:50字节去掉10字节协议开销,最多一次可操作(50-1)*8位线圈或操作25个寄存器. |