无法从BACnet设备读取点位数值:使用BAC0连接报APDU超时错误
BACnet连接超时排查解决步骤
- 确认基础信息正确性
先用ping命令测试目标device_ipaddr是否能正常连通,同时核对填写的device_instance(设备实例号)和设备侧配置完全一致,设备实例号填错是BACnet连接超时最常见的原因之一。 - 检查端口与防火墙规则
BACnet/IP默认使用UDP 47808端口,先检查本机防火墙是否开放该端口的入站、出站权限,同时确认目标设备所在网络没有ACL、防火墙拦截UDP 47808端口的流量。可使用nmap工具验证端口开放状态:nmap -sU -p 47808 [目标设备IP] - 适配跨网段通信配置
BACnet/IP要求客户端和设备在同一广播域,或配置BBMD(BACnet广播管理设备)实现跨网段通信。如果两者不在同一子网,需要在初始化BAC0时指定BBMD参数:bacnet = BAC0.lite(bbmdAddress='[BBMD设备IP]', bbmdTTL=900) - 调整设备初始化参数
你当前代码中BAC0.device指定了object_list='obj_list',如果该对象列表参数配置错误、没有提前获取到正确的对象列表,会导致点位拉取超时。可以先去掉该参数,让BAC0自动读取设备的对象列表:
同时针对响应速度慢的老旧设备,可以拉长超时参数:fx = BAC0.device(device_ipaddr, device_instance, bacnet)fx = BAC0.device(device_ipaddr, device_instance, bacnet, timeout=30) - 检查设备侧访问配置
确认BACnet设备侧没有配置IP访问限制,没有屏蔽你的主机IP,同时设备的BACnet读取服务正常开启,允许第三方客户端访问点位数据。
内容的提问来源于stack exchange,提问作者Archie
相关产品推荐
相关产品推荐

