ROBOT ENGINEERING NOTES

로봇과 AMR의
전장 설계부터 인증까지

회로 실무, 산업자동화, Functional Safety, ISO 규격과 로봇 인증을 실제 설계 관점에서 정리합니다.

회로 실무 AMR / AGV Functional Safety ISO 13849 EMC / CE
AMR ENGINEERING GUIDE →

【통신 실무】 Modbus Coil, Discrete Input, Holding Register 차이 | 주소와 Function Code 이해하기

반응형

 

 

【Safety 기능안전】 OSSD란? Safety Scanner 출력과 일반 PNP 센서의 차이

AMR이나 산업용 로봇에 Safety Scanner, Light Curtain 같은 안전센서를 적용하다 보면 OSSD1, OSSD2라는 출력을 자주 보게 된다.실제로 측정해보면 일반 24V PNP Sensor 출력과 비슷하게 보이기 때문에 처음에는

terrypack.tistory.com

 

【통신 실무】 CAN 통신에서 120Ω 종단저항을 사용하는 이유 | 60Ω이 측정되는 이유

AMR이나 산업용 로봇을 개발하다 보면 Motor Driver, Battery BMS, Lift Controller, Sensor 등 여러 장치를 CAN 통신으로 연결하는 경우가 많다.CAN 배선을 처음 구성할 때 가장 많이 나오는 질문 중 하나가 있다.

terrypack.tistory.com

MODBUS DATA MODELCoil과 Register를 구분하면 Modbus가 훨씬 쉬워진다

Read/Write 권한과 데이터 폭을 기준으로 이해해보자.

Modbus를 처음 접하면 0xxxx, 1xxxx, 3xxxx, 4xxxx 주소표 때문에 복잡해 보인다. 하지만 실제로는 1-bit 영역 두 개와 16-bit Register 영역 두 개로 나눠 생각하면 된다.

1. Modbus Data Model은 네 영역으로 나뉜다

영역 크기 일반적 권한 대표 FC
Coil 1 bit Read / Write 01, 05, 15
Discrete Input 1 bit Read Only 02
Input Register 16 bit Read Only 04
Holding Register 16 bit Read / Write 03, 06, 16

2. Coil은 어떤 데이터를 넣을까?

Command, Enable, Reset Request처럼 ON/OFF 명령을 표현하기 좋다. 예를 들어 PC가 PLC에 AUTO_START를 요청하거나 PLC가 특정 Relay Output을 제어하는 경우 Coil을 사용할 수 있다.

3. Discrete Input은 상태표시에 적합하다

Sensor 상태나 Hardware Input 상태처럼 외부에서 직접 Write하면 안 되는 1-bit 데이터에 잘 맞는다. 다만 실제 PLC 구현에서는 제조사 Mapping 방식에 따라 내부 Memory와 연결된다.

4. Holding Register는 왜 가장 많이 쓰일까?

16-bit 값을 읽고 쓸 수 있어 속도, 위치, Parameter, Error Code, Counter 등을 표현하기 좋다. 32-bit 값은 Register 두 개를 묶어 표현한다.

32-bit 데이터는 Byte Order와 Word Order를 사양서에 명시해야 한다.
같은 32-bit 값이라도 장치에 따라 High Word / Low Word 순서가 다를 수 있다.

5. Input Register는 측정값에 적합하다

센서 측정값, Actual Speed, Temperature처럼 Device가 생성하고 외부에서는 읽기만 하는 데이터에 사용할 수 있다.

6. 00001과 40001을 그대로 주소에 넣으면 안 되는 이유

00001, 40001은 사람이 보기 쉽게 표현한 Reference Number다. 실제 Request Frame은 보통 0-based Offset를 사용한다. Library와 PLC Software의 표시 방식이 다르면 한 칸씩 밀리는 Off-by-one Error가 발생한다.

문서: Holding Register
40001 Protocol Offset: 0
Software 표시: 제조사마다 0 또는 1로 보일 수 있음

7. Address Map은 기능별로 묶자

0000~0031 : Command
0032~0063 : Mode / Control
0100~0199 : Status
0200~0299 : Alarm Register
100~149 : Setpoint Register
200~249 : Actual Value

위 숫자는 예시다. 중요한 것은 Signal Name, Direction, Data Type, Update Cycle, Default, Fault Behavior를 함께 문서화하는 것이다.

8. Bit Packing을 할까, Coil을 쓸까?

Status가 많으면 16-bit Register 하나에 여러 Bit를 Packing해 Network Traffic을 줄일 수 있다. 하지만 Debug와 Version 관리가 어려워질 수 있다.

개별 Coil

읽기 쉽고 Debug가 편하다. Signal이 많으면 Request가 늘 수 있다.

Bit Packed Register

전송 효율이 좋다. Bit Definition 문서화가 필수다.

9. Robot Interface에서 권장하는 구분

Command와 Status를 같은 Address에 양방향으로 쓰지 않는 것이 좋다. 누가 값을 소유하는지 Data Ownership을 명확히 하면 Race Condition을 줄일 수 있다.

Interface Spec에 넣을 것
✓Signal Name과 Description
✓Direction PC→PLC / PLC→PC
✓Data Type과 Scale
✓Address와 Function Code
✓Initial / Fault Value

마무리

Modbus 주소는 외우는 것보다 Data Model을 이해하는 것이 먼저다. 1-bit Command는 Coil, 1-bit Read-only State는 Discrete Input, 16-bit Parameter는 Holding Register, 측정값은 Input Register로 나누면 Interface가 깔끔해진다.

반응형