2

我想实现一个简单的循环来一起提取我的 bacnet 值,而不是一一询问但得到一个错误。或者,有没有更好的方法来一起获取所有值?有人可以帮忙吗?谢谢!这是我的代码(有效):

import BAC0
bacnet = BAC0.connect()

a = bacnet.read('10.1.1.9 analogValue 1 presentValue')
print(a)

但这不起作用:

import BAC0
bacnet = BAC0.connect()

i = 0
for i = i+1:
    a = bacnet.read('10.1.1.9 analogValue % i presentValue')
    print(a)
end

它给出了错误:

ValueError: invalid literal for int() with base 10: '%'

好的,我找到了解决方案:

for i in range(1,5):
a = bacnet.read('10.1.1.9 analogValue {} presentValue'.format(i))
print(a)
4

1 回答 1

3

这将只检索模拟值......如果它是你想要的。但更全局的方法是使用该BAC0.device方法。

您将需要设备的 BACnet ID 来定义它:

import BAC0
bacnet = BAC0.lite()
deviceID = 1000 # example
dev = BAC0.device(‘10.1.1.9’, deviceID,bacnet,poll=30)
dev.points #will give you all points on which you can iterate if you want...

这将创建一个名为“dev”的设备,您可以在该设备上与许多属性进行交互。默认情况下,BAC0 将定义 AI、AV、AO、BI、BV、BO、MV、TrendLogs。

您还可以使用方括号语法获取有关点的信息或写入它们:

dev[“NameOfPoint”]
#Let’s pretend a point is named HTG-O
dev[“HTG-O”] = 100 #this will override the output
dev[“HTG-O”].value # will output the value to be used in some calculation

dev.properties #will give you more details on the point itself

使用此方法将确保 ReadPropertyMultiple 将用于读取所有点。这意味着更少的网络请求(和更快的速度)。您还将获得每个模拟点的单位......以及每个多态点的状态文本......以及描述等。

poll=30它将告诉 BAC0 每 30 秒读取一次所有变量……因此您可以选择适合您需要的变量。使用 0 将禁用轮询。默认值为 10。

每次轮询一个值时,它都会保存在点历史记录中,因此您可以使用以下方法检索所有值:

dev[“YourPoint”].history
# This will give you a Pandas series ready to be used

如果您想与具有很多点(> 1000)的设备进行交互,您可能希望禁用轮询,如果需要,可能会禁用分段......但最好的方法是使用您的变量构建自定义对象列表想。不再。

有关详细信息,请参见此处:https ://bac0.readthedocs.io/en/latest/controller.html

于 2019-02-05T02:23:29.213 回答