Modbus通讯协议
- 格式:pdf
- 大小:163.66 KB
- 文档页数:8
Modbus通讯协议详解一、引言Modbus通讯协议是一种常用的串行通信协议,广泛应用于工业自动化领域。
本文将详细解析Modbus通讯协议的基本原理、数据格式、通信流程以及常见问题。
二、基本原理1. Modbus通讯协议采用主从结构,主要包括一个主站和多个从站。
主站负责发起通信请求,从站负责响应请求并返回数据。
2. Modbus通讯协议基于传统的串行通信方式,支持RS-232、RS-485等物理层接口。
3. Modbus通讯协议采用简单的请求/响应模式,主站发送请求帧,从站响应并返回数据帧。
三、数据格式1. Modbus通讯协议的数据单元被称为“寄存器”,分为输入寄存器(Input Register)、保持寄存器(Holding Register)、线圈(Coil)和离散输入(Discrete Input)四种类型。
2. 输入寄存器用于从站向主站传输只读数据,保持寄存器用于双向传输读写数据,线圈用于从站向主站传输开关量数据,离散输入用于主站向从站传输只读开关量数据。
3. Modbus通讯协议采用16位的数据单元标识符,用于标识寄存器的类型和地址。
4. 数据帧包括起始符、设备地址、功能码、数据区、错误校验等字段。
四、通信流程1. 主站向从站发送请求帧,请求帧包括设备地址、功能码、数据区等字段。
2. 从站接收到请求帧后,根据功能码执行相应的操作,并将结果存储在数据区中。
3. 从站发送响应帧,响应帧包括设备地址、功能码、数据区等字段。
4. 主站接收到响应帧后,解析数据区中的结果,并进行相应的处理。
五、常见问题1. Modbus通讯协议的数据传输是基于字节的,因此在不同字节序的系统中需要进行字节序转换。
2. Modbus通讯协议的速率、数据位、停止位和校验位等参数需要保持一致,否则通信将无法建立。
3. Modbus通讯协议的设备地址是唯一的,主站通过设备地址来区分不同的从站。
4. Modbus通讯协议的功能码定义了不同的操作类型,主站通过功能码来指定所需的操作。
modbus协议通讯协议协议名称:Modbus协议通讯协议一、引言Modbus协议是一种用于工业自动化领域的通讯协议,用于实现不同设备之间的数据交换和通讯。
本协议旨在规范Modbus协议的通讯规则和数据格式,以确保各设备在通讯过程中能够正确地交换数据。
二、定义1. Modbus主站:指发起通讯请求的设备,负责向从站发送指令并接收从站的响应。
2. Modbus从站:指响应主站通讯请求的设备,负责接收主站的指令并返回响应数据。
三、通讯方式Modbus协议支持多种通讯方式,包括串行通讯和以太网通讯。
具体通讯方式的选择应根据实际应用场景和设备的通讯接口来确定。
四、数据格式1. Modbus协议使用16位的寄存器来表示数据,寄存器地址从0开始计数。
2. Modbus协议支持多种数据类型,包括位(Coil)、输入位(Input Coil)、寄存器(Holding Register)和输入寄存器(Input Register)。
3. 数据的读取和写入通过读写功能码来实现,具体功能码的定义如下:- 读取位:功能码0x01- 读取输入位:功能码0x02- 读取寄存器:功能码0x03- 读取输入寄存器:功能码0x04- 写入位:功能码0x05- 写入寄存器:功能码0x064. 数据的读取和写入操作可以通过单个请求实现,也可以通过多个请求分批进行。
五、通讯流程1. 主站向从站发送请求,请求包括功能码、起始地址和数据长度等信息。
2. 从站接收到请求后,根据功能码进行相应的数据读取或写入操作。
3. 从站将读取到的数据或写入操作的结果返回给主站。
4. 主站接收到从站的响应后,根据需要进行下一步的操作。
六、通讯协议1. Modbus协议使用字节顺序为大端模式(Big-Endian)。
2. 通讯数据的传输顺序为先高字节后低字节。
3. 通讯数据的校验采用CRC校验算法,具体算法如下:- 初始化CRC寄存器为0xFFFF。
- 对每个字节进行如下操作:- 将字节与CRC寄存器的低8位进行异或运算。
Modbus通讯协议Modbus是一种常用的通讯协议,用于在工业自动化系统中传输数据。
它被广泛应用于监控、控制和数据采集等领域。
本文将介绍Modbus通讯协议的基本原理和应用。
Modbus通讯协议是一种主从式通讯协议,通常由一个主站和多个从站组成。
主站负责控制和管理通信过程,从站则负责传输和响应数据。
主站和从站之间通过串口、以太网或其他通讯方式进行数据的传输。
Modbus通讯协议基于简单高效的ASCII或RTU格式,可以在多种不同通讯介质上使用。
其中,ASCII格式使用7位或8位ASCII码传输数据,而RTU格式使用二进制码传输数据。
这两种格式都具有灵活性和可靠性,且易于实现和维护。
主站和从站之间的通讯过程通常分为寻址、请求和响应三个步骤。
首先,主站通过地址指定所需通讯的从站。
然后,主站发送请求命令给指定的从站。
从站接收到请求命令后,进行数据处理并返回响应给主站。
最后,主站接收到响应后进行相应的处理。
Modbus通讯协议支持多种数据类型,包括线圈、寄存器、输入线圈和输入寄存器。
线圈用于表示开关状态,寄存器用于存储数据。
这些数据类型可以通过Modbus协议进行读写操作,以满足数据采集和控制的需求。
Modbus通讯协议具有许多优点。
首先,它是一种开放的通讯协议,被广泛应用于不同的设备和系统中。
其次,Modbus通讯协议简单易用,具有较低的开发和维护成本。
另外,Modbus通讯协议支持大量并发连接,可以在多个从站之间同时传输数据。
Modbus通讯协议被广泛应用于工业自动化系统中。
例如,它可以用于工业控制器和人机界面之间的通讯,实现远程监控和控制。
此外,Modbus通讯协议也被用于能源管理系统、楼宇自动化系统和物流管理系统等领域。
尽管Modbus通讯协议在工业自动化领域具有许多优点,但也存在一些缺点。
例如,Modbus通讯协议的传输速率相对较低,无法满足高速数据传输的需求。
另外,Modbus通讯协议的安全性相对较低,容易受到恶意攻击。
Modbus通讯协议详解一、概述Modbus通讯协议是一种用于工业自动化领域的通讯协议,它允许不同的设备之间进行数据交换。
本文将详细介绍Modbus通讯协议的基本原理、通讯方式、数据帧格式以及常用功能码等内容。
二、基本原理Modbus通讯协议采用主从结构,其中主机负责发起通讯请求,从机负责响应请求并返回数据。
通讯过程中,主机通过发送请求帧来读取或写入从机的数据。
从机收到请求后进行相应的处理,并将结果返回给主机。
三、通讯方式Modbus通讯协议支持串行通讯和以太网通讯两种方式。
1. 串行通讯串行通讯采用RS-232或RS-485等物理层接口,通讯速率可根据实际需求进行设置。
在串行通讯中,主机通过发送特定的数据帧来与从机进行通讯。
2. 以太网通讯以太网通讯采用TCP/IP协议栈,通讯速率较高。
主机通过发送TCP报文与从机进行通讯,其中Modbus协议位于应用层。
四、数据帧格式Modbus通讯协议中的数据帧由起始符、地址、功能码、数据、校验等字段组成。
1. 起始符起始符用于标识数据帧的开始,通常为一个字节的0xFF。
2. 地址地址字段用于指定从机的地址,主机通过地址来选择与哪个从机进行通讯。
地址长度为一个字节,取值范围为1-247。
3. 功能码功能码用于指定通讯请求的类型,不同的功能码对应不同的操作。
常用的功能码包括读取线圈状态、读取输入状态、读取保持寄存器、写单个寄存器等。
4. 数据数据字段用于存储通讯请求或响应的数据。
数据的长度和格式取决于具体的功能码和操作类型。
5. 校验校验字段用于检测数据的完整性,常用的校验算法包括CRC校验和LRC校验。
五、常用功能码Modbus通讯协议定义了一系列功能码,用于实现不同的通讯操作。
1. 读取线圈状态(功能码:0x01)该功能码用于读取从机中的线圈状态,线圈状态为开(1)或闭(0)。
2. 读取输入状态(功能码:0x02)该功能码用于读取从机中的输入状态,输入状态为开(1)或闭(0)。
Modbus通讯协议详解协议名称:Modbus通讯协议详解一、引言Modbus通讯协议是一种常用的工业自动化通讯协议,广泛应用于工业控制系统中。
本协议详解将介绍Modbus通讯协议的基本原理、通讯方式、数据帧格式以及常见应用场景等内容,旨在帮助读者全面理解和掌握该协议。
二、Modbus通讯协议概述Modbus通讯协议是一种基于主从架构的串行通讯协议,用于实现设备间的数据交换。
该协议支持多种物理层接口,如串口、以太网等,可实现不同设备之间的通讯。
三、通讯方式Modbus通讯协议主要有两种通讯方式:RTU和ASCII。
RTU方式使用二进制编码进行数据传输,具有较高的传输效率;ASCII方式使用ASCII码进行数据传输,具有较好的可读性。
根据实际需求,可以选择合适的通讯方式。
四、数据帧格式Modbus通讯协议的数据帧格式如下:1. RTU方式:- 起始位:1个起始位,用于标识数据帧的开始。
- 设备地址:1个字节,用于标识通讯的设备。
- 功能码:1个字节,用于标识通讯的功能。
- 数据域:N个字节,用于传输数据。
- CRC校验:2个字节,用于校验数据的完整性。
- 结束位:1个结束位,用于标识数据帧的结束。
2. ASCII方式:- 起始符:1个起始符“:”,用于标识数据帧的开始。
- 设备地址:2个字符,用于标识通讯的设备。
- 功能码:2个字符,用于标识通讯的功能。
- 数据域:N个字符,用于传输数据。
- LRC校验:2个字符,用于校验数据的完整性。
- 结束符:2个字符“\r\n”,用于标识数据帧的结束。
五、常见应用场景Modbus通讯协议广泛应用于工业控制系统中,常见的应用场景包括:1. 监控系统:通过Modbus通讯协议,实现对工业设备的数据监控和远程控制,提高生产效率和安全性。
2. 仪器仪表:将仪器仪表与上位机进行通讯,实现数据的采集和分析,为生产决策提供依据。
3. 自动化控制:通过Modbus通讯协议,实现对生产线的自动化控制,提高生产效率和质量。
Modbus通讯协议详解一、引言Modbus通讯协议是一种常用于工业控制系统中的通信协议,它基于主从结构,用于实现不同设备之间的数据交换。
本文将详细介绍Modbus通讯协议的基本原理、通信方式、数据格式以及常见应用场景。
二、协议原理Modbus通讯协议是基于串行通信的协议,它使用简单的请求/响应模式进行数据交换。
协议包括两种通信方式:Modbus ASCII和Modbus RTU。
Modbus ASCII使用ASCII码表示数据,而Modbus RTU使用二进制码表示数据。
协议规定了数据的传输格式、通信命令、错误检测等。
三、通信方式1. Modbus ASCII通信方式Modbus ASCII通信方式使用ASCII码表示数据,每个字节使用两个ASCII字符表示,其中包括一个校验和。
通信过程中,主站发送请求命令,从站接收并处理请求,然后从站发送响应。
请求和响应之间使用回车换行符进行分隔。
2. Modbus RTU通信方式Modbus RTU通信方式使用二进制码表示数据,每个字节使用8位二进制表示。
通信过程中,主站发送请求命令,从站接收并处理请求,然后从站发送响应。
请求和响应之间使用帧间隔进行分隔。
四、数据格式1. Modbus ASCII数据格式Modbus ASCII数据格式由起始字符、从站地址、功能码、数据区、校验和和结束字符组成。
起始字符是冒号,结束字符是回车换行符。
校验和是通过对除起始字符和校验和本身外的所有字符进行异或运算得到的。
2. Modbus RTU数据格式Modbus RTU数据格式由从站地址、功能码、数据区、CRC校验和组成。
CRC校验和是通过对从站地址、功能码和数据区的所有字节进行CRC校验运算得到的。
五、常见应用场景Modbus通讯协议广泛应用于工业自动化领域,常见的应用场景包括:1. 监控系统:通过Modbus通讯协议,可以实现对各种传感器、仪表的数据采集和监控。
2. 控制系统:Modbus通讯协议可用于实现对各种执行器、控制器的控制和调节。
Modbus通讯协议一、什么是Modbus?Modbus是一种常用的通信协议,用于与PLC、仪表等工业设备进行数据通信。
它最初由Modicon(现在是施耐德电气的一部分)于1979年开发,用于连接PLC和其他可编程逻辑控制器。
该协议基于简单的客户机/服务器架构,可用于Ethernet、RS-232以及其他通信介质。
Modbus协议具有简单、灵活、开放且易于实现的特点。
它广泛应用于各种设备之间的通信,包括控制器、传感器、计量仪表、数据采集器等。
Modbus还被广泛应用于智能家居、自动化控制系统以及工业自动化领域,成为设备之间通信的标准。
二、Modbus通信协议的架构Modbus协议的通信架构大致可以分为三层:物理层、数据链路层和应用层。
1、物理层:控制不同设备之间的数据传输,包括物理连接方式、传输率、编码格式等参数。
2、数据链路层:主要负责数据的完整性检查,包括错误校验等。
3、应用层:最上层的协议层,也是最为重要的部分。
其中包含了各种不同的命令,用于设备之间的通信。
Modbus协议支持不同的物理连接方式和通信协议,包括RS-232、RS-485、以太网等。
此外,Modbus还支持多种数据格式,包括二进制、ASCII和RTU等。
三、Modbus通信协议的主从模式在Modbus协议中,设备可以分为两种类型:主设备(Master)和从设备(Slave)。
主设备负责发起请求并接收响应,而从设备则负责响应请求并返回数据。
在主从模式下,每个从设备都会分配一个唯一的地址。
主设备使用从设备的地址进行通信。
主从模式通讯过程如下:1、主设备发送一条特定的Modbus帧,包含了要读取或写入的寄存器地址,及操作码等信息。
2、从设备收到Modbus帧后,根据地址和操作码进行相应的操作,并生成响应帧。
3、响应帧包含了读取或写入操作的结果,主设备接收响应帧并解析其中的数据。
4、系统将以前获取的数据发送给主设备。
四、Modbus协议的寄存器类型Modbus协议有许多不同类型的寄存器,包括输入寄存器(Input Register)、保持寄存器(Holding Register)、线圈寄存器(Coil Register)和离散输入寄存器(Discrete Input Register)等。
modbus通讯协议格式详解Modbus是一种常用的通信协议,用于在工业自动化系统中不同设备之间进行通信。
下面是Modbus通信协议的详解。
1. Modbus协议类型:- Modbus ASCII:使用ASCII字符进行数据传输,每个字节使用两个ASCII字符表示。
- Modbus RTU:使用二进制编码进行数据传输,每个字节使用8个二进制位表示。
2. Modbus通信格式:- 帧起始符:通常为冒号(ASCII字符)或启动位(RTU模式)。
- 地址字段:定义要与之通信的设备地址。
- 功能码:指示所需执行的操作类型。
- 数据域:包含要传输或接收的数据。
- 校验和:用于验证帧数据的完整性,通常是通过计算和比较CRC校验值或校验和字节来实现的。
3. Modbus功能码:- 读取数据:用于读取设备的状态或数据。
- 功能码0x01(读取线圈状态):用于读取数字输出或线圈的状态。
- 功能码0x02(读取输入状态):用于读取数字输入或线圈的状态。
- 功能码0x03(读取保持寄存器):用于读取设备的保持寄存器的值。
- 功能码0x04(读取输入寄存器):用于读取设备的输入寄存器的值。
- 写入数据:用于写入设备的状态或数据。
- 功能码0x05(写单个线圈):用于写入单个数字输出或线圈的状态。
- 功能码0x06(写单个寄存器):用于写入单个保持寄存器的值。
- 功能码0x0F(写多个线圈):用于写入多个数字输出或线圈的状态。
- 功能码0x10(写多个寄存器):用于写入多个保持寄存器的值。
4. Modbus数据格式:- 线圈状态:用于表示开关状态的数据,以位为单位(0表示关,1表示开)。
- 输入状态:用于表示输入设备状态的数据,以位为单位。
- 保持寄存器:用于存储设备状态或数据的数据,以字为单位。
- 输入寄存器:用于存储输入设备状态或数据的数据,以字为单位。
总结:Modbus通信协议定义了一套通用的格式,用于在工业自动化系统中进行设备之间的通信。
Modbus通讯协议详解一、介绍Modbus通讯协议是一种常用的工业通讯协议,用于在自动化系统中实现设备之间的数据传输和通信。
本文将详细介绍Modbus通讯协议的基本原理、通信方式、数据格式及其应用场景。
二、基本原理Modbus通讯协议基于主从结构,由一个主站和多个从站组成。
主站负责发起通信请求,而从站则负责响应请求并提供所需的数据。
通信过程中,主站通过读写寄存器的方式与从站进行数据交换。
三、通信方式Modbus通讯协议支持两种常用的通信方式:串行通信和以太网通信。
1. 串行通信串行通信使用RS-232或RS-485等物理层接口,通过串口进行数据传输。
串行通信具有成本低、传输距离短、抗干扰性强等特点,适用于小规模的通信系统。
2. 以太网通信以太网通信使用TCP/IP协议栈,通过以太网进行数据传输。
以太网通信具有传输速度快、传输距离远、支持大规模网络等优点,适用于大规模的工业自动化系统。
四、数据格式Modbus通讯协议定义了几种常用的数据格式,包括离散输入寄存器、线圈、输入寄存器和保持寄存器。
1. 离散输入寄存器(Discrete Inputs)离散输入寄存器用于存储只读的离散输入信号,例如开关状态、传感器信号等。
2. 线圈(Coils)线圈用于存储读写的开关量信号,例如控制继电器、电机等的状态。
3. 输入寄存器(Input Registers)输入寄存器用于存储只读的模拟量信号,例如温度、压力等传感器的数据。
4. 保持寄存器(Holding Registers)保持寄存器用于存储读写的模拟量信号,例如设定温度、设定速度等参数。
五、应用场景Modbus通讯协议广泛应用于工业自动化领域,常见的应用场景包括:1. 监控系统Modbus通讯协议可用于监控系统中,实现对各种设备的数据采集和监控。
例如,通过读取温度传感器的数据,实时监测温度变化。
2. 控制系统Modbus通讯协议可用于控制系统中,实现对各种设备的控制和调节。
modbus通讯协议协议名称:Modbus通讯协议1. 引言Modbus通讯协议是一种用于工业自动化领域的通信协议,常用于连接不同厂商的设备,实现设备之间的数据交换和控制操作。
本协议旨在规范Modbus通信的数据格式、传输方式和通信规则,以确保设备之间的互操作性和数据的准确传输。
2. 范围本协议适用于Modbus通信协议的各个版本,包括Modbus RTU、Modbus ASCII和Modbus TCP/IP等。
同时,本协议还适用于Modbus通信协议的各种设备类型,包括主站(Master)和从站(Slave)。
3. 术语和定义在本协议中,以下术语和定义适用:- 主站(Master):发起Modbus通信请求的设备。
- 从站(Slave):响应主站请求的设备。
- 寄存器(Register):存储设备中的数据的内存单元。
- 线圈(Coil):控制设备中的开关状态的内存单元。
- 功能码(Function Code):用于标识Modbus通信请求的操作类型。
4. 数据格式4.1 Modbus RTUModbus RTU使用二进制编码,数据帧包括起始位、设备地址、功能码、数据域、校验位和停止位。
具体格式如下:- 起始位:一个起始位,用于标识数据帧的开始。
- 设备地址:一个字节,用于标识主站要发送请求的从站地址。
- 功能码:一个字节,用于标识主站请求的操作类型。
- 数据域:根据功能码的不同,数据域的长度可变。
- 校验位:两个字节,用于校验数据域的正确性。
- 停止位:一个停止位,用于标识数据帧的结束。
4.2 Modbus ASCIIModbus ASCII使用ASCII编码,数据帧包括起始符、设备地址、功能码、数据域、LRC校验和和结束符。
具体格式如下:- 起始符:一个冒号(:),用于标识数据帧的开始。
- 设备地址:两个ASCII字符,用于标识主站要发送请求的从站地址。
- 功能码:两个ASCII字符,用于标识主站请求的操作类型。
Modbus 协议简介 Modbus 协议是应用于电子控制器上的一种通用语言。
通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。
它已经成为一通用工业标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成反馈信息并用Modbus协议发出。
在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。
这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
在Modbus网络上转输标准的Modbus口是使用一RS-232兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。
控制器能直接或经由Modem组网。
控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(查询)。
其它设备(从设备)根据主设备查询提供的数据作出相应反应。
典型的主设备:主机和可编程仪表。
典型的从设备:可编程控制器。
主设备可单独和从设备通信,也能以广播方式和所有从设备通信。
如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。
Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。
从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。
如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。
在其它类型网络上转输 在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。
这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。
提供的多个内部通道可允许同时发生的传输进程。
在消息位,Modbus协议仍提供了主—从原则,尽管网络通信方法是“对等”。
如果一控制器发送一消息,它只是作为主设备,并期望从从设备得到回应。
同样,当控制器接收到一消息,它将建立一从设备回应格式并返回给发送的控制器。
查询—回应周期 (1)查询 查询消息中的功能代码告之被选中的从设备要执行何种功能。
数据段包含了从设备要执行功能的任何附加信息。
例如功能代码03是要求从设备读保持寄存器并返回它们的内容。
数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。
错误检测域为从设备提供了一种验证消息内容是否正确的方法。
(2)回应如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。
数据段包括了从设备收集的数据:象寄存器值或状态。
如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。
错误检测域允许主设备确认消息内容是否可用。
两种传输方式 控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。
用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。
所选的ASCII或RTU方式仅适用于标准的Modbus网络,它定义了在这些网络上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。
在其它网络上(象MAP和Modbus Plus)Modbus消息被转成与串行传输无关的帧。
1、ASCII模式 当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送。
这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。
代码系统 · 十六进制,ASCII字符0...9,A...F · 消息中的每个ASCII字符都是一个十六进制字符组成 每个字节的位 · 1个起始位 · 7个数据位,最小的有效位先发送 · 1个奇偶校验位,无校验则无 CRC域是两个字节,包含一16位的二进制值。
它由传输设备计算后加入到消息中。
接收设备重新计算收到消息的CRC,并与接收到的CRC 域中的值比较,如果两值不同,则有误。
CRC是先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。
仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。
CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。
LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。
整个过程要重复8次。
在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。
最终寄存器中的值,是消息中所有的字节都执行之后的CRC值。
CRC添加到消息中时,低字节先加入,然后高字节。
CRC简单函数如下:unsigned short CRC16(puchMsg, usDataLen)unsigned char *puchMsg ; /* 要进行CRC校验的消息 */unsigned short usDataLen ; /* 消息中字节数 */{unsigned char uchCRCHi = 0xFF ; /* 高CRC字节初始化 */unsigned char uchCRCLo = 0xFF ; /* 低CRC 字节初始化 */ unsigned uIndex ; /* CRC循环中的索引 */while (usDataLen--) /* 传输消息缓冲区*/{uIndex = uchCRCHi ^ *puchMsgg++ ; /* 计算CRC */uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex} ;uchCRCLo = auchCRCLo[uIndex] ;}return (uchCRCHi << 8 uchCRCLo) ;}/* CRC 高位字节值表 */static unsigned char auchCRCHi[] = {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};/* CRC低位字节值表*/static char auchCRCLo[] = {0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40}; ModBus网络是一个工业通信系统,由带智能终端的可编程控制器和计算机通过公用线路或局部专用线路连接而成。