반응형
LS 산전의 PLC와 시리얼(RS232) 통신을 위해 간단한 프로그램을 구현해 보았습니다.
C# 코드에서 사용해본 방법을 사이트 참고를 통해 기본 코드를 받아 좀 더 직관적으로 코드를 수정해 보았습니다.
통신 프로토콜( 연속 읽기)
소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
'''
pip install pyserial
'''
from dataclasses import dataclass, field
import serial
# 통신용 클래스 -------------------------------------------------
@dataclass(unsafe_hash=True)
class ReadCommd:
Station_no : str
Instruction : str
No_of_blocks : str
Variable_Length : str
Variable_Name : str
@property
def protocol(self):
cmd = '\x05{0}{1}{2}{3}{4}\x04'.format(
self.Station_no,
self.Instruction,
self.No_of_blocks,
self.Variable_Length,
self.Variable_Name)
#문자열-->바이트
return cmd.encode(encoding="utf-8")
# 메인 함수 ---------------------------------------------------
if __name__ == '__main__':
#시리얼 포트 연결(COM1,9600,n,1,8)
ser = serial.Serial(
port='COM1',
baudrate = 9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1
)
# 읽기 명령 생성
tx = ReadCommd('00','RSS','01','06','%MW100').protocol
# 데이터 쓰기
ser.write(tx, encoding = "utf-8")
#데이터 읽기
rx = ser.readline().decode('utf-8')
if rx[:1] == chr(6): # <ACK> (0x06)
int(rx[-5:-1], 16) # 16진수로 리턴되는 카운트를 10진수로 변환
elif rx[:1] == chr(21): # <NAK> (0x15)
print('Error = ' + rx[-5:-1]) # 부록 3.1 XGT 서버 에러코드'를 참고
# 포트닫기
ser.close()
|
cs |
PLC 통신 매뉴얼
참고 사이트
반응형
'파이썬 > 파이썬' 카테고리의 다른 글
[ 파이썬 ] HiveMQ MQTT 통신 테스트 (0) | 2022.04.19 |
---|---|
[ 파이썬 ] 캠핑장 예약 조회(실시간)-데이터 테이블 비교 (0) | 2022.01.14 |
[ 파이썬 ] 텔레그램 에코봇 만들기 (0) | 2022.01.07 |
[ 파이썬 ] 네이버 자동 로그인 후 클릭 이벤트 응모하기 (0) | 2022.01.07 |
[ 파이썬 ] 데이터 프레임 비교(최신 정보만 추출하기) (0) | 2022.01.07 |
댓글