一屎债、MODBUS 工業(yè)上常用的一種串口通訊協(xié)議仅政,協(xié)議包括RTU、TCP盆驹、ASCII;其中MODBUS RTU協(xié)議最常用圆丹;
二、串口參數(shù)
設備地址:1~247? (儀表的設備地址)
波特率:50躯喇、75辫封、100、150廉丽、300倦微、600、1200正压、2400欣福、4800、9600焦履、115200劣欢、19200棕诵、38400;
校驗位:偶校驗凿将、奇校驗校套、無校驗;
數(shù)據(jù)位:8牧抵、7笛匙、6
停止位:1、1.5犀变、2
三妹孙、報文格式
設備地址(兩個字節(jié))、功能碼(兩個字節(jié))获枝、寄存器地址(四個字節(jié))蠢正、寄存器數(shù)量(四個字節(jié))、CRC校驗碼(四個字節(jié))
發(fā)報文:01 03 00 00 00 01 84 0A
解釋:01:儀表的地址省店;? ? ? 03:功能碼嚣崭;
00:寄存器地址高位;? 00:寄存器地址低位懦傍;
00:寄存器數(shù)量高位雹舀;? 01:寄存器數(shù)量低位;
84 0A:校驗位
接收報文:01 03 00 02 00 DC 7B F1
解釋:01:儀表的地址粗俱;? ? ? ? 03:功能碼说榆;
00:數(shù)據(jù)字節(jié)長度高位;? 00:數(shù)據(jù)字節(jié)長度低位寸认;
00:寄存器數(shù)據(jù)高位签财;? ? DC:寄存器數(shù)據(jù)低位;
7B F1:校驗位
四偏塞、功能碼定義
發(fā)數(shù)據(jù)時:設備地址(兩個字節(jié))荠卷、功能碼(兩個字節(jié))、寄存器地址(四個字節(jié))烛愧、寄存器數(shù)量(四個字節(jié))油宜、數(shù)據(jù)的字節(jié)長度(兩個字節(jié))、數(shù)據(jù)(四個字節(jié))怜姿、CRC校驗碼(四個字節(jié))
接收數(shù)據(jù)時:設備地址(兩個字節(jié))慎冤、功能碼(兩個字節(jié))、寄存器地址(四個字節(jié))沧卢、寄存器數(shù)量(四個字節(jié))蚁堤、CRC校驗碼(四個字節(jié))
根據(jù)功能碼的不同,主機和從機都可接收數(shù)據(jù)和發(fā)送數(shù)據(jù).
CRC校驗碼
//CRC校驗碼
static string CRC16(byte[] pDataBytes)
{
ushort crc = 0xffff;
ushort polynom = 0xA001;
for (int i = 0; i < pDataBytes.Length; i++)
{
crc ^= pDataBytes[i];
for (int j = 0; j < 8; j++)
{
if ((crc & 0x01) == 0x01)
{
crc >>= 1;
crc ^= polynom;
}
else
{
crc >>= 1;
}
}
}
byte hi = (byte)((crc & 0xFF00) >> 8);? //高位置
byte lo = (byte)(crc & 0x00FF);
string data = lo.ToString("X2") + hi.ToString("X2");
return data;
}