2025. 2. 10. 16:03ㆍ프로그래밍/시스템
1장: 산업 자동화 및 PLC와의 연결
RS-485는 산업 자동화 및 공장 제어 시스템에서 중요한 역할을 합니다.
특히 PLC(Programmable Logic Controller, 프로그래머블 로직 컨트롤러) 와의 연결을 통해 다양한 센서 및 장비와 안정적으로 데이터를 송·수신할 수 있습니다.
이번 장에서는 PLC의 개념과 RS-485 사용 방식, 산업용 장비 및 센서와의 연결 방법, Python을 이용한 PLC 데이터 송·수신 예제를 다룹니다.
1. PLC(Programmable Logic Controller) 개념과 RS-485 사용 방식
✅ PLC란?
PLC는 산업용 자동화 시스템에서 장비와 센서를 제어하는 컴퓨터 기반 장치입니다.
RS-485와 같은 시리얼 통신을 활용하여 센서, 모터, HMI(터치스크린 인터페이스) 등과 연결할 수 있습니다.
📌 PLC의 특징
- 산업 환경에서 신뢰성이 높은 제어 장치
- 디지털 및 아날로그 신호 처리 가능
- 센서 및 장비와의 통신을 위해 RS-232, RS-485, Modbus 등을 사용
- 논리 기반 자동화 시스템 구축 가능 (릴레이, 타이머, 카운터 등)
📌 PLC에서 RS-485가 사용되는 이유
- 멀티 드롭(Multi-Drop) 방식 지원 → 여러 개의 장치(센서, 모터 컨트롤러 등)와 연결 가능
- 장거리 데이터 전송 가능 → 공장 내 다양한 장비를 하나의 버스로 연결
- 노이즈 저항성이 뛰어남 → 전자기 간섭(EMI)에 강하여 산업 환경에 적합
2. 산업용 장비 및 센서와 RS-485 연결 방법
✅ 산업 환경에서 RS-485 활용 사례
RS-485는 다양한 산업 장비 및 센서와 연결되어 데이터를 송·수신할 수 있습니다.
📌 PLC와 연결되는 대표적인 산업용 장비
장비 | 사용 예시 |
온도 센서 | 공장 내 환경 모니터링 |
압력 센서 | 유압, 공압 시스템 제어 |
모터 드라이버 | 컨베이어 벨트 및 로봇 팔 제어 |
HMI (터치스크린 인터페이스) | 작업자 인터페이스 제공 |
Modbus RTU 장비 | PLC 간 데이터 통신 |
📌 PLC에서 RS-485를 사용하여 다수의 장비와 연결할 때의 배선 방법
[PLC] RS-485 A(+) ↔ A(+) [센서1] ↔ A(+) [센서2] ↔ A(+) [모터]
RS-485 B(-) ↔ B(-) [센서1] ↔ B(-) [센서2] ↔ B(-) [모터]
💡 PLC의 RS-485 A(+)와 B(-)는 모든 장비의 A(+)와 B(-)에 연결되어야 합니다.
💡 네트워크의 끝단에는 반드시 터미네이션 저항(120Ω)을 추가해야 신호 반사를 방지할 수 있습니다.
✅ PLC와 RS-485 장비 간 배선 방법
PLC는 일반적으로 RS-485 포트를 통해 센서 및 모터 드라이버와 연결됩니다.
Python을 활용하여 RS-485 기반의 장비와 PLC 간 통신을 실습해 보겠습니다.
📌 배선 예제 (PLC ↔ RS-485 센서)
PLC RS-485 단자 | 센서 RS-485 단자 |
A(+) | A(+) |
B(-) | B(-) |
GND | GND |
3. PLC와 Python을 활용한 데이터 송·수신 예제
PLC와 RS-485를 통해 온도 센서 데이터를 읽어오는 Python 코드를 작성해 보겠습니다.
PLC는 Modbus RTU 프로토콜을 지원하는 경우가 많기 때문에, Python에서는 pymodbus 라이브러리를 사용하여 데이터를 송·수신합니다.
✅ Python을 사용한 RS-485 데이터 읽기 (Modbus RTU 방식)
📌 pymodbus 라이브러리 설치
pip install pymodbus
📌 PLC의 Modbus RTU 데이터를 읽어오는 Python 코드
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
# Modbus RTU 클라이언트 설정
client = ModbusClient(
method='rtu', # RTU 모드 사용
port='COM3', # Windows: 'COM3', Linux/Mac: '/dev/ttyUSB0'
baudrate=9600, # Baud Rate 설정
timeout=1, # 응답 대기 시간
parity='N', # 패리티 없음
stopbits=1, # 정지 비트 1개
bytesize=8 # 데이터 비트 8개
)
# PLC에 연결
if client.connect():
print("PLC 연결 성공")
# 주소 0x0001의 온도 센서 데이터 읽기
response = client.read_holding_registers(address=0x0001, count=1, unit=1)
if response.isError():
print("데이터 읽기 실패")
else:
temperature = response.registers[0] / 10.0 # 센서 값 변환
print(f"온도 센서 값: {temperature}°C")
client.close() # 연결 종료
else:
print("PLC 연결 실패")
📌 이 코드는 RS-485를 통해 PLC로부터 온도 데이터를 읽어오는 예제입니다.
📌 Modbus RTU 방식으로 데이터를 요청하고, read_holding_registers()를 사용하여 응답을 받습니다.
✅ Python을 사용한 PLC로 데이터 전송 (출력 값 변경)
PLC의 특정 주소로 값을 전송하여 온도 경보(Alarm) 기능을 설정하는 예제입니다.
# 온도 경보 설정 (주소 0x0002에 1을 기록)
response = client.write_register(address=0x0002, value=1, unit=1)
if response.isError():
print("데이터 쓰기 실패")
else:
print("온도 경보 설정 완료")
client.close()
📌 PLC의 특정 레지스터에 데이터를 기록하여 온도 경보를 활성화하는 코드입니다.
📌 요약
✅ PLC는 산업 자동화에서 중요한 역할을 하며, RS-485를 사용하여 센서 및 모터 드라이버와 연결 가능
✅ RS-485는 멀티 드롭 방식으로 여러 개의 장비와 PLC 간 통신을 지원
✅ PLC와 Python을 사용하여 RS-485 데이터를 송·수신 가능
✅ Python의 pymodbus 라이브러리를 활용하여 Modbus RTU 방식으로 PLC 데이터를 제어할 수 있음
'프로그래밍 > 시스템' 카테고리의 다른 글
시리얼 통신 실전 응용 및 마무리 - 3. 무선 시리얼 통신 (블루투스, LoRa) 및 추가 학습 자료 안내 (0) | 2025.02.10 |
---|---|
시리얼 통신 실전 응용 및 마무리 - 2. RS-485를 활용한 다중 노드(Multi-Drop) 통신 실전 예제 (0) | 2025.02.10 |
시리얼 통신 소프트웨어 실습 - 3. 아두이노 및 라즈베리파이와 시리얼 통신하기 (0) | 2025.02.10 |
시리얼 통신 소프트웨어 실습 - 2. RS-232 / RS-485를 활용한 데이터 송수신 실습 (0) | 2025.02.10 |
시리얼 통신 소프트웨어 실습 - 1. Python을 활용한 시리얼 통신 (pyserial 라이브러리) (0) | 2025.02.10 |