一、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