Modbus、ASCII、串口、Baud rate等常用术语解释

freefree技术Resources

这篇内容可直接阅读,适合用于基础学习和Search引流。

Modbus、ASCII、串口、Baud rate等常用术语解释缩略图
🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.

01 术语解读

校验码:校验码是由前面的data通过某种算法得出的,用以检验该组data的正确性。代码作为data在向计算机或其它设备进行输入时,容易产生输入Error,为了减少这种输入Error,Coding专家发明了各种校验检错方法,并依据这些方法设置了校验码。

常用的校验有:累加和校验SUM、byteXOR checkXOR、纵向冗余校验LRC、循环冗余校验CRC……

离散量输入:主要用来读取单个位的data,如IO的状态;

线圈:switch输出信号,主要用来写入单个位的data,与离散量构成组成对位的Operation;

输入register:主要用来读取16位,也就是两个byte的data;

保持register:主要用来写入16位的data。

PLC:可编程逻辑控制器,是一种采用一类可编程的存储器,用于其内部存储程序,执行逻辑运算、顺序控制、定时、计数与算术Operation等面向用户的指令,并通过数字或模拟式输入/输出控制各种Type的机械或生产过程。

串口通信:随着计算机system的应用和微机网络的发展,通信Function越来越显得重要.这里所说的通信是指计算机与外界的信息交换.因此,通信既包括计算机与外部设备之间,也包括计算机和计算机之间的信息交换.由于串行通信是在一根传输线上一位一位的传送信息,所用的传输线少,并且可以借助现成的电话网进行信息传送,因此,特别适合于远距离传输.对于那些与计算机相距不远的人-机交换设备和串行存储的外部设备如终端、打印机、逻辑分析仪、磁盘等,采用串行方式交换data也很普遍.在实时控制和管理方面,采用多台微机处理机组成分级分布控制system中,各 CPU 之间的通信一般都是串行方式.所以串行接口是微机应用system常用的接口。许多外设和计算机按串行方式进行通信,这里所说的串行方式,是指外设与接口电路之间的信息传送方式,实际上,CPU 与接口之间仍按并行方式工作.

串口:串口是计算机上一种非常通用设备通信的协议,不要与通用串行总线Universal Serial Bus(USB)混淆。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容equipment也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的data。

串口通信的概念非常简单,串口按位(bit)send和Receive bytes。尽管比按byte(byte)的并行通信慢,但是串口可以在使用一根线senddata的同时用另一根线receivedata。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两A device间的Length不得超过2米;而对于串口而言,Length可达1200米。

典型地,串口用于ASCII码字符的传输。通信使用3根线Complete:(1)地线,(2)send,(3)receive。由于串口通信是异步的,端口能够在一根线上senddata同时在另一根线上receivedata。其他线用于握手,但是不是必须的。串口通信最重要的参数是Baud rate、data bit、stop bit和奇even parity。对于两个进行通行的端口,这些参数必须匹配:

a. Baud rate:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟send300个bit。当我们提到时钟周期时,我们就是指Baud rate。例如如果协议需要4800Baud rate,那么时钟是4800Hz。这意味着串口通信在data线上的采样率为4800Hz。通常电话线的Baud rate为14400,28800和36600。Baud rate可以远远大于这些值,但是Baud rate和距离成反比。高Baud rate常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。

b. data bit:这是衡量通信中实际data bit的参数。当计算机send一个信息包,实际的data不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果data使用简单的Text(标准 ASCII码),那么每个data包使用7位data。每个包是指一个byte,包括开始/stop bit,data bit和奇偶check digit。由于实际data bit取决于通信协议的选取,术语“包”指任何通信的情况。

c. stop bit:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于data是在传输线上定时的,并且每一A device有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此stop bit不仅仅是表示传输的End,并且提供计算机校正时钟同步的机会。适用于stop bit的位数越多,不同时钟同步的容忍程度越大,但是data传输率同时也越慢。

d. 奇偶check digit:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有check digit也是可以的。对于偶和odd parity的情况,串口会设置check digit(data bit后面的一位),用一个值确保传输的data有偶个或者奇个逻辑高位。例如,如果data是011,那么对于even parity,check digit为0,保证逻辑高的位数是偶数个。如果是odd parity,check digit位1,这样就有3个逻辑高位。高位和低位不真正的检查data,简单置位逻辑高或者逻辑低校验。这样使得receive设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和receivedata是否不同步。

02 背景

早在1971年,Modicon公司首次推出了Modbus协议,ModbusRTU和Modbus ASCII诞生于此。后来施耐德电气(SchneiderElectric)收购了Modicon公司,并在1997年推出了ModbusTCP协议。2004年,中国国家标准委员会正式把Modbus作为了国家标准,Open了Modbus为中国工业通信做贡献的时代。

通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信。Modbus协议具有标准、开放,可以支持多种电气接口,data帧format简单紧凑,data传输量大、实时性好等特点,在工业控制system中得到了广泛的应用,已经成为通用工业标准。深入分析Modbus协议实现原理和其安全性对提高工控system安全性有着重要的现实意义。ModbusRTU和ModbusASCII主要用于串行通信领域,而ModbusTCP则常用于以太网通信。现在,Modbus已经成为工业领域通信protocol standard,并且现在是工业电子设备之间相当常用的connect方式。

03 协议原理

Modbus使用一种简单的MasterandSlave主从协议(客户机/服务器协议)进行通信。客户机作为主站,向服务器sendRequest;服务器(从站)接到Request后,对Request进行分析并作出应答。其中使用的通信帧被称为应用data单元(Application Data Unit,ADU),它包括通信address段、Function代码段、data段和校验段,如下图:

一般使用上,监控system(HMI)都为Master,PLC、电表、仪表等都为Slave,HMIsystem一直PollingSlave的各种relayandregister最新numerical value,然后做显示及各种逻辑计算及控制调整等处理。

其中,Function代码段和data段组合称为协议data单元(Protocol Data Unit or Protocol Description Unit),PDU)。Function代码段占用一个byte,取值范围为1~255,其中128~255为保留值,用于异常消息应答message。1~127为Function代码编号,其中65~72和100~110为用户CustomizationCoding。

04 传输方式

Modbus protocol是一种应用层message传输协议,包括ASCII、RTU、TCP三种message type,协议本身并没有定义物理层,只是定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。

Modbus protocol使用串口传输时可以选择RTU或ASCII模式,并规定了消息、data结构、命令和应答方式并需要对data进行校验。ASCII 模式采用LRC校验,RTU模式采用16 位CRC校验。通过以太网传输时使用TCP,这种模式不使用校验,因为TCP协议是一个面向connect的可靠协议。

05 Modbus RTU与Modbus ASCII有什么区别

Modbus是一种application layer protocol,它定义了与基础网络无关的data单元(ADU),可以在以太网(TCP/IP)或串行链路上(RS232、RS485等)进行通信(以太网ADU和串行ADU略有不同)。在串行链路上,Modbus协议有两种传输模式——ASCII模式和RTU模式。其中,ASCII是英文“American Standard Code for Information Interchange”的缩写,中文翻译为“美国国家信息交换标准Coding”;RTU是英文“ Remote Terminal Unit”的缩写,中文翻译为“远程终端设备”。

首先,让我们来看看Modbus的工作原理。

Modbus采用主从(Master-Salve)通信模式,仅有主设备(Master)能对传输进行初始化,从设备(Slave)根据主设备的Request进行应答。典型的主设备包括现场仪表和显示面板,典型的从设备为可编程逻辑控制器(PLC)。

在串行链路的主从通信中,Modbus主设备可以connect一个或N(最大为247)个从设备,主从设备之间的通信包括单播模式和广播模式。

在广播模式中,Modbus主设备可同时向多个从设备sendRequest(Device address0用于广播模式),从设备对广播Request不进行Response。

在单播模式中,主设备sendRequest至某个特定的从设备(每个Modbus从设备具有唯一address),Request的消息帧中会包含Function代码和data,比如Function代码“01”用来读取离散量线圈的状态。从设备接到Request后,进行应答并把消息反馈主设备。

Modbus、ASCII、串口、Baud rate等常用术语解释插图

在主从设备的通信中,可以使用ASCII模式或者RTU模式。

在ASCII(AmericanStandard Code for Information Interchange)传输模式下,消息帧以英文冒号(“:”,ASCII3A Hex)开始,以回车和换号(CRLF,ASCII 0D and 0A Hex)符号End,允许的传输的字符集为hexadecimal的0~9和A~F;网络中的从设备监视传输通路上是否有英文冒号(“:”),如果有的话,就对消息帧进行解码,View消息中的address是否与自己的address相同,如果相同的话,就receive其中的data;如果不同的话,则不予理会。

在ASCII模式下,每个8位的byte被拆分成两个ASCII字符进行send,比如hexadecimal数0xAF ,会被分解成ASCII字符“A”和“F”进行send,send的字符量比RTU增加一倍。ASCII模式的好处是允许两个字符之间间隔的time长达1s而不引发通信故障,该模式采用纵向冗余校验(Longitudinal Redundancy Check ,LRC)) 的方法来检验Error,

当控制器设为在Modbus 网络上以RTU 模式通信,消息中的每个8Bit byte都包含两个4 Bit 的hexadecimal字符,这种模式没有开始和End标记。其优点是: 在同样的Baud rate下,可比传送More的data。

在RTU(RemoteTerminal Unit)模式下,每个byte可以传输两个hexadecimal字符,比如hexadecimal数0xAF,直接以hexadecimal0xAF(binary:10101111)进行send,因此它的send密度比ASCII模式高一倍;RTU模式采用循环冗余校验(CRC),下面是对RTU模式的总结:

具体format如图 所示。

06 Modbus TCP及其注意点

6.1 主机和从机、服务端和客户端

【在modbus协议中】

主机sendmodbusRequest,从机根据Request内容向主机返回Response。在modbus协议中,主机总是主动方,从机总是被动方。

【在网络应用中】

在网络应用中existence客户端和服务器端,客户端(例如浏览器)sendRequest到服务器,服务器向客户端返回内容(例如HTMLText)。

【在modbus tcp中】

主机是客户端,而从机是服务器端。千万不要以为服务器端重要,主机也重要,所以主机就是服务器端。

6.2 是否可以多主机

    通过前面的分析,主机为客户端那么modbustcp支持多个主机,在一个   局域网中可existence多个主机和多个从机。从机的connect能力(connect主机的数   量)由uIP的最大TCPconnect个数决定。

6.3 modbus TCP协议简述

modbus TCP和modbus RTU基本相同,但是也existence一些区别

a.从机address变得不再重要,多数情况下忽略。从某种意义上说从机address被IPaddress取代

b.CRC check变得不再重要,甚至可以忽略。由于TCPdata包中已经existence校验,为了不重复造轮子,modbus TCP干脆Cancel了CRC check。

TCP 模式是为了让Modbus data顺利在以太网上传输产生的,使用TCP502 端口。该协议物理层,data链路层,网络层,传输层都是基于TCP 协议,只在应用层,将Modbus protocol修改后封装进去; receive端将该TCP data包拆封后,重新获得原始Modbus 帧,然后按照Modbus protocol specification进行Parse,并将返回的data包重新封装进TCP 协议中,返回到send端。与串行链路传输的data format不同,TCP 模式去除了附加address和校验,增加了message头,其具体format如图4所示。

Modbus、ASCII、串口、Baud rate等常用术语解释插图1

在modbus TCP中包含一个MBAP Head,该头包含以下几个部分

【注意】

【1】传输标志可理解为Sequence号,防止 MODBUS TCP通信错位,例如后发生的Response先到了主机,而早发生的Response后到主机

【2】单元标志可理解为从机address,此时已经不再重要

6.4 modbus tcp 和 TCP IP的关系

modbus TCP可以理解为发生在TCP上的application layer protocol,既然是TCP协议那么一个完整的MODBUSTCPmessage必然包括TCP首部,IP首部和Ethernet首部。

07 function code作用

启动Modbus事务处理的客户机创建Modbus应用data单元。function code(PDU中的)向服务器指示将执行哪种Operation。

用一个byteCodingModbusdata单元的function code域。effective范围是十制制1-255(128-255为Exception Response保留)。当从客户机向服务器sendmessage时,function code域通过服务器执行哪种Operation。

从客户机向服务器send的messagedata域包括附加信息,服务器使用这个信息执行function code定义的Operation。这个域还包括离散项目和register address、处理项目的quantity以及域中的实际databyte count。

在某种Request中,data域可以是does not exist的,在此情况下服务器不需要任何附加信息。function code仅说明Operation。

function code的Type

function code主要分为effectivefunction code、异常function code和Errorfunction code。

如果在一个正确receiveModbus ADU中,不出现与RequestModbusFunction有关的差错,那么服务器至客户机的Responsedata会包含Request中的正常function code。如果出现与RequestModbusFunction有关的差错,那么Responsedata会包含一个Exception Code和Error码。

例如,客户机能够读一组离散量输出或输入的开/关状态,或者用户能够读/写一组register data内容。当服务器对客户机Response时,它使用function code域来指示正常(无差错)Response或出现某种差错(称为Exception Response)。对于一个正常Response来说,服务器仅对原始function codeResponse,如下图:

对于Exception Response,服务器返回一个与客户机等同的码,设置该原始function code的最高effective位为逻辑1,并加该Exception Code后增加Error码,以通知客户机异常原因。如下图:

effectivefunction code

effectivefunction code有二十几种,但是一般使用上都以1、2、3、4、5、6、15、16等八种最为常用,以及另外特殊使用的20、21两种,此为General Reference Register,绝大部份的Modbus设备并不会提供此Register。于PLC上主要的控制data有下列四种型式。此八种function code就是处理这些控制Resources,详细说明如下各点:

控制data四种型式:

DI:DigitalInput(数字输入,离散输入),一个address一个data bit,用户只能读取它的状态,不能修改。以一个 bit表示 On/Off,用来记录控制信号的状态输入,例如:switch,接触点,马达运转,超限switch…等等。于PLC上被称为Input relay、input coil等。

DO:DigitalOutput(数字输出,线圈输出),一个address一个data bit,用户可以置位、复位,可以回读状态。以一个 bit表示 On/Off,用来输出控制信号,以激活或停止马达,警铃,灯光…等等。于PLC上被称为Output relay、Output coil等。

AI:Analog Input(模拟输入,输入register),一个address16位data,用户只能读,不能修改,,以16 bits integer表示一个numerical value,用来记录控制信号的numerical value输入,例如:temperature、流量、料量、速度、转速、文件板开度、液位、重量…等等。于PLC上被称为Input register。

AO:AnalogOutput(模拟输出,保持register),一个address16位data,用户可以写,也可以回读,以16 bits integer表示一个numerical value,用来输出控制信号的numerical value,例如:temperature、流量、速度、转速、文件板开度、饲料量…等等设定值。于PLC上被称为Output register、Holding register。

Modbus、ASCII、串口、Baud rate等常用术语解释插图2

08 Modbus协议安全分析

Modbus protocol是典型的工控网协议,研究其安全性对于加强工业控制网络的安全性有重要意义。一般来说,协议安全性问题可以分为两种,一种是协议自身的设计和描述引起的安全问题; 另一种是协议的不正确实现引起的安全问题。Modbus protocol也existence着

这两方面的问题。

8.1Modbus protocol的固有问题

绝大多数工控协议在设计之初,仅仅考虑了Function实现、提高效率、提高可靠性等方面,而没考虑过安全性问题。Modbus protocol也不例外,尽管其已经成为事实上的工业标准。从前面原理分析可以看出其本身的安全性问题是: 缺乏认证、授权、加密等安全防护机制和function code滥用问题。

( 1) 缺乏认证

认证的目的是保证收到的信息来自合法的用户,未认证用户向设备send控制命令不会被执行。在Modbus protocol通信过程中,没有任何认证方面的Related定义,攻击者只需要找到一个合法的address就可以使用function code就能建立一个Modbus 通信会话,从而扰乱整个或者部分控制过程。

( 2) 缺乏授权

授权是保证不同的特权Operation需要由拥有不同权限的认证用户来Complete,这样可大大降低误Operation与内部攻击的概率。目前,Modbus protocol没有基于角色的访问控制机制,也没有对用户Category,没有对用户的权限进行划分,这会导致任意用户可以执行任意Function。

( 3) 缺乏加密

加密可以保证通信过程中双方的信息不被第三方非法获取。Modbus protocol通信过程中,address和命令All采用明文传输,因此data可以很容易的被攻击者

捕获和Parse,为攻击者提供便利。

( 4) function code滥用

function code是Modbus protocol中的一项重要内容,几乎所有的通信都包含function code。目前,function code滥用是导致Modbus 网络异常的一个主要因素。例如不合法messageLength,短周期的无用命令,不正确的messageLength,Confirm异常代码延迟等都有可能导致拒绝服务攻击。

8.2协议实现产生的问题

虽然Modbus protocol获得了广泛的应用,但是在实现具体的工业控制system时,developer并不具备安全知识或者没有意识到安全问题。这样就导致了使用Modbus protocol的system中可能existence各种各样的安全漏洞。

( 1) 设计安全问题

Modbus systemdeveloper重点关注的是其Function实现问题,安全问题在设计时很少被注意到。设计安全是指设计时充分考虑安全性,解决Modbus system可能出现的各种异常和非法Operation等问题。比如在通信过程中,某个节点被恶意控制后发出非法data,就需要考虑这些data的判别和处理问题。

( 2) 缓冲区溢出漏洞

缓冲区溢出是指在向缓冲区内填充data时超过了缓冲区本身的容量导致溢出的data覆盖在合法data上,这是在软件开发中最常见也是非常危险的漏洞,可以导致system崩溃,或者被攻击者利用来控制system。Modbus systemdeveloper大多不具备安fully open发知识,这样就会产生很多的缓冲区溢出漏洞,一旦被恶意者利用会导致严重的后果。

( 3) Modbus TCP 安全问题

目前,Modbus protocol已经可以在通用计算机和通用Operationsystem上实现,运行于TCP /IP 之上以满足发展需要。这样,TCP /IP 协议自身existence的安全问题不可避免地会影响到工控网络安全。非法网络data获取,中间人,拒绝服务, IP 欺骗,病毒木马等在IP 互联网中的常用攻击手段都会影响Modbus system安全。

8.3安全建议

目前,Modbus system采取的安全防护措施普遍不足,这里参考信息安全业内研究并结合工控system自身的安全问题,提出了一些安全建议,能够effective地降低工业控制system面临的威胁。

( 1) 从源头开始

工控网络漏洞,很大一部分是其实现过程出现的漏洞。如果从源头开始控制,从Modbus system的需求设计、开发实现、内部测试和部署等阶段,全生命周期的介入安全手段,融入安全设计、安全Coding以及安全测试等技术,可以极大地消除安全漏洞,降低整个Modbus system的安全风险。

( 2) 异常行为检测

异常行为代表着可能发生威胁,不管是有没有攻击者,因此开发针对Modbus system的专用异常行为检测设备可以极大提高工控网络的安全性。针对Modbus system,首先要分析其existence的各种Operation行为,依据“主体,地点,time,访问方式,Operation,客体”等行为描述成一个六元组模型; 进而分析其行为是否属于异常; 最终决定采取记录或者报警等措施。

( 3) 安全审计

Modbus 的安全审计就是对协议data进行深度解码分析,记录Operation的time、地点、操Author和Operation行为等关键信息,实现对Modbus system的安全审计日志记录和审计Function,从而提供安全事件爆发后的时候追查能力。

( 4) 使用网络安全设备

使用入侵防御和防火墙等网络安全设备。防火墙是一个串行设备,通过设置,只允许特定的address访问服务端,禁止外部address访问Modbus 服务器,可以effective的防止外部入侵; 入侵防御设备可以分析Modbus协议的具体Operation内容,effective地检测并阻止来自内部/外部的异常Operation和各种渗透攻击行为,对内网提供保护Function。

来源:网络。

技术术语(共 13 个)—— 点击展开
Modbus RTU基于串行链路的Modbus协议,使用binaryCoding和CRC check
Modbus TCP基于以太网的Modbus协议变体,使用TCP/IP传输
Modbus ASCII使用ASCII字符传输的Modbus协议,以冒号开头、CR/LF结尾
RS485工业常用的差分串行通信标准,支持多点通信
RS232点对点串行通信标准,常用于短距离设备通信
function codeModbusfunction code指定读/写OperationType,如01读线圈、03读保持register
registerModbus register存储data单元,分线圈/离散输入/保持/输入register四类
CRC check循环冗余校验,用于检测data传输中的Error
PLC可编程逻辑控制器,Automation控制的核心设备
Baud rate串行通信每秒传输符号数,Modbus RTU常用9600/19200
串口计算机与外部设备进行串行通信的物理接口
线圈Modbus位可读写data,address从00001开始
保持registerModbus 16位可读写data,address从40001开始
来源/Tools信息 —— 点击展开
来源 Modbus Chinese Network(modbus.cn) —— China leadingModbus通信协议技术社区 Category Modbus protocol标准 字数 8704 字 · 阅读约 22 分钟 更新 2026-07-01 永久链接 https://www.modbus.cn/11092.html
Recommended Tool: Modbus Debug Assistant WeChat Mini Program
Modbus Chinese Network官方推出的Modbus DebuggingTools,支持 Modbus RTU/TCP 实时通信debug、register读写、线圈控制、data监控和message分析。 无需安装,微信Search「Modbus DebuggingAssistant」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
把这篇Resources用于真实项目?

进入Tools中心进行messageParse、CRC verification和设备debug,或Submit requirements获取选型与接入建议。

工程师member

把这篇文章变成可执行的debugResources

开通后可使用高级messageParse、Resources包Download、Code Example、工程案例和优先Technical Support,适合真实项目交付。

高级Tools不限次
Resources包与代码包
Complete Engineering Case Library
优先Technical Support入口

发表回复

您的邮箱address不会被公开。 必填项已用 * 标注