97 lines
2.6 KiB
Python
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)
|