Modbus 프로토콜基本원리-Modbus통신 프로토콜要点第2部分

무료무료 기술 자료

이 글은 바로 읽을 수 있으며 기초 학습과 검색 유입에 적합합니다.

Modbus 协议基本原理-Modbus通讯协议要点第2部分

1、 Modbus简介

Modbus 是由 Modicon(现为施耐德电气公司的一个品牌)在 1979 年发明的,是全球第一个真正 用于工业现场的总线프로토콜。ModBus 네트워크是一个工业통신系统,由带智能终端的可编程序제어기和계산机通过公用线路或局部专 用线路연결而成。其系统结构既包括硬件、亦包括软件。它可적용于各种데이터采集和过程监控。为更好地普及和推动 Modbus 在基于以太网上的분산형적용,目前施耐德公司已将 Modbus 프로토콜的 所有权移交给 IDA(Interface for Distributed 자동화,분산형自动化인터페이스)组织,并成立了 Modbus-IDA 组织,为 Modbus 今后的发展奠定了基础。

在中国,Modbus 已经成为国家표준,并有专业的프로토콜 사양,感兴趣的可以去查阅相关的文件,详情如下:표준번호为:GB/T19582-2008文件名称:《基于 Modbus 프로토콜的산업 자동화네트워크사양》

主要有三部分的콘텐츠,分别如下:

《GB/T 19582.1-2008 第 1 部分:Modbus 적용프로토콜》

《GB/T 19582.2-2008 第 2 部分:Modbus 프로토콜在串行链路上的实现指南》

《GB/T 19582.3-2008 第 3 部分: Modbus 프로토콜在 TCP/IP 上的实现指南》

2、Modbus프로토콜개요

Modbus是一个主-从모드的통신 프로토콜,属于데이터链路层上的프로토콜,프로토콜本身不涉及具体的硬件要求。常见的적용Modbus프로토콜的物理인터페이스有RS-485、RS232、USART等的통신链路中。Modbus프로토콜中,一个时刻内只允许有一个主机연결于总线,多个从机연결于总线上,통신都是只能由主机发起,从机进行响应。不能从从机主动发起통신。

3、Modbus 主从机통신모드

主机和从机之间的통신,可以用两种모드进行:广播通知모드、单播点对点모드。

3.1、单播点对点모드

主机按照从机的明确주소访问相应的从机,从机接到来自主机的请求并处理完请求后,从机会向主机返回一个应答,完成一个통신。在这种모드,一个 Modbus 事务处理包含 2 个프레임:一个来自主机的请求,一个来自从机的应答。在总线上,每个从机都必须有唯一的从机주소 (1 到 247),这样才能区别于其它节点被独立的寻址。

3.2、广播通知모드

主机向所总线通过广播指令보내기请求,所有的从机都要수신来自主机的广播信息。对于主机广播的请求,从机是没有应答返回的。所有的从机必须要接受主机的广播模写功能。注意:주소 0 是专门用于主机向各个从机广播데이터的。

4、Modbus 주소规则

Modbus 寻址空间有 256 个不同주소。如下图所示:

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图

주소 0 为广播주소。所有的从机必须识别广播주소。Modbus 主机本身是没有주소的,只有从机必须要有一个주소。该주소必须在 Modbus 串行总线上唯一。248~255作为预留使用的주소。

5、Modbus 的帧형식

Modbus的帧형식按照选择的모드不同帧형식也是有所区别的。

5.1、RTU모드

RTU 모드下的帧형식如下图:

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图1

Modbus RTU 帧总길이最大为 256 바이트。RTU 모드每个바이트 ( 11 位 ) 的형식为 :8–位2진수,프레임中每个 8 位바이트含有两个 4 位16진수문자(0–9, A–F)每바이트的 bit 流:1 시작位8 데이터 비트, 首先보내기最低有效位1 位作为奇짝수 패리티1 정지 비트짝수 패리티是要求的, 其它모드 ( 홀수 패리티, 패리티 없음 ) 也可以使用。为了保证与其它产品的最大兼容性, 同时支持패리티 없음모드是建议的。默认체크섬모드모드 必须为짝수 패리티。注 : 使用패리티 없음要求 2 个정지 비트。RTU时,每个문자或바이트均由此顺序보내기(从左到右):

最低有效位 (LSB) . . . 最高有效位 (MSB)

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图2
Modbus 协议基本原理-Modbus通讯协议要点第2部分插图3

5.1.1、RTU모드下的帧통신

由보내기设备将 Modbus 프레임构造为带有已知시작和종료기호的帧。这使设备可以在프레임的开始수신 新帧,并且知道何时프레임종료。不完整的프레임必须能够被检测到而错误标志必须作为结果被设置。在 RTU 모드,프레임帧由时长至少为 3.5 个문자时间的空闲间隔区分。

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图4

整个프레임帧必须以连续的문자流보내기。如果两个문자之间的空闲间隔大于 1.5 个문자时间,则프레임帧被认为不完整应该被수신节点丢弃。

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图5

注意 :RTU 모드下수신데이터时,由于 t1.5 和 t3.5 的时间隔要求的存在,一般在高통신速率下,会导致 CPU 负担加重。因此,在통신速率等于或低于 19200 bps 时,这两个定时必须严格遵守;对于통신 속도大于 19200 bps 的情形,应该使用 2 个定时的固定值:建议的문자间超时时间(t1.5)为 750µs,帧间的超时时间 (t1.5) 为 1.750ms。下图表示了对 RTU 传输모드状态图的설명。"主节点" 和 "子节点" 的不同角度均在相同的图中表示:

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图6

上面状态图的一些解释:

1)从 "初始" 态到 “空闲” 态转换需要 t3.5 定时超时: 这保证帧间지연

2)“空闲” 态是没有보내기和수신프레임要处理的正常状态。

3)在 RTU 모드, 当没有活动的传输的时间间隔达 3.5 个문자长时,통신链路被认为在 “空闲” 态。

4)当链路空闲时, 在链路上检测到的任何传输的문자被识别为帧시작。链路变为 "活动" 状态。然后当链路上没有문자传输的时间间个达到 t3.5 后,被识别为帧종료。

5)检测到帧종료后,完成 CRC 계산和检验。然后,分析주소域以确定帧是否发往此设备,如果不是, 则丢弃此帧。为了减少수신处理时间,주소域可以在一接到就分析,而不需要等到整个帧종료。这 样,CRC 계산只需要在帧寻址到该节点 (包括广播帧) 时进行。

5.1.2、RTU모드的CRC 검증

在 RTU 모드包含一个对전체프레임콘텐츠执行的,基于循环冗余체크섬 (CRC - Cyclical Redundancy Checking) 算法的错误检验域。CRC 域检验整个프레임的콘텐츠。不管프레임有无奇짝수 패리티,均执行此检验。CRC 包含由两个 8 位바이트组成的一个 16 位值。CRC 域作为프레임的最后的域附加在프레임之后。계산后,首先附加低바이트,然后是高바이트。CRC 高字 节为프레임보내기的最后一个子节。附加在프레임后面的 CRC 的值由보내기设备계산。수신设备在수신프레임时重新계산 CRC 的值,并将计 算结果于实际수신到的 CRC 值相比较。如果两个值不相等,则为错误。CRC 的계산, 开始对一个 16 位레지스터预装全 1。然后将프레임中的连续的 8 位子节对其进行后续的计 算。只有문자中的 8 个데이터 비트参与生成 CRC 的运算,시작位,정지 비트和패리티不参与 CRC 계산。CRC 的生成过程中, 每个 8–位문자与레지스터中的值异或。然后结果向最低有效位(LSB)方向移动 (Shift) 1 位,而最高有效位(MSB)位置充零。然后提取并检查 LSB:如果 LSB 为 1, 则레지스터中的值与 一个固定的预置值异或;如果 LSB 为 0, 则不进行异或操作。这个过程将重复直到执行完 8 次移位。完成最后一次(第 8 次)移位及相关操作后,下一个 8 位바이트 与레지스터的当前值异或,然后又同上面설명过的一样重复 8 次。当所有프레임中子节都运算之后得到的寄存 器的最终值,就是 CRC。

5.2、ASCII传输모드

当 Modbus 串行链路的设备被설정为使用 ASCII모드통신时,프레임中的每个 8 位바이트以两个 ASCII 문자보내기。一般在통신链路或者设备无法 符合 RTU 모드的定时管理时使用该모드。ASCII的帧형식如下:

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图7

比如 : 바이트 0X5B 会被编码为两个문자 : 0x35 和 0x42 ( ASCII 编码 0x35 ="5", 0x42 ="B" )。注 : 由于一个子节需要两个문자,此모드比 RTU 效率低。

ASCII 모드每个바이트 ( 10 位 ) 的형식为 :16진수,ASCII 문자 0-9, A-F。1 시작位7 데이터 비트, 首先보내기最低有效位1 位作为奇짝수 패리티1 정지 비트짝수 패리티是要求的, 其它모드 ( 홀수 패리티, 패리티 없음 ) 也可以使用。为了保证与其它产品的最大兼容性, 同时支持패리티 없음모드是建议的。默认체크섬모드모드 必须为짝수 패리티。注 : 使用패리티 없음要求 2 个정지 비트。문자是如何串行传送的:每个문자或바이트均由此顺序보내기(从左到右):

最低有效位 (LSB) . . . 最高有效位 (MSB)

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图8
Modbus 协议基本原理-Modbus通讯协议要点第2部分插图9

5.2.1、ASCII的프레임帧

在 ASCII 모드, 프레임用特殊的문자区分帧시작和帧종료。一个프레임必须以一个‘콜론’ ( : ) (ASCII 16진수 3A )시작,以 ‘回车-换行’ (CR LF) 对 (ASCII 16진수 0D 和 0A) 종료。注 : LF 문자可以通过特定的 Modbus 적용命令 (参见 Modbus 적용프로토콜사양) 改变。对于所有的域,允许传送的문자为16진수 0–9, A–F (ASCII 编码)。设备连续的监视总线上的 ‘冒 号’ 문자。当收到这个문자后,每个设备解码后续的문자一直到帧종료。프레임中문자间的时间间隔可以达一秒。如果有更大的间隔,则接受设备认为发生了错误。特别注意:每个문자子节需要用两个문자编码。因此,为了确保 ASCII 모드 和 RTU 모드在 Modbus 应 用级兼容,ASCII 데이터域最大데이터길이为 (2x252) 是 RTU 데이터域 (252) 的两倍。必然的, Modbus ASCII 帧的最大크기为 513 个문자。ASCII 프레임帧的要求在下面的状态图中综合。"主节点" 和 "子节点" 的不同角度均在相同的图中表示:

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图10

上面状态图的一些解释:1)“空闲” 态是没有보내기和수신프레임要处理的正常状态。2)每次수신到 ":" 문자表示新的프레임的开始。如果在一个프레임的수신过程中收到该문자,则当前地프레임 被认为不完整并被丢弃。而一个新的수신缓冲区被重新分配。3)检测到帧종료后,完成 LRC 계산和检验。然后,分析주소域以确定帧是否发往此设备,如果不是, 则丢弃此帧。为了减少수신处理时间,주소域可以在一接到就分析,而不需要等到整个帧종료。

5.2.2、ASCII的LRC체크섬

在 ASCII 모드,包含一个对전체프레임콘텐츠执行的,基于LRC 체크섬 (LRC - Longitudinal Redundancy Checking) 算法的错误检验域。LRC 域检验不包括시작“콜론”和结尾 CRLF 对的整个报 文的콘텐츠。不管프레임有无奇짝수 패리티,均执行此检验。LRC 域为一个子节,包含一个 8 位2진수值。LRC 值由보내기设备계산,然后将 LRC 附在프레임后面。수신设备在수신프레임时重新계산 LRC 的值,并将계산 결과于实际수신到的 LRC 值相比较。如果两个值不 相等,则为错误。LRC 的계산, 对프레임中的所有的连续 8 位바이트相加,忽略任何进位,然后求出其2진수补码。执行检 验针对不包括시작“콜론”和结尾 CRLF 对的整个 ASCII 프레임域的콘텐츠。在 ASCII 모드,LRC 的结果 被 ASCII 编码为两个바이트并放置于 ASCII 모드프레임帧的结尾,CRLF 之前。

6、Modbus的异常码

MODBUS 事务处理的一般处理过程:

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图11

一旦服务器处理请求,使用合适的 MODBUS 服务器事务建立 MODBUS 响应。根据处理结果,可以建立两种유형响应:

1) 一个正确的 MODBUS 响应:响应기능 코드 = 请求기능 코드

2) 一个 MODBUS 异常响应

3)用来为客户机提供处理过程中与被发现的差错相关的信息;

4)响应기능 코드 = 请求기능 코드 + 0x80;

5)提供一个异常码来指示差错原因。

7、Modbus的기능 코드

7.1、기능 코드的类别

目前Modbus的功能中可以分为三类:公共기능 코드、用户定义기능 코드、保留기능 코드。

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图12

公共기능 코드 :是已经被定义的기능 코드。

用户定义기능 코드 :有两个可以由用户定义기능 코드。范围为:65 至 72 和10진수 100 至 110。

保留기능 코드 :特殊情况下使用的,并且对公共使用是无效的기능 코드。

7.2、公共기능 코드

Modbus中公共기능 코드的定义如下:

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图13

7.2.1、코일操作기능 코드(bit位的操作)

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图14

比如我要읽기코일中的콘텐츠。从机주소为 11H,코일레지스터的시작주소为 0013H,종료주소为 0037H。需要查询总共 37 个코일레지스터,主机보내기的RTU帧如下:

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图15

从机响应的데이터帧如下:

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图16

분석:코일 0013H 到코일 001AH 的状态为 CDH,2진수值为 11001101,该바이트的最高바이트为코일 001AH , 最 低 字 节 为 线 圈 0013H 。各코일 상태与데이터콘텐츠每位相对应。1 代表 ON,0 代表 OFF。线 圈 001AH 到 线 圈 0013H 的 状态分别为:

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图17

7.2.2、유지 레지스터操作기능 코드

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图18

(1)写多个유지 레지스터

写多个유지 레지스터使用기능 코드10H。比如:从机주소为 11H。유지 레지스터的其实주소为 0001H,레지스터的종료주소为 0002H。总共访问 2个레지스터。유지 레지스터 0001H 的콘텐츠为 000AH,유지 레지스터 0002H 的콘텐츠为 0102H。

主机请求的RTU帧데이터如下:

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图19
Modbus 协议基本原理-Modbus通讯协议要点第2部分插图20

从机返回的响应为:

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图21

(2)读유지 레지스터

读유지 레지스터使用03H기능 코드。比如:从机주소为 11H。유지 레지스터的시작주소为 006BH,종료주소为 006DH。

主机보내기的RTU请求帧如下:

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图22
Modbus 协议基本原理-Modbus通讯协议要点第2部分插图23

从机的应答如下:

Modbus 协议基本原理-Modbus通讯协议要点第2部分插图24
실제 프로젝트에 이 자료를 활용하시겠습니까?

도구 센터에서 프레임 분석, CRC 검증, 장비 디버깅을 진행하거나 요청을 제출하여 선정 및 연동 제안을 받아보세요.

엔지니어 회원

이 글을 실행 가능한 디버깅 자료로 활용하세요

가입하면 고급 프레임 분석, 자료 패키지 다운로드, 코드 예제, 엔지니어링 사례, 우선 기술 지원을 이용할 수 있어 실제 프로젝트 납품에 적합합니다.

고급 도구 무제한 이용
자료 패키지와 코드 패키지
완전한 엔지니어링 사례 라이브러리
우선 기술 지원 채널

답글 작성

이메일 주소는 공개되지 않습니다. 必填项已用 * 标注