modbus中lrc校验 发送字串为{“:”,0x30,0x31,0x30,0x33,0x30,0x30,0x31,0x32,0x30,0x30,0x30,0x34}

{“:”,0x30,0x31,0x30,0x33,0x30,0x30,0x31,0x32,0x30,0x30,0x30,0x34}

冒号为asc模式下的帧首,后面应该是lrc校验码和结束字符,没有写上。问题是,我用modescan模拟发送算出的校验码为E6,而我自己算的校验码为B5,不明白E6是如何算出来的。

第1个回答  2013-01-07
你先把十六进制的数转换成 8bit的字符 相加取反加一
例如 0x300x31对应 01
0x300x33 03
0x300x30 00
0x310x32 12
0x300x30 00
0x300x34 04
01+02+00+12+00+04=1A 取反E5 加一 等E6
希望对你有帮助本回答被提问者采纳
第2个回答  2012-12-05
刚好 有个 VB 计算 程序

Function Chr_lrc(Dats As String) As String '*ASCII方式的LRC校验计算
Dim c As Integer
Dim l As Integer
Dim c_data As String
Dim d_lrc As Integer
Dim h_lrc As String

c = 0
l = Len(Dats)
For c = c + 1 To l
c_data = Mid$(Dats, c, 2)
d_lrc = d_lrc + Val("&H" + c_data)
c = c + 1
Next c
If d_lrc > &HFF Then
d_lrc = d_lrc Mod &H100
End If
h_lrc = Hex(&HFF - d_lrc + 1)
If Len(h_lrc) > 2 Then
h_lrc = Mid(h_lrclen(h_lrc) - 1, 2)
End If
Chr_lrc = Right("00" + h_lrc, 2) '*协议规范要求校验和必须是两位,所以用取右侧两位的方式

End Function追问

麻烦你计算下,我是关心我计算方法是不是错了,谢谢。

追答

这个 程序 计算 的 也是 E6

追问

是两字节两字节相加么?取右侧两位是什么方式?另外你把“”里的:号算上了么?按协议貌似是不算的。另外,低字节加出来是0bH,反补后是05H啊。

追答

同学,上面不是有 程序嘛
呵呵

追问

VB没学过,看不懂,况且算法弄清楚,计算器也能算出来。我计算结果对不上,但是又不明白为什么对不上,所以,你要是愿意能不能讲讲E6是怎么计算出来的?

追答

VB 不难理解 的

很容易上手

本回答被网友采纳
第3个回答  2012-12-05
然后?

有 计算 校验码 的 程序吧

其实,程序里 设计 的 有,会自动计算 传输的
相似回答