시리얼 통신 실전 응용 및 마무리 - 1. 산업 자동화 및 PLC와의 연결

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 데이터를 제어할 수 있음