modbus 協議簡介
包結構如下:
modbus數據包={
uint8 地址
{請求|響應|出錯響應} 載荷
uint16 CRC16
}
或者用如下方式表示:
modbus數據包={
uint8 地址
uint8 功能代碼
可變域 數據
}
載荷 結構爲:
請求={
uint8 功能代碼
uint16 請求數據
}
響應={
uint8 功能代碼
uint16 響應數據
}
出錯響應={
uint8 功能代碼
uint16 出錯代碼
}
常用功能碼:
公共功能代碼={
01: 讀線圈
02: 讀書如離散量
03: 讀多個寄存器
04: 讀輸入寄存器
05: 寫單個線圈
06: 寫單個寄存器
15: 寫多個線圈
16: 寫多個寄存器
23: 讀寫多個寄存器
43 14:讀設備識別碼
}
讀線圈請求過程(01)={
請求={
功能代碼=0x01
起始地址=[0x0000,0xFFFF]
線圈數量=[1,0x7d0]=[1,2000]
}
響應={
功能代碼=0x01
響應字節數量=輸出數量/8,向上取整
線圈狀態={s1,s2,...,sn}
}
出錯={
功能代碼=0x80+0x01
錯誤代碼={1|2|3|4}
}
}
錯誤代碼={
1: 不支持的功能碼
2:數量異常(溢出)
3:地址異常(溢出)
4:內部出錯
}
讀保持寄存器請求過程(0x03)={
...
寄存器數量=[1,125]
...
}
地址空間:
address={
0: 廣播地址
[1,247]:單播地址
[248,255]:保留地址
}