데이터/Modbus

산전, 미쓰비시 plc IP,Port 설정 후 python 연결 (pymodbus)

쿠와와 2021. 2. 28. 13:02

Q64RD의 CH1~CH3에서 온도 변환 디지털값을 읽는 프로그램입니다. CH1은 샘플링 처리, CH2는 500회 마다 평균 처리, CH3은 1000ms 마다 평균 처리를 실 행하여, 쓰기 에러가 발생한 경우 에러 코드를 BCD로 표시합니다.

내가 공부하고 있는 내용을 차근차근 적을 것이므로 미완일 수 있다. 

 

먼저 pdf를 한번 보자. 

modbus_통신_P91.pdf
5.63MB

위의 ppt 91페이지부터 modbus에 대한 설명을 참고해서 func_code를 작성하자. pdf 밑에 modbus TCP conding 실습도 있으니 확인하자.

 

나의 연구실에 셋팅 되어 있는 PLC -> PC 환경은 PLC -utp-> 허브 -utp-> 허브 -utp-> PC 이다. 

 

먼저IP, Port 설정을 해보자. 

 

산전

산전은 기본 포트 : 502 <- modbus 의 default 포트 값 (만약 XGT 라면 2004변)

산전 IP 설정 

 

 

미쓰비시  

 

미쓰비시는 내가 설정해주었다. -> IP설정을 위해서는 usb로 연결을 해야한다. (UDP로 불가능) 

IP, Port 설정

 

둘 다 설정 후에는 꼭 write를 해주어야지 설정이 된다. 둘 다 툴바에 Online-> Write 에 있다. 

 

아래의 코드를 plc 아이피:포트 -> pc와 연결이 되는지 확인해보자

나는 아래의 코드로 미쓰비스 plc와 산전 plc 둘 다 연결을 확인했다. 

import socket
import struct
import time
import sys

# endianness = [
#    ('@', 'native, native'),
#    ('=', 'native, standard'),
#    ('<', 'little-endian'),
#    ('>', 'big-endian'),
#    ('!', 'network'),
#    ]

PLC_IP = '100.100.100.100'

HOST = PLC_IP
PORT = 9002
ADDR = (HOST, PORT)

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# client_socket.sendall(bytearray("HTTP/1.1 200 ok\n", "ascii"))

try:
    client_socket.connect(ADDR)
    print('plc 연결 완')
except Exception as e:
    print(e)
    print('%s:%s' %ADDR)
    sys.exit(-1)

 

 

이제는 PLC 프로그램을 짜서 내가 가지고 있는 온도 센서에서 온도를 가져오는 것을 실행해보자.

 

나는 미쓰비시 PLC에 온도센서를 붙여놔서 그쪽의 프로그램을 짜보겠다. 

 

X = 입력

Y = 출력

T = 저속 타이머

HT = 고속 타이머 

K = 시간 or 횟수

RST = 리셋

SM = 특수 릴레이 (FLA

G) -> CPU 자체에서 만든 신호  ex.SM412 = 1초 클럭

1281339904.pdf
6.94MB

 

 

 

Q64RD의 CH1~CH3에서 온도 변환 디지털값을 읽는 프로그램

CH1은 샘플링 처리

CH2는 500회 마다 평균 처리

CH3은 1000ms 마다 평균 처리를 실행하여 쓰기 에러가 발생한 경우 에러 코드를 BCD로 표시

 

그럼 이제 Modbus TCP Packet 구조를 알아야한다. 

구조를 모르면 어떤게 master에서 명령어를 보내는지 모르게되니 소통할 수 없다. 

 

내가 참조한 자료

Modbus Protocol개요.pdf
0.40MB

'데이터 > Modbus' 카테고리의 다른 글

pymodbus  (2) 2021.03.18
modbus 자주쓰는 function code 정리  (0) 2021.03.08
Modbus Protocol  (0) 2021.03.05
Modbus란  (0) 2021.02.02