2

大家好,我尝试在 python 3 中使用 BAC0 包来获取 bacnet 网络中多个点的值。我使用如下内容:

bacnet = BAC0.lite(ip=x.x.x.x)
tmp_points = bacnet.readRange("11:2 analogInput 0 presentValue");

似乎不行:(错误是:

BAC0.core.io.IOExceptions.NoResponseFromController: APDU Abort Reason : unrecognizedService

在文件中我可以找到

    def readRange(
        self,
        args,
        range_params=None,
        arr_index=None,
        vendor_id=0,
        bacoid=None,
        timeout=10,
    ):
        """
        Build a ReadProperty request, wait for the answer and return the value

        :param args: String with <addr> <type> <inst> <prop> [ <indx> ]
        :returns: data read from device (str representing data like 10 or True)

        *Example*::

            import BAC0
            myIPAddr = '192.168.1.10/24'
            bacnet = BAC0.connect(ip = myIPAddr)
            bacnet.read('2:5 analogInput 1 presentValue')

        Requests the controller at (Network 2, address 5) for the presentValue of
        its analog input 1 (AI:1).
        """
4

1 回答 1

3

To read multiple properties from a device object, you must use readMultiple.

readRange will read from a property acting like an array (ex. TrendLogs objects implements records as an array, we use readRange to read them using chunks of records).

Details on how to use readMultiple can be found here : https://bac0.readthedocs.io/en/latest/read.html#read-multiple

A simple example would be

bacnet = BAC0.lite()
tmp_points = bacnet.readMultiple("11:2 analogInput 0 presentValue description")
于 2020-11-24T17:46:17.553 回答