Files
ExperionCrawler/test_hc900_udp.py
2026-05-08 17:22:10 +09:00

97 lines
2.6 KiB
Python

#!/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)