我试图创建一个工具,在那里你可以从一个特定的BACnet对象记录数据,通过使用BAC0:https://bac0.readthedocs.io/en/latest/
https://buildmedia.readthedocs.org/media/pdf/bac0/latest/bac0.pdf
我目前未能实现一个精确的计时器,以记录所需的时间间隔的数据(例如:100ms, 200ms, 500ms, 1000ms)。当运行以下代码时:
#=============================================================================#
# Main Loop #
#=============================================================================#
if __name__=='__main__':
i = 16
try:
bacnet = BAC0.lite(ip)
except Exception as e:
print(e)
try:
address, device_id = bacnet.whois('103061 103061')[0]
except Exception as e:
print(e)
while(i>0):
ZUL1_T.append(bacnet.readMultiple(ip, request_dict=_rpm))
TIME_T.append(time.time_ns())
i-=1
with open('zzz.csv', 'w') as file:
writer = csv.writer(file)
zeilen = []
writer.writerow(ZUL1_T)
writer.writerow(TIME_T)
我在以下时间间隔内得到请求的答案:
65ms 58ms 63ms 65ms 64ms 60ms 69ms 58ms 65ms 47ms 67ms 63ms 61ms 61ms
所以我在while循环的末尾添加了time.sleep(0.1),并期望时间间隔都在160ms左右。但是当我启动程序时,我得到了两个请求之间的时间间隔:
774ms 362ms 838ms 1015ms 299ms 281ms 160ms 1052ms 167ms 499ms 628ms 200ms 249ms 392ms 652ms
对我来说,这些时间间隔似乎完全是任意的。有没有人知道为什么会这样,或者我如何才能实现更好的解决方案?
我现在发现它在Linux电脑上运行得很好,所以问题似乎是我的Windows操作系统。是否有一种方法可以在Windows上运行它,例如给Visual Studio Code更多的CPU容量或类似的?
有很多因素会影响BACnet设备上的读数。通常,这些设备监测的温度和其他属性需要比几毫秒长得多的时间来更新。
BACnet还提供了其他机制,如果布尔点发生变化,则无需每毫秒轮询设备,它被称为COV(值的变化)。它适用于二进制和模拟值(当设备支持时)。
值得注意的是,当使用BAC0.device
时,BAC0可以以Pandas Series的形式本地记录数据。
到InfluxDB的连接器也正在开发中