Python

[pymodbus] PLC 32bit 쓰기

Derran 2023. 1. 10. 21:51

PLC에게 값을 보낼때 65535 보다 큰 수를 보내야 하는 경우가 있다.

하지만 PLC registers는 기본적으로 16bit를 지원하기 때문에 1개의 메모리 주소를 가지고는 65535보다 큰 수를 보낼수는 없다.

그렇기 때문에 PLC 담당자와 소통하여  2개의 메모리 주소를 받아야 한다.

 

그렇다면 2개의 메모리 주소를 받았다는 가정하에 아래 간단한 코드로 값이 제대로 들어갔는지 확인해주면 된다.

from pymodbus.client.sync import ModbusTcpClient

ip_address = f"{PLC_IP}"

class TEST():
    def __init__(self):
        
        self.client = ModbusTcpClient(ip_address)
        self.start_mem = f"{메모리 시작 주소}"
        self.value = 65538
        self.run()

    def run(self):
    
        cvt_32 = [int(self.value)&0XFFFF, (int(self.value)>>16)&0xFFFF]
        self.client.write_registers(self.start_mem,cvt_32,unit=1)


if __name__ =='__main__':
    TEST()