Modbus는 산업 자동화 시스템에서 자주 사용되는 통신 프로토콜로, PLC와 다양한 장치 간 데이터를 주고받을 때 중요한 역할을 합니다. 이번 글에서는 Modbus에서 데이터를 어떻게 송수신하는지, 그리고 **레지스터(Register)**와 **코일(Coil)**의 차이점과 이를 다루는 방법에 대해 쉽게 설명해드리겠습니다. 또한, 실습 예제를 통해 PLC에서 데이터를 읽고 쓰는 방법도 알려드릴게요.
1. Modbus에서 데이터를 송수신하는 방식
Modbus 통신은 Master와 Slave라는 두 장치 간에 데이터를 주고받는 방식으로 작동합니다. Master는 데이터를 요청하고, Slave는 그 요청에 따라 데이터를 보내거나 받습니다.
- Master: PLC나 PC와 같은 장치가 Master 역할을 하며, 요청을 보내고 응답을 받습니다.
- Slave: 온도 센서, 밸브, 모터와 같은 장치들이 Slave 역할을 하며, Master의 요청에 맞게 데이터를 송수신합니다.
2. 레지스터와 코일의 차이점
Modbus에서는 데이터를 레지스터와 코일에 저장하고 전송합니다. 두 가지의 차이를 정확히 이해하는 것이 중요합니다.
- Coils (코일):
코일은 디지털 데이터를 저장하는 단위로, 1비트씩 정보를 담습니다. 코일의 값은 ON (1) 또는 OFF (0) 두 가지 상태만 가질 수 있습니다. 예를 들어, 스위치의 상태, 밸브의 열림/닫힘 같은 이진 값을 저장할 때 사용됩니다. - Registers (레지스터):
레지스터는 아날로그 또는 정수형 데이터를 저장하는 단위로, 16비트씩 정보를 담습니다. 여러 개의 레지스터를 조합하면 더 큰 데이터를 표현할 수 있습니다. 예를 들어, 온도, 속도, 압력과 같은 아날로그 데이터를 저장할 때 사용됩니다.
레지스터와 코일은 Modbus 통신에서 중요한 역할을 하며, 데이터를 어떻게 다루느냐에 따라 통신의 성능이 달라질 수 있습니다.
3. Modbus 기능 코드
Modbus에서 데이터를 읽고 쓰는 방법은 **기능 코드(Function Code)**를 통해 결정됩니다. 기능 코드는 Master가 Slave에게 어떤 작업을 요청할지 알려주는 역할을 합니다. 자주 사용되는 기능 코드 몇 가지를 소개할게요.
- Function Code 01: Read Coils
디지털 출력(ON/OFF 상태)을 읽을 때 사용합니다. 예를 들어, 스위치나 밸브 상태를 확인할 때 유용합니다. - Function Code 02: Read Discrete Inputs
디지털 입력 상태를 읽을 때 사용합니다. 센서나 다른 장치의 디지털 출력 상태를 확인할 때 사용됩니다. - Function Code 03: Read Holding Registers
아날로그 데이터를 읽을 때 사용합니다. 온도 센서 값이나 압력 센서 값처럼 16비트 값을 가진 데이터를 읽을 때 사용됩니다. - Function Code 06: Write Single Register
한 개의 레지스터에 값을 쓸 때 사용합니다. 예를 들어, 설정값을 변경하거나 특정 매개변수를 수정할 때 사용됩니다. - Function Code 16: Write Multiple Registers
여러 개의 레지스터에 값을 쓸 때 사용합니다. 여러 설정 값을 한 번에 변경할 때 유용합니다.
이 기능 코드들은 Modbus에서 데이터를 읽고 쓰는 데 있어 중요한 역할을 합니다.
4. 실습 예제: PLC에서 레지스터 값을 읽고 쓰기
이번에는 Siemens S7-1200 PLC를 사용하여 Modbus RTU를 통해 레지스터 값을 읽고 쓰는 방법을 실습 예제로 보여드릴게요.
실습 준비물:
- Siemens S7-1200 PLC
- Modbus RTU 통신 설정
- 온도 센서 또는 아날로그 입력 장치 (예: TMP36 온도 센서)
- TIA Portal 소프트웨어
1단계: PLC와 Modbus RTU 연결 설정
- TIA Portal을 열고 새로운 프로젝트를 생성한 후, PLC의 Modbus RTU 통신 모듈을 설정합니다.
- CM 1241 모듈을 추가하여 Modbus RTU 네트워크에 연결합니다.
- 온도 센서나 다른 Modbus 장치를 RS-485 포트에 연결합니다.
2단계: Modbus 통신 블록 생성
- MB_CLIENT 또는 MB_SERVER 블록을 사용하여 Modbus RTU 통신을 설정합니다.
- 슬레이브 주소, 보레이트, 데이터 비트와 같은 통신 파라미터를 정확하게 설정합니다.
3단계: 레지스터 값 읽기
- Function Code 03을 사용하여 Read Holding Registers를 설정합니다.
- 예를 들어, 온도 센서의 데이터를 읽기 위해 다음과 같이 설정할 수 있습니다:
- 슬레이브 주소: 1 (센서 장치 ID)
- 기능 코드: 03 (Read Holding Registers)
- 레지스터 주소: 40001 (온도 센서의 데이터가 저장된 주소)
4단계: 레지스터 값 쓰기
- Function Code 06을 사용하여 Write Single Register를 설정합니다.
- 예를 들어, 온도 센서의 설정 값을 변경하거나 기준 온도를 설정할 때, 특정 레지스터에 값을 쓸 수 있습니다:
- 슬레이브 주소: 1 (센서 장치 ID)
- 기능 코드: 06 (Write Single Register)
- 레지스터 주소: 40002 (설정할 레지스터 주소)
- 설정 값: 75 (새로운 기준 온도 값)
5단계: 디버깅 및 테스트
- PLC에서 실시간 데이터를 확인하고, 설정한 값이 올바르게 전송되었는지 점검합니다.
- HMI 화면이나 모니터링 툴을 통해 온도 센서의 값을 모니터링하고, 정상적으로 통신되는지 확인합니다.
마무리
이번 글에서는 Modbus 통신에서 데이터 읽기와 쓰기 방법에 대해 설명했어요. 레지스터와 코일의 차이점부터 시작해, 각종 기능 코드와 실습 예제까지 다뤄봤습니다. Modbus는 설정이 비교적 간단하지만, 제대로 활용하려면 기능 코드와 데이터 형식을 잘 이해하고 있어야 해요.
이제 여러분도 Modbus 통신을 통해 PLC와 다양한 장치 간의 데이터를 읽고 쓸 수 있게 되었을 거예요. 궁금한 점이나 어려운 부분이 있으면 댓글로 남겨주세요. 함께 해결해봅시다!
'프로그래밍 > PLC' 카테고리의 다른 글
Modbus 통신의 고급 활용: 여러 슬레이브와의 동시 통신 (0) | 2024.12.16 |
---|---|
Modbus 통신 문제 해결: 오류 진단과 해결 방법 (2) | 2024.12.16 |
PLC에서 Modbus 설정 : 단계별 가이드 (1) | 2024.12.16 |
Modbus 네트워크의 핵심 (2) | 2024.12.12 |
PLC와 Modbus 통신의 이해 (0) | 2024.12.12 |