OPCUA修改采样率后订阅队列无法获取全部值问题
问题产生原因
- 你使用的python-opcua库中,
modify_monitored_item方法的queuesize参数默认值为0,该取值代表让OPC UA服务器使用默认队列大小(通常为1)。你在初始调用subscribe_data_change时设置的queuesize=2,在调用修改接口时没有主动传入该参数,导致队列大小被重置为1,因此每次发布只能拿到1个最新值,回调仅触发一次。 - OPC UA订阅存在两个核心时间参数:发布间隔(
create_subscription传入的10000ms,即服务器每10秒给客户端推送一次队列中缓存的采样数据)、采样间隔(监控项采集节点值的频率)。你修改后采样间隔为500ms远小于发布间隔,若队列大小正常为2,每次发布时服务器会返回队列中存储的最新2个采样值,触发两次回调。
解决方案
两种可行修改方式任选其一即可:
- 调用
modify_monitored_item时主动传入队列大小参数,保留初始配置的队列长度:
sub.modify_monitored_item(handle, 500, queuesize=2)
- 省略单独修改监控项的步骤,在初始订阅时就直接指定采样间隔,避免参数被重置:
# 无需再单独调用modify_monitored_item,直接在订阅时指定采样间隔 handle = sub.subscribe_data_change(counter, queuesize=2, sampling_interval=500)
内容的提问来源于stack exchange,提问作者Rony Tesler
相关产品推荐
相关产品推荐

