[아두이노#363] (tcp/udp #16) 모드버스 마스터 4채널 릴레이로 220V전구 제어 및 전력량계(SDM120)로 전력모니터링 해보기!(녹칸다/포로리야공대가자)
프로그래밍/TCP&UDP 2021. 10. 19. 00:06
(tcp/udp #16) 모드버스 마스터 4채널 릴레이로 220V전구 제어 및 전력량계(SDM120)로 전력모니터링 해보기!
녹칸다의 TCP, UDP통신을 위한 시리즈이다!
이번편은 14편에서 구현한 노드레드(node-red)서버에 사물인터넷보드(wemos d1r1)로 구현한 rs485 모드버스(modbus) 마스터를 연결하는 것을 목표로 한다!
녹칸다의 노드레드(node-red) TCP 서버에서 클라이언트들 간의 메시지를 전달하는데 모드버스 마스터는 모드버스 프레임을 송수신 하도록 한다!
모드버스 마스터는 프레임을 수신하면 자신에게 달려있는 모드버스 슬레이브에게 request하고 슬레이브가 response한 프레임을 TCP통신으로 요청한 클라이언트에게 응답한다!
아래와 같은 수순으로 데이터가 흘러갈듯 하다!
(A클라이언트) - (서버) - (모드버스마스터) - (모드버스슬레이브) - (모드버스마스터) - (서버) - (A클라이언트)
이때 모드버스에서 사용하는 프레임을 byte stream으로 전송하기에는 여러 문제가 발생할 여지가 있다!(문제사항은 스트리밍때 확인해보자!)
문제를 방지하기 위해서 모드버스에서 사용하는 프레임을 아스키코드로 변환해서 string으로 송수신하도록 한다!
패킷 길이가 2배 길어지는 단점이 있지만 안전성을 보장할 수 있다!(녹칸다의 TCP서버의 구조적 문제를 회피하기 위해서)
아래와 같은 순서로 진행해보도록 하자!
1.모드버스 마스터에서 가변길이에 대응하는 전략이 안나와서 그것부터 반영을 해야한다!(기본형태)
(요청하는 노드쪽에서 필요한 명령에 대한 반환 길이를 함께 실어서 전송해줘야 할 듯!)
2.모드버스 4채널 릴레이를 연결하고 TCP노드와 서버쪽에서 릴레이를 제어할 수 있도록 할 것!
3.모드버스 4채널릴레이에 220V전구와 모드버스 전력량계(SDM120)를 연결해서 전력모니터링 해보기!
(서버쪽 화면에서 간단한 노드레드 UI로 제어해보기)
(별도의 IoT보드를 이용해서 전구 제어 및 전력량계 값 출력하기/2.4인치 ILI9341에 출력하면 될 듯!)
(참조) 노드레드에서 byte to float 구현하는 방법
https://stackoverflow.com/questions/42699162/javascript-convert-array-of-4-bytes-into-a-float-value-from-modbustcp-read
(모드버스 마스터 1편)
https://bota.tistory.com/1743
(모드버스 4채널 릴레이)
https://bota.tistory.com/1719
(모드버스 전력량계SDM120)
https://bota.tistory.com/1720
(예제순서)
1.(362)편 예제에서 모드버스 마스터에 요청과 응답데이터의 가변길이를 허용하기 위한 예제!
2.모드버스 마스터노드에 아이디0x01로 디지털 전력량계(SDM120)을 연결하고 아이디 0x02로 4채널 릴레이를 연결한다음 다른 TCP클라이언트에서 입력한 명령에 따라 220V전구를 4채널 릴레이를 이용해서 제어하고, 이때 디지털 전력량계에서 측정하는 값을 일정한 간격으로 요청해서 TCP클라이언트 시리얼 모니터에 출력하는 예제!