一、FreeModbus RTU 协议数据格式
FreeModbus RTU是开源的一个协议,并且使用FreeModbus RTU 只能当做从机Slave,RTU协议中的指令由地址码(一个字节),功能码(一个字节),起始地址(两个字节),数据(N个字节),校验码(两个字节)五个部分组成,其中数据又由数据长度(两个字节,表示的是寄存器个数,假定内容为M)和数据正文(M乘以2个字节)组成,而RTU协议是采用3.5个字节的空闲时间作为指令的起始和结束。
Modbus 数据的请求及应答
其中3.5个字节的空闲时间是指从接收到第一个字节数据到最后一个字节数据所有的时间,如下所示程序中是50us的定时时基,
那么3.5个字节的空闲时间 = 50us * usTimerT35_50us
。
/* If baudrate > 19200 then we should use the fixed timer values
* t35 = 1750us. Otherwise t35 must be 3.5 times the character time.
*/
if( ulBaudRate > 19200 )
{
usTimerT35_50us = 35; /* 1800us. */
}
else
{
/* The timer reload value for a character is given by:
*
* ChTimeValue = Ticks_per_1s / ( Baudrate / 11 )
* = 11 * Ticks_per_1s / Baudrate
* = 220000 / Baudrate
* The reload for t3.5 is 1.5 times this value and similary
* for t3.5.
*/
usTimerT35_50us = ( 7UL * 220000UL ) / ( 2UL * ulBaudRate );
}
调试modbus 工具
Modbus 调试精灵
或者Modbus Poll
模拟当做 主机
Modbus Slave
模拟当做 从机
http://www.modbustools.com/download.html//工具下载
二、参考文档
Modbus 协议文档
http://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf
http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf
FreeModbus Slave
//FreeModbus 源代码:
https://sourceforge.net/projects/freemodbus.berlios/files/
//FreeModbus 移植参考:
https://www.dhlx.wang/STM32F411VET6/Porting_FreeModbus_to_STM32F411VET6_based_on_STM32CubeF4.html
http://blog.csdn.net/dldw8816/article/details/44563749
http://blog.csdn.net/liu236141068/article/details/51841245
Modbus RTU Master
//移植源代码
https://github.com/LittleBigQi/ModBus-Master
https://github.com/4-20ma/ModbusMaster
by 羊羊得亿
2018-01-30 ShenZhen