Modbus프로토콜的工作원리与적용시나리오

무료무료 기술 자료

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

Modbus协议的工作原理与应用场景

什么是통신 프로토콜?

在了解什么是Modbus之前,让我们先来看看什么是통신 프로토콜。 통신 프로토콜(Communication Protocol)是一种规则或约定,用于在계산机系统、네트워크设备或不同系统之间进行데이터交换和통신。这些프로토콜定义了통신的표준和사양,确保보내기者和수신者之间能够正确理解和解释传输的데이터。 통신 프로토콜包括物理层프로토콜、데이터链路层프로토콜、네트워크层프로토콜、传输层프로토콜、적용层프로토콜等多个层次,每个层次负责不同的任务。以下是통신 프로토콜的一些关键方面:
  1. 데이터형식: 통신 프로토콜规定了데이터的형식,包括데이터的编码방식、바이트顺序、데이터帧的结构等。这确保了데이터在传输过程中可以被正确地분석和重建。
  2. 통신방식: 프로토콜定义了통신的방식,包括单工통신(单方向传输)、半双工통신(双方交替传输)和全双工통신(同时双向传输)等。
  3. 错误检测和纠错: 통신 프로토콜通常包括一些机制,用于检测和纠正在传输过程中可能发生的错误,以确保데이터的完整性和准确性。
  4. 流量控制: 통신 프로토콜可以定义如何控制데이터的流量,以避免데이터过载或拥塞,从而提高통신的效率。
  5. 주소和标识: 프로토콜可以包括设备或节点的주소和标识,以确保데이터被正确地보내기到目标设备。
  6. 会话管理: 在某些프로토콜中,会话管理用于建立、维护和终止통신会话,确保통신的有序性和可控性。
我们常见的통신 프로토콜包括I2C、SPI、UART等,而Modbus则是一种串行통신 프로토콜。

什么是RS-485和RS-232?

在讨论Modbus时,经常会遇到RS-485和RS-232,那么它们究竟是什么呢? RS-485(Recommended Standard 485)和 RS-232(Recommended Standard 232)是两种常用的串行통신표준,用于在계산机和外部设备之间传输데이터。它们在物理层和电气特性上有一些重要的区别: RS-232:
  1. 单포트통신: RS-232 是一种单포트통신표준,即데이터信号只通过一个传输线进行传输,其中包括一个보내기线(TX)和一个수신线(RX)。
  2. 电压电平: RS-232 使用电压电平来表示데이터 비트。典型的RS-232电平为正负12V,其中正电压表示逻辑0,负电压表示逻辑1。
  3. 통신距离: RS-232통신通常适用于较短的距离,통신距离通常不超过50英尺(约15米),并且통신速率受到距离的限制。
  4. 点对点통신: RS-232통신是点对点的,每个연결只支持两台设备之间的통신,一个보내기方和一个수신方。
  5. 用途: RS-232常用于연결계산机和外部设备,如串行打印机、调制解调器、串行鼠标等。它也可以用于短距离的点对点통신。
RS-485:
  1. 差分信号: RS-485 使用差分信号传输데이터,它包括两个传输线,一个为正(A或非反相线),一个为负(B或反相线)。这种差分信号可以提高抗干扰性能。
  2. 电压电平: RS-485通常使用低电平差分信号,其中正线的电压大致等于负线的电压,这有助于减少传输线上的干扰。
  3. 통신距离: RS-485통신适用于较长距离,通常可覆盖几千英尺(数百米)的距离,这取决于통신速率和线缆质量。
  4. 多点통신: RS-485支持多点통신,多个设备可以연결到同一传输线上,并且可以同时进行통신。这使得RS-485非常适合用于工业控制和仪表等적용,其中需要多个设备之间的데이터交换。
  5. 用途: RS-485通常用于산업 자동화、远程监控、建筑自动化以及其他需要长距离和多设备통신的적용。它在这些领域中被广泛使用,因为它的差分信号设计使其更耐干扰,适应更长的통신距离,并支持多点통신。
Modbus协议的工作原理与应用场景插图 如果您想进一步了解,请继续阅读:

USB转시리얼 포트 TTL RS-232 RS-485 COM口 UART区别

USB转시리얼 포트(USB to Serial)是一种将USB인터페이스연결到串行통신 인터페이스的设备,通常用于将계산机연결到需要串行통신的外部设备。这些시리얼 포트可以是TTL시리얼 포트、RS-232시리얼 포트或RS-485시리얼 포트,具体区别如下:
  1. TTL시리얼 포트: TTL(Transistor-Transistor Logic)시리얼 포트使用低电平(通常是0V表示逻辑0,3.3V或5V表示逻辑1)进行통신。它通常用于嵌入式系统和微제어기之间的통신。USB转TTL시리얼 포트适用于연결계산机与TTL시리얼 포트设备,例如Arduino等。
  2. RS-232시리얼 포트: RS-232是一种常见的串行통신표준,通常使用正负12V的电压电平表示逻辑0和逻辑1。USB转RS-232시리얼 포트适用于연결계산机与老式串行设备,如串行打印机、调制解调器等。
  3. RS-485시리얼 포트: RS-485是一种差分信号시리얼 포트표준,使用两个传输线(A和B)传输데이터,其中一个线路是正相位,另一个线路是反相位。它具有抗干扰性和支持多点통신的能力,通常用于工业控制和长距离통신。USB转RS-485시리얼 포트适用于연결계산机与RS-485시리얼 포트设备,如산업 자동화设备。
  4. COM口(시리얼 포트): COM口是계산机上用于串行통신的物理인터페이스,通常使用RS-232或RS-485표준。COM口通常用于연결外部设备,如串行打印机、GPS수신器、데이터 수집기等。USB转COM口适用于계산机没有内置串行인터페이스的情况,允许用户通过USB인터페이스模拟COM口。
  5. UART(通用异步收发传输器): UART是一种통신芯片或模块,用于将并行데이터转换为串行데이터以进行串行통신。UART可以与TTL、RS-232或RS-485等不同유형的시리얼 포트配合使用。USB转UART通常是一个通用的시리얼 포트适配器,可以用于연결不同유형的시리얼 포트设备。
Modbus协议的工作原理与应用场景插图1

Modbus프로토콜설명

Modbus诞生于1979年,最初由莫迪康公司(Modicon)개발,后来被施耐德电气公司收购。Modbus为设备和设备之间的통신提供了通用언어。它已成为工业领域통신 프로토콜的行业표준,并且是工业电子设备之间常用的연결방식之一。Modbus作为目前工业领域적용最广泛的프로토콜之一,有着以下优点: - Modbus프로토콜是开放、公개발表且无版权要求的,可以广泛적용。 - Modbus프로토콜支持多种电气인터페이스,包括RS232、RS485、TCP/IP等,还可以在各种介质上传输,如双绞线、光纤、적외선线、无线等。 - Modbus프로토콜的消息帧형식简单、紧凑且易于理解。用户容易理解和使用,制造商容易개발和통합,方便形成工业控制네트워크。

Modbus프로토콜的적용

最简单地说,Modbus是一种总线통신 프로토콜,类似于I2C和SPI,但不依赖于特定的硬件总线。Modbus之所以广泛使用,是因为它具有许多优点。

Modbus통신过程

需要注意的是,Modbus是一种一主多从的통신 프로토콜。在Modbus통신中,只有一个设备可以보내기请求,其他从设备수신主机보내기的请求데이터并进行响应。从设备可以是各种外围设备,如I/O센서、阀门、네트워크驱动器或其他유형的 测量设备。슬레이브处理信息并使用Modbus将其데이터보내기给마스터。换句话说,不能在同一时间内进行Modbus同步통신。主机一次只能向一个从机보내기请求,总线上每次只有一个데이터进行传输,即主机보내기请求,从机响应。如果主机没有보내기请求,总线上就没有데이터통신。 需要特别注意的是,Modbus통신没有忙机制判断。例如,如果主机명령 보내기给从机,但从机没有收到或正在处理其他任务,那么从机将无法及时响应,因为Modbus总线只负责传输데이터,没有其他仲裁机制。因此,必须通过软件的방식来判断是否成功수신到데이터。

Modbus存储区

既然从机存储데이터,必须有一种방식来进行文件操作。我们都知道,文件可以分为只读(Read-Only,-R)和读写(Read-Write,-RW)两种유형,而Modbus也有相应的存储区。 在Modbus프로토콜中,存储的데이터유형可以分为两种主要유형:布尔量和16位레지스터。 - 布尔量:这些데이터可以表示诸如IO口电平高低、灯的开关状态等。 - 16位레지스터:这些데이터通常用于表示센서的온도데이터、存储密码等信息。 Modbus프로토콜将存储区分为4个区域,分别是0、1、3和4区。其中,1区和4区是可读可写的,而0区和3区是只读的。 此外,Modbus还为每个存储区分配了주소范围。主机在向从机请求데이터时,只需告诉从机데이터的시작주소和要获取的바이트数,从机就可以보내기데이터给主机。

Modbus프로토콜유형

在Modbus프로토콜中,데이터传输可以采用不同的介质和모드,主要有三种프레임유형,包括ASCII、RTU(远程终端控制系统)和TCP。 对于串行포트,Modbus프로토콜有多个버전,但最常见的包括以下四种: - **Modbus-RTU**:采用紧凑的16진법表示데이터的방식。Modbus-RTU在데이터帧中附加了循环冗余체크섬(CRC),用于检测데이터是否正确。一个典型的Modbus-RTU프레임包含从机주소、기능 코드、데이터和CRC 검증。 - **Modbus-ASCII**:采用ASCII码表示데이터,每个8位바이트都被转换为两个ASCII문자보내기。Modbus-ASCII也包含循环冗余체크섬,但使用了不同的체크섬方法。 - **Modbus-TCP**:Modbus-TCP不需要从机주소,而是需要MBAP(Modbus Application Protocol over TCP)헤더。由于TCP本身具有체크섬差错检测能力,因此Modbus-TCP不需要额外的差错체크섬。 - **Modbus Plus**:这是另一种Modbus프로토콜버전,用于特定的工业적용。 在这些버전中,Modbus-RTU最为常见,而Modbus-ASCII较少使用。下面我们将详细讨论Modbus-RTU프로토콜。

Modbus-RTU프로토콜

Modbus프레임帧结构 Modbus프레임是指主机보내기给从机的一帧데이터,其中包含了从机的주소、主机要执行的操作、데이터以及체크섬等信息。在串行链路上,Modbus프레임的형식如下: - **从机주소**:每个从机都有唯一的주소,占用一个바이트,有效范围通常是1-247,其中255是广播주소,表示向所有从机보내기请求。 - **기능 코드**:占用一个바이트,它表示主机보내기的请求是何种操作,不同的기능 코드对应不同的操作。 - **데이터**:根据기능 코드的不同,包含不同的信息。例如,如果기능 코드是查询从机的데이터,데이터部分包括시작레지스터주소和要읽기的레지스터 수량。 - **체크섬**:在데이터传输过程中 ,데이터可能会受到干扰或损坏,CRC检验用于检测수신到的데이터是否正确。

Modbus기능 코드

Modbus프로토콜规定了多个기능 코드,每个기능 코드对应一种操作。虽然Modbus定义了多达20多种기능 코드,但实际적용中常用的只有其中的8种,用于对存储区的读写。以下是常用的Modbus기능 코드: - **03**:읽기多个레지스터的值。 - **06**:设置单个레지스터的值。 - **16**:设置多个레지스터的值。 - **01**:읽기多个开关量입력。 - **02**:읽기多个开关量출력。 - **05**:设置单个开关量출력。 - **15**:设置多个开关量출력。 - **23**:읽기多个레지스터的值(扩展기능 코드)。 需要注意的是,不同的기능 코드对应不同的操作,因此主机在보내기请求时需要指定기능 코드,以告知从机要执行的操作。

CRC 검증

CRC(循环冗余체크섬)用于检测데이터传输过程中的错误。在Modbus프로토콜中,CRC 검증占用两个바이트,包含一个16位的2진수值。CRC值由보내기设备계산并附加到데이터帧上,在수신设备수신데이터时重新계산CRC值,并与수신到的CRC 검증值进行比较。如果这两个值不相等,就表示데이터传输存在错误。 CRC 검증的계산流程如下: 1. 预置一个16位레지스터为0xFFFF(全1),称之为CRC레지스터。 2. 把데이터帧中的第一个바이트的8位与CRC레지스터中的低바이트进行异或运算,结果存回CRC레지스터。 3. 将CRC레지스터向右移动一位,最高位填充0,最低位被移出并进行检测。 4. 如果最低位为0,则重复第3步(继续下一次移位);如果最低位为1,则将CRC레지스터与预设的固定值(0xA001)进行异或运算。 5. 重复第3步和第4步,直到进行8次移位,处理完一个完整的8位。 6. 重复第2步到第5步来处理下一个8位,直到所有바이트处理完成。 7. 最终CRC레지스터中的值就是CRC 검증值。 此外,还有一种使用预先계산的表格来계산CRC的方法,它具有更快的계산速度,但需要较大的存储空间。这种方法在此不做详细설명。

보내기和수신데이터예제

下面我们将详细介绍Modbus-RTU프로토콜的보내기和수신데이터예제。 1. 主机对从机读데이터操作 主机보내기프레임형식如下: 01 03 00 01 00 01 D5 CA 解释: - `0x01`:从机的주소。 - `0x03`:查询功能,읽기从机레지스터的데이터。 - `0x00 0x01`:表示읽기的시작레지스터주소,从0x0001开始읽기。 - `0x00 0x01`:表示查询的레지스터 수량为1个。Modbus将데이터存储在레지스터中,通过查询레지스터来获取不同변수的值。一个레지스터주소对应2바이트데이터,레지스터주소对应从机的实际存储주소。 - `0xD5 0xCA`:循环冗余체크섬 (CRC)。 从机回复프레임형식如下: 01 03 02 00 17 F8 4A 解释: - `0x01`:从机的주소。 - `0x03`:查询功能,읽기从机레지스터的데이터。 - `0x02`:返回바이트数为2个,一个레지스터对应2个바이트。 - `0x00 0x17`:레지스터的值是0x0017。 - `0xF8 0x4A`:循环冗余체크섬 (CRC)。 2. 主机对从机写데이터操作 主机보내기프레임형식如下: 01 06 00 01 00 17 98 04 解释: - `0x01`:从机的주소。 - `0x06`:修改功能,修改从机레지스터的데이터。 - `0x00 0x01`:表示修改的시작레지스터주소,설명要修改0x0001-0x0003的存储콘텐츠。 - `0x00 0x17`:要修改的데이터值为0x0017。 - `0x98 0x04`:循环冗余체크섬 (CRC)。 从机回复프레임형식如下: 01 06 00 01 00 17 98 04 解释: 从机的回复与主机的보내기相同。如果不同,설명发生了错误。 这是一个Modbus-RTU프로토콜的简单예제,演示了主机如何向从机보내기읽기和쓰기데이터的请求,并从从机수신响应。每个Modbus프레임都包含从机주소、기능 코드、데이터以及CRC 검증,以确保可靠的데이터传输。

Modbus-ASCII프로토콜

Modbus-ASCII프로토콜与Modbus-RTU프로토콜相似,但在消息中的每个바이트都作为两个ASCII문자보내기。16진수的0到F分别对应ASCII문자的0到9和A到F。 以下是Modbus-ASCII프로토콜的特点: - 每个바이트都以ASCII문자表示,例如0x30~0x3A表示0到9,0x41~0 x46表示A到F。 - 바이트之间使공백으로 구분。 - 每个消息以回车符(CR,0x0D)和换行符(LF,0x0A)종료。 Modbus-ASCII的CRC 검증与Modbus-RTU相同,但在ASCII형식下表示为ASCII문자。

Modbus-TCP프로토콜

Modbus-TCP프로토콜是基于TCP/IP프로토콜的Modbus프로토콜变种,用于在TCP/IP네트워크上进行통신。与Modbus-RTU和Modbus-ASCII프로토콜不同,Modbus-TCP프로토콜不使用物理串行链路,而是使用以太网或Wi-Fi等TCP/IP네트워크。 以下是Modbus-TCP프로토콜的特点: - Modbus-TCP使用표준的TCP/IP套接字연결,无需物理串行통신线路。 - Modbus-TCP消息与Modbus-RTU프로토콜消息的结构相似,但不包括CRC 검증。 - 在Modbus-TCP中,데이터以2진수형식传输,而不是ASCII문자。 - Modbus-TCP消息通过TCP연결的套接字보내기和수신。 - Modbus-TCP使用TCP포트502。 因此,与Modbus-RTU和Modbus-ASCII프로토콜相比,Modbus-TCP프로토콜更适合基于以太网的통신,通常用于现代산업 자동화系统和设备。

总结

Modbus是一种用于工业领域통신的通用프로토콜,具有多个버전,包括Modbus-RTU、Modbus-ASCII和Modbus-TCP。不同버전适用于不同的통신介质和시나리오。 Modbus-RTU通常用于串行통신,而Modbus-TCP用于以太网통신。 Modbus프로토콜包括기능 코드、CRC 검증等元素,用于보내기和수신데이터。使用Modbus프로토콜,主机可以与从机进行통신,읽기和쓰기데이터,以实现自动化和控制系统。
실제 프로젝트에 이 자료를 활용하시겠습니까?

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

엔지니어 회원

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

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

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

답글 작성

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