#!/usr/bin/env python3 """ HC900 UDP/TCP 통신 테스트 - UDP port 502 (Modbus UDP) - UDP port 44818 (Honeywell proprietary) - TCP port 502 (Modbus TCP) """ import socket import struct import time HC900_IP = "192.168.0.240" START_ADDRESS = 0x0040 QUANTITY = 2 def test_udp(port, name): print(f"\n--- UDP port {port} ({name}) ---") sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(3.0) packet = struct.pack('>HHHBBHH', 0x0001, 0x0000, 0x0006, 0x01, 0x03, START_ADDRESS, QUANTITY) t0 = time.time() try: sock.sendto(packet, (HC900_IP, port)) data, addr = sock.recvfrom(1024) rt = (time.time() - t0) * 1000 print(f" 성공! RTT={rt:.1f}ms, {len(data)} bytes") print(f" {data.hex(' ')}") if len(data) >= 12: fc = data[8] bc = data[9] vals = data[10:10+bc] if len(vals) == 4: v = struct.unpack('>f', vals)[0] print(f" PV = {v:.4f}") except socket.timeout: print(f" 타임아웃 (응답 없음)") except Exception as e: print(f" 오류: {e}") finally: sock.close() def test_tcp(port, name): print(f"\n--- TCP port {port} ({name}) ---") try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(3.0) sock.connect((HC900_IP, port)) packet = struct.pack('>HHHBBHH', 0x0001, 0x0000, 0x0006, 0x01, 0x03, START_ADDRESS, QUANTITY) t0 = time.time() sock.sendall(packet) data = sock.recv(1024) rt = (time.time() - t0) * 1000 print(f" 성공! RTT={rt:.1f}ms, {len(data)} bytes") print(f" {data.hex(' ')}") if len(data) >= 12: fc = data[8] bc = data[9] vals = data[10:10+bc] if len(vals) == 4: v = struct.unpack('>f', vals)[0] print(f" PV = {v:.4f}") sock.close() except socket.timeout: print(f" 타임아웃") except ConnectionRefusedError: print(f" 연결 거부") except Exception as e: print(f" 오류: {e}") if __name__ == "__main__": print("=" * 50) print("HC900 통신 테스트 (192.168.0.240)") print("읽기: FICQ-8101.PV addr=0x0040") print("=" * 50) test_udp(502, "Modbus UDP") test_udp(2000, "Port 2000") test_udp(44818, "Honeywell proprietary") test_tcp(502, "Modbus TCP") test_tcp(2000, "TCP Port 2000") print("\n" + "=" * 50) print("테스트 완료") print("=" * 50)