VB6查表法编解Modbus RTU协议CRC16校验码

2023-10-07 19:40

本文主要是介绍VB6查表法编解Modbus RTU协议CRC16校验码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Modbus RTU协议CRC16编解码用VB6写起来比较啰嗦,需要做一些简单处理。下面就查表法,贴上源代码,并做一些简要说明。

 源程序,对照上面的图看更方便。

Private Sub Command2_Click()
Dim I As Integer, J As Integer
Dim CRCHi As Integer, CRCLo As Integer
Dim CRCindex As Byte, TestString As StringDim TABHi(), TABLo()
TABHi() = Array( _
"&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", _
"&H40", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", _
"&H80", "&H41", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H00", "&HC1", "&H81", "&H40", "&H01", _
"&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H01", "&HC0", "&H80", "&H41", _
"&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H00", "&HC1", "&H81", _
"&H40", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H01", "&HC0", _
"&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H01", _
"&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", _
"&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", _
"&H40", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", _
"&H80", "&H41", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H00", "&HC1", "&H81", "&H40", "&H01", _
"&HC0", "&H80", "&H41", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", _
"&H00", "&HC1", "&H81", "&H40", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", _
"&H40", "&H01", "&HC0", "&H80", "&H41", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", _
"&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H01", _
"&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", _
"&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", _
"&H40")TABLo() = Array( _
"&H00", "&HC0", "&HC1", "&H01", "&HC3", "&H03", "&H02", "&HC2", "&HC6", "&H06", "&H07", "&HC7", "&H05", "&HC5", "&HC4", _
"&H04", "&HCC", "&H0C", "&H0D", "&HCD", "&H0F", "&HCF", "&HCE", "&H0E", "&H0A", "&HCA", "&HCB", "&H0B", "&HC9", "&H09", _
"&H08", "&HC8", "&HD8", "&H18", "&H19", "&HD9", "&H1B", "&HDB", "&HDA", "&H1A", "&H1E", "&HDE", "&HDF", "&H1F", "&HDD", _
"&H1D", "&H1C", "&HDC", "&H14", "&HD4", "&HD5", "&H15", "&HD7", "&H17", "&H16", "&HD6", "&HD2", "&H12", "&H13", "&HD3", _
"&H11", "&HD1", "&HD0", "&H10", "&HF0", "&H30", "&H31", "&HF1", "&H33", "&HF3", "&HF2", "&H32", "&H36", "&HF6", "&HF7", _
"&H37", "&HF5", "&H35", "&H34", "&HF4", "&H3C", "&HFC", "&HFD", "&H3D", "&HFF", "&H3F", "&H3E", "&HFE", "&HFA", "&H3A", _
"&H3B", "&HFB", "&H39", "&HF9", "&HF8", "&H38", "&H28", "&HE8", "&HE9", "&H29", "&HEB", "&H2B", "&H2A", "&HEA", "&HEE", _
"&H2E", "&H2F", "&HEF", "&H2D", "&HED", "&HEC", "&H2C", "&HE4", "&H24", "&H25", "&HE5", "&H27", "&HE7", "&HE6", "&H26", _
"&H22", "&HE2", "&HE3", "&H23", "&HE1", "&H21", "&H20", "&HE0", "&HA0", "&H60", "&H61", "&HA1", "&H63", "&HA3", "&HA2", _
"&H62", "&H66", "&HA6", "&HA7", "&H67", "&HA5", "&H65", "&H64", "&HA4", "&H6C", "&HAC", "&HAD", "&H6D", "&HAF", "&H6F", _
"&H6E", "&HAE", "&HAA", "&H6A", "&H6B", "&HAB", "&H69", "&HA9", "&HA8", "&H68", "&H78", "&HB8", "&HB9", "&H79", "&HBB", _
"&H7B", "&H7A", "&HBA", "&HBE", "&H7E", "&H7F", "&HBF", "&H7D", "&HBD", "&HBC", "&H7C", "&HB4", "&H74", "&H75", "&HB5", _
"&H77", "&HB7", "&HB6", "&H76", "&H72", "&HB2", "&HB3", "&H73", "&HB1", "&H71", "&H70", "&HB0", "&H50", "&H90", "&H91", _
"&H51", "&H93", "&H53", "&H52", "&H92", "&H96", "&H56", "&H57", "&H97", "&H55", "&H95", "&H94", "&H54", "&H9C", "&H5C", _
"&H5D", "&H9D", "&H5F", "&H9F", "&H9E", "&H5E", "&H5A", "&H9A", "&H9B", "&H5B", "&H99", "&H59", "&H58", "&H98", "&H88", _
"&H48", "&H49", "&H89", "&H4B", "&H8B", "&H8A", "&H4A", "&H4E", "&H8E", "&H8F", "&H4F", "&H8D", "&H4D", "&H4C", "&H8C", _
"&H44", "&H84", "&H85", "&H45", "&H87", "&H47", "&H46", "&H86", "&H82", "&H42", "&H43", "&H83", "&H41", "&H81", "&H80", _
"&H40")TestString = "010303E80002"CRCHi = &HFF: CRCLo = &HFFDim PP As StringFor I = 1 To Len(TestString) / 2        'Convert 2-characters hex into ByteCRCindex = CRCHi Xor Val("&H" + Mid$(TestString, I * 2 - 1, 2))PP = TABHi(CRCindex): CRCHi = CRCLo Xor Val(PP)PP = TABLo(CRCindex): CRCLo = Val(PP)
Next IText1.Text = Right$(("0" + Hex$(CRCHi)), 2) + Right$(("0" + Hex$(CRCLo)), 2)
End Sub

一、对码表的处理

C语言可以定义时初始化数组,VB则需要另想办法。可以从网上考贝C的码表,比如下表:

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40

然后贴到VB里,用"&H 全部替换掉0x,再用 ", 全部替换掉 , 替换后的表是如下的样子。

TABHi() = Array( _
"&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", _
"&H40", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", _
"&H80", "&H41", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H00", "&HC1", "&H81", "&H40", "&H01", _
"&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H01", "&HC0", "&H80", "&H41", _
"&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H00", "&HC1", "&H81", _
"&H40", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H01", "&HC0", _
"&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H01", _
"&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", _
"&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", _
"&H40", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", _
"&H80", "&H41", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H00", "&HC1", "&H81", "&H40", "&H01", _
"&HC0", "&H80", "&H41", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", _
"&H00", "&HC1", "&H81", "&H40", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", _
"&H40", "&H01", "&HC0", "&H80", "&H41", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", _
"&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H01", _
"&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", "&H40", "&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", _
"&H00", "&HC1", "&H81", "&H40", "&H01", "&HC0", "&H80", "&H41", "&H01", "&HC0", "&H80", "&H41", "&H00", "&HC1", "&H81", _
"&H40")TABLo() = Array( _
"&H00", "&HC0", "&HC1", "&H01", "&HC3", "&H03", "&H02", "&HC2", "&HC6", "&H06", "&H07", "&HC7", "&H05", "&HC5", "&HC4", _
"&H04", "&HCC", "&H0C", "&H0D", "&HCD", "&H0F", "&HCF", "&HCE", "&H0E", "&H0A", "&HCA", "&HCB", "&H0B", "&HC9", "&H09", _
"&H08", "&HC8", "&HD8", "&H18", "&H19", "&HD9", "&H1B", "&HDB", "&HDA", "&H1A", "&H1E", "&HDE", "&HDF", "&H1F", "&HDD", _
"&H1D", "&H1C", "&HDC", "&H14", "&HD4", "&HD5", "&H15", "&HD7", "&H17", "&H16", "&HD6", "&HD2", "&H12", "&H13", "&HD3", _
"&H11", "&HD1", "&HD0", "&H10", "&HF0", "&H30", "&H31", "&HF1", "&H33", "&HF3", "&HF2", "&H32", "&H36", "&HF6", "&HF7", _
"&H37", "&HF5", "&H35", "&H34", "&HF4", "&H3C", "&HFC", "&HFD", "&H3D", "&HFF", "&H3F", "&H3E", "&HFE", "&HFA", "&H3A", _
"&H3B", "&HFB", "&H39", "&HF9", "&HF8", "&H38", "&H28", "&HE8", "&HE9", "&H29", "&HEB", "&H2B", "&H2A", "&HEA", "&HEE", _
"&H2E", "&H2F", "&HEF", "&H2D", "&HED", "&HEC", "&H2C", "&HE4", "&H24", "&H25", "&HE5", "&H27", "&HE7", "&HE6", "&H26", _
"&H22", "&HE2", "&HE3", "&H23", "&HE1", "&H21", "&H20", "&HE0", "&HA0", "&H60", "&H61", "&HA1", "&H63", "&HA3", "&HA2", _
"&H62", "&H66", "&HA6", "&HA7", "&H67", "&HA5", "&H65", "&H64", "&HA4", "&H6C", "&HAC", "&HAD", "&H6D", "&HAF", "&H6F", _
"&H6E", "&HAE", "&HAA", "&H6A", "&H6B", "&HAB", "&H69", "&HA9", "&HA8", "&H68", "&H78", "&HB8", "&HB9", "&H79", "&HBB", _
"&H7B", "&H7A", "&HBA", "&HBE", "&H7E", "&H7F", "&HBF", "&H7D", "&HBD", "&HBC", "&H7C", "&HB4", "&H74", "&H75", "&HB5", _
"&H77", "&HB7", "&HB6", "&H76", "&H72", "&HB2", "&HB3", "&H73", "&HB1", "&H71", "&H70", "&HB0", "&H50", "&H90", "&H91", _
"&H51", "&H93", "&H53", "&H52", "&H92", "&H96", "&H56", "&H57", "&H97", "&H55", "&H95", "&H94", "&H54", "&H9C", "&H5C", _
"&H5D", "&H9D", "&H5F", "&H9F", "&H9E", "&H5E", "&H5A", "&H9A", "&H9B", "&H5B", "&H99", "&H59", "&H58", "&H98", "&H88", _
"&H48", "&H49", "&H89", "&H4B", "&H8B", "&H8A", "&H4A", "&H4E", "&H8E", "&H8F", "&H4F", "&H8D", "&H4D", "&H4C", "&H8C", _
"&H44", "&H84", "&H85", "&H45", "&H87", "&H47", "&H46", "&H86", "&H82", "&H42", "&H43", "&H83", "&H41", "&H81", "&H80", _
"&H40")

然后就可以定义 Dim TABLo(), TABHi()

定义后面什么也不用写,写上as string之类的就不能初始赋值了。另外,想换行的话就空格后下划线,这表就很清楚地可用了。

二、对传输字符串的处理

传送的字符串是十六进制的,二个字符构成一个字节,所以在循环读解字符串时要除以2,变成可用于计算机的字节(如果直接定义 Byte 数组一次性装入函数中也是可以的)。

For I = 1 To Len(TestString) / 2        'Convert 2-characters hex into ByteCRCindex = CRCHi Xor Val("&H" + Mid$(TestString, I * 2 - 1, 2))PP = TABHi(CRCindex): CRCHi = CRCLo Xor Val(PP)PP = TABLo(CRCindex): CRCLo = Val(PP)
Next I

注意一下除以2 和形成表索引时的 I*2-1

除了查表法,下面是计算法,也涉及到字符串拆解,供参考。

Private Sub Command1_Click()
Dim TestString
TestString = "010303E80002"
Dim CRC16High As Byte, CRC16Low As Byte, CalCRC16Hi As Byte, CalCRC16Lo As Byte
Dim I As Integer, J As Byte, defCRC16Hi As Byte, defCRC16Lo As ByteCRC16Low = &HFF
CRC16High = &HFFdefCRC16Hi = &HA0: defCRC16Lo = &H1For I = 0 To Len(TestString) / 2 - 1CRC16Low = CRC16Low Xor (Val("&H" + Mid$(TestString, I * 2 + 1, 2)))For J = 0 To 7CalCRC16Hi = CRC16HighCalCRC16Lo = CRC16LowCRC16High = CRC16High \ 2CRC16Low = CRC16Low \ 2If ((CalCRC16Hi And &H1) = &H1) ThenCRC16Low = CRC16Low Or &H80End IfIf ((CalCRC16Lo And &H1) = &H1) ThenCRC16High = CRC16High Xor defCRC16HiCRC16Low = CRC16Low Xor defCRC16LoEnd IfNext JNext IText1.Text = Hex$(CRC16Low) + Hex$(CRC16High)
End Sub

CRC16是做Modbus RTU编解绕不过去的重要环节,也是做工控必须掌握的,因为太多工业仪表、PLC都用这协议,是不以个人意志为转移的。

VB6源码示例程序下载

https://download.csdn.net/download/weixin_45707491/88218529?spm=1001.2014.3001.5501

这篇关于VB6查表法编解Modbus RTU协议CRC16校验码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_45707491/article/details/132275367
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/160005

相关文章

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

校验码:奇偶校验,CRC循环冗余校验,海明校验码

文章目录 奇偶校验码CRC循环冗余校验码海明校验码 奇偶校验码 码距:任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数就称为数据检验码的码距。 奇偶校验码的编码方法是:由若干位有效信息(如一个字节),再加上一个二进制位(校验位)组成校验码。 奇校验:整个校验码中1的个数为奇数 偶校验:整个校验码中1的个数为偶数 奇偶校验,可检测1位(奇数位)的错误,不可纠错。

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有