Modbus TCP데이터프레임 구조 상세 해설

무료무료 기술 자료

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

Modbus TCP数据报文结构详解

ModbusTCP与Modbus UDP的프레임형식是一样的,它们之间的区别其实就是TCP与UDP的区别,因此下面就针对ModbusTCP的프로토콜进行分析,Modbus TCP与Modbus Rtu(ModbusASCII)之间的区别如下图:

Modbus TCP数据报文结构详解插图

从上图可以看出,ModbusTCP在Modbus串行통신的基础上,去除了체크섬(由于TCP本身就带有체크섬)和设备주소(ModbusTCP弱化了设备주소,用IP주소来取代),再加上MBAP헤더(占7 bytes),下面针对MBAP进行分析설명:

域길이설명客户机服务器
事务处理标识符2바이트Modbus请求/响应事务处理的标识客户机启动복사响应
프로토콜 식별자2바이트0=Modbus프로토콜客户机启动복사响应
길이2바이트길이之后的바이트总数客户机启动服务器启动
유닛 식별자1바이트串行链路或其它总线的슬레이브识别클라이언트启动복사响应

下面针对具体프레임进行分析,Modbus프로토콜在以太网链路上的프레임형식如下所示:

事务处理标识符프로토콜 식별자길이유닛 식별자기능 코드데이터
2 바이트2 바이트2 바이트1 바이트1 바이트N bytes

有了以上理论基础之后,下面针对各个기능 코드进行详细分析:

읽기출력코일

보내기프레임형식如下:

Modbus TCP数据报文结构详解插图1

보내기프레임含义:읽기服务器1号슬레이브출력코일,시작주소为0x13=19,对应주소为00020,코일 수량为0x1B=27,即읽기1号슬레이브출력코일,주소从00020-00046,共27个코일的状态值。

这里值得注意一下,프로토콜中的시작주소指的是索引,后面的주소指的是具体주소,对于任意一个存储区,索引都是从0开始的,但是对应的具体주소,与存储区是相关的,比如출력코일,0对应00001;입력코일,0对应10001;입력 레지스터,0对应30001;유지 레지스터,0对应40001。

返回프레임형식如下:

Modbus TCP数据报文结构详解插图2

返回프레임含义:返回服务器1号슬레이브출력코일00020-00046,共27个코일的状态值,返回바이트数为4个,分别为CD 6B B2 05。

CD=1100 1101 对应 00020-00027

6B=0110 1011 对应 00028-00035

B2=1011 0010 对应 00036-00043

05=0000 0101 对应 00044-00046

읽기입력코일

보내기프레임형식如下:

Modbus TCP数据报文结构详解插图3

보내기프레임含义:읽기服务器1号슬레이브입력코일,시작주소为0xC4=196,对应주소为10197,코일 수량为0x1D=29,即읽기1号슬레이브입력코일,주소从10197-10225,共29个코일的状态值。

返回프레임형식如下:

Modbus TCP数据报文结构详解插图4

返回프레임含义:返回服务器1号슬레이브입력코일10197-10225,共29个코일的状态值,返回바이트数为4个,分别为CD 6B B2 05。

CD=1100 1101 对应 10197-10204

6B=0110 1011 对应 10205-10212

B2=1011 0010 对应 10213-10220

05=0000 0101 对应 10221-10225

유지 레지스터 읽기 (FC03)

보내기프레임형식如下:

Modbus TCP数据报文结构详解插图5

보내기프레임含义:읽기服务器1号슬레이브유지 레지스터,시작주소为0x6B=107,对应주소为40108,레지스터 수량为0x02=2,即읽기1号슬레이브유지 레지스터,주소从40108-40109,共2个레지스터的数值。

返回프레임형식如下:

Modbus TCP数据报文结构详解插图6

返回프레임含义:返回服务器1号슬레이브유지 레지스터40108-40109,共2个레지스터的数值,返回바이트数为4个,分别为02 2B 01 06,40108对应数值为0x022B,40109对应数值为0x0106。

입력 레지스터 읽기 (FC04)

보내기프레임형식如下:

Modbus TCP数据报文结构详解插图7

보내기프레임含义:읽기服务器1号슬레이브입력 레지스터,시작주소为0x6B=107,对应주소为30108,레지스터 수량为0x02=2,即읽기1号슬레이브유지 레지스터,주소从30108-30109,共2个레지스터的数值。

返回프레임형식如下:

Modbus TCP数据报文结构详解插图8

返回프레임含义:返回服务器1号슬레이브입력 레지스터30108-30109,共2个레지스터的数值,返回바이트数为4个,分别为02 2B 01 06,30108对应数值为0x022B,30109对应数值为0x0106。

预置单코일

보내기프레임형식如下:

Modbus TCP数据报文结构详解插图9

보내기프레임含义:预置服务器1号슬레이브单个코일的值,코일주소为0x00AC=172,对应주소为00173,断通标志0xFF00表示置位,0x000表示复位,即置位1号슬레이브출력코일00173。

返回프레임형식如下:

Modbus TCP数据报文结构详解插图10

返回프레임含义:预置单출력코일原프레임返回。

단일 레지스터 설정

보내기프레임형식如下:

Modbus TCP数据报文结构详解插图11

보내기프레임含义:预置服务器1号슬레이브单个유지 레지스터的值,레지스터주소为0x0087=135,对应주소为40136,쓰기值为0x039E,即预置1号슬레이브유지 레지스터40136值为0x039E。

返回프레임형식如下:

Modbus TCP数据报文结构详解插图12

返回프레임含义:预置单유지 레지스터原프레임返回。

预置多코일

보내기프레임형식如下:

Modbus TCP数据报文结构详解插图13

보내기프레임含义:预置服务器1号슬레이브多个코일的值,코일주소为0x0013=19,对应주소为00020,코일数为0x0A=10,쓰기值为0xCD00,即预置1号슬레이브코일00020-00027=0xCD=1100 1101,00028-00029=0x00=0000 0000。

返回프레임형식如下:

Modbus TCP数据报文结构详解插图14

返回프레임含义:预置多출력코일返回프레임是在原프레임基础上除去바이트数及具体바이트后返回。

다중 레지스터 설정

보내기프레임형식如下:

Modbus TCP数据报文结构详解插图15

보내기프레임含义:预置服务器1号슬레이브多个레지스터的值,레지스터주소为0x0087=135,시작주소为40136,레지스터 수량为0x02=2,종료주소为40137,쓰기值为0xCD00和0x0A10,即预置1号슬레이브레지스터40136=0x0105,40137=0x0A10。

返回프레임형식如下:

Modbus TCP数据报文结构详解插图16

返回프레임含义:预置多유지 레지스터返回프레임是在原프레임基础上除去바이트数及具体바이트后返回。

실제 프로젝트에 이 자료를 활용하시겠습니까?

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

엔지니어 회원

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

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

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

답글 작성

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