[Modbus TCP/IP] Client/Server Module
Programming/Python2020. 11. 10. 15:45
728x90
반응형
Modbus TCP/IP의 개념은 정리하여 올려드리겠습니다.
산업현장에서 EMS(Energy Management System) 또는 PMS(Power Management System)를 구현하기위해
고가의 License 비용을 지불하여 SCADA Tool을 구매해야 했던 경험이 있습니다.
(제 기억으로는 간단한 기능만 필요했음에도 비용이 발생했었습니다.)
아래의 간단한 알고리즘에 의해 Client/Server를 동시에 수행하게 됩니다.
Open Sorce에서도 Client와 Server를 각각 구현해 놓은 경우는 종종 찾아 볼 수 있었지만
Client/Server를 동시에 구현하는 소스코드는 구하기가 어려워 직접 작성해보았습니다.
#!/bin/python
from pyModbusTCP.client import ModbusClient
from pyModbusTCP.server import ModbusServer, DataBank
from time import sleep
# Create an instance of Modbus Client
client_001 = ModbusClient(host="192.168.0.2", port=502, unit_id=1, debug=False)
# Create an instance of Modbus Server
server = ModbusServer(host="192.168.0.2", port=503, no_block=True, ipv6=False)
set_list_001 = [0]
get_list_001 = [0]
try:
# Modbus TCP Server DataBack init.
client_001.open()
if client_001.is_open():
read_list_001 = client_001.read_holding_registers(reg_addr=0, reg_nb=1)
set_list_001 = read_list_001
DataBank.set_words(address=0, word_list=read_list_001)
get_list_001 = DataBank.get_words(address=0, number=1)
client_001.close()
print("Start server . . . ")
server.start()
print("Server is online")
else:
print("Error with Client Port Open")
while True:
client_001.open()
if client_001.is_open():
read_list_001 = client_001.read_holding_registers(reg_addr=0, reg_nb=1)
if set_list_001 != read_list_001:
set_list_001 = read_list_001
DataBank.set_words(address=0, word_list=read_list_001)
client_001.close()
elif DataBank.get_words(address=0, number=1) != get_list_001:
get_list_001 = DataBank.get_words(address=0, number=1)
client_001.write_single_register(reg_addr=0, reg_value=int(get_list_001[0]))
client_001.close()
else:
client_001.close()
else:
print("port open error")
sleep(1)
except ValueError:
print("Shutdown server . . .")
server.stop()
print("Server is offline")
(단, Localhost PC에서 502번 포트에 Modbus TCP/IP Server를 에뮬레이터가 동작하고 있어야 합니다.)
반응형
'Programming > Python' 카테고리의 다른 글
파이썬 네이버 상한가 찾기 GUI [심화] (0) | 2021.05.31 |
---|---|
티스토리 api access_token 받아오기 (0) | 2021.05.07 |
파이썬 네이버 상한가 찾기 (0) | 2021.05.07 |
파이썬 네이버 블로그 자동으로 글 쓰기 (0) | 2021.05.07 |
[Modbus TCP/IP] PyModbusTCP 설치 (0) | 2020.11.11 |
댓글()