从BACnet设备读取点值时出错

2024-09-30 04:32:23 发布

您现在位置:Python中文网/ 问答频道 /正文

import BAC0

bacnet = BAC0.connect()

my_obj_list = [('file', 1),
             ('analogInput', 1002),
             ('analogInput', 1),
             ('analogInput', 1006),
             ('analogInput', 1011),
             ('analogInput', 1010),
             ('analogInput', 1001)]


# # Provide it as an argument
fx = BAC0.device('16102:19', 1610219, bacnet, object_list = my_obj_list)
p=fx.points
for point in p:
    print(point)

代码按预期返回点值,但引发异常。不知道我做错了什么。在

错误

2018-11-26 17:45:51,864 - INFO | Starting BAC0 version 0.99.944 (Lite) 2018-11-26 17:45:51,908 - INFO | Using ip : 192.168.0.16 2018-11-26 17:45:51,909 - INFO | Starting app... 2018-11-26 17:45:51,910 - INFO | BAC0 started 2018-11-26 17:45:51,910 - INFO | Registered as Simple BACnet/IP App 2018-11-26 17:45:54,529 - INFO | Changing device state to DeviceDisconnected'> 2018-11-26 17:45:54,726 - INFO | Changing device state to RPDeviceConnected'> 2018-11-26 17:45:54,928 - INFO | Device 1610219:[device1610219] found... building points list 2018-11-26 17:45:57,674 - INFO | Ready! 2018-11-26 17:45:57,676 - INFO | Polling started, values read every 10 seconds Exception in thread rpm_poll: Traceback (most recent call last): File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\threading.py", line 916, in _bootstrap_inner self.run() File "C:_website\BacTest\venv\lib\site-packages\BAC0\tasks\TaskManager.py", line 45, in run self.process() File "C:_website\BacTest\venv\lib\site-packages\BAC0\tasks\TaskManager.py", line 52, in process self.task() File "C:_website\BacTest\venv\lib\site-packages\BAC0\tasks\Poll.py", line 77, in task self.device.read_multiple(list(self.device.points_name), points_per_request=25) File "C:_website\BacTest\venv\lib\site-packages\BAC0\core\devices\mixins\read_mixin.py", line 452, in read_multiple self.read_single(each,points_per_request=1, discover_request=discover_request) File "C:_website\BacTest\venv\lib\site-packages\BAC0\core\devices\mixins\read_mixin.py", line 459, in read_single return self.properties.network.read(request) File "C:_website\BacTest\venv\lib\site-packages\BAC0\core\io\Read.py", line 87, in read args_split, arr_index=arr_index, vendor_id=vendor_id, bacoid=bacoid)) File "C:_website\BacTest\venv\lib\site-packages\BAC0\core\io\Read.py", line 310, in build_rp_request addr, obj_type, obj_inst, prop_id = args[:4] ValueError: not enough values to unpack (expected 4, got 2)

设备1610219/ai_2:2.30名词 设备1610219/区域温度:45.00华氏度 设备1610219/ai_6:75.00华氏度 设备1610219/ai_11:1.00 65535 设备1610219/ai_10:-53.30华氏度 设备1610219/ai_1:0.00名词

进程结束,退出代码为0


Tags: inpyselfinforeadvenvlibpackages
1条回答
网友
1楼 · 发布于 2024-09-30 04:32:23

我做了一些测试试图复制你的错误,我认为你可能是在与一个奇怪的设备战斗。在

使用完全相同的脚本,我成功地阅读了所有要点。在

如果我可以建议,使用默认的“poll”参数声明您的设备将确保每10秒读取所有点。在

当调用时,使用点将强制读取点(一个一个),这将减慢进程。为此,我将使用point.lastValue

当设备在内部轮询其点列表时,它将使用一个ReadPropertyMultiple同时读取一堆点和属性。它更有效。在

比如(玩格式…):

import BAC0

bacnet = BAC0.lite()

# # Provide it as an argument
fx = BAC0.device('2:5', 5, bacnet)

for name in fx.points_name:
    if fx[name].units:
        val = '{:>10.2f}'.format(fx[name].lastValue)
        units = fx[name].units
    else:
        units = '({})'.format(fx[name].properties.units_state)
        val = '{:>10}'.format(fx[name].lastValue)
    print('{:<20} : {} {:<10}'.format(fx[name].properties.name, val, units))

(结果摘录)

^{pr2}$

如果您一直收到问题,请在此处发布:https://github.com/ChristianTremblay/BAC0/issues

相关问题 更多 >

    热门问题