System.IO.BACnet - send ReadPropertyMultiple without specifying BacnetPropertyReference->propertyArrayIndex

399 views Asked by At

I am using System.IO.BACnet library for my C# BACNet client.

I am trying to send to server "ReadPropertyMultiple" request, however I am unable to read non-array BACNet properties, since the System.IO.BACnet.BacnetClient.ReadPropertyMultipleRequest requires list of System.IO.BACnet.BacnetPropertyReference(s) ...

public bool ReadPropertyMultipleRequest(BacnetAddress address, BacnetObjectId objectId, IList<BacnetPropertyReference> propertyIdAndArrayIndex, out IList<BacnetReadAccessResult> values, byte invokeId = 0);

.. and the System.IO.BACnet.BacnetPropertyReference requires propertyArrayIndex ..

public struct BacnetPropertyReference
{
    public uint propertyIdentifier;
    public uint propertyArrayIndex;

    public BacnetPropertyReference(uint id, uint arrayIndex);

    public BacnetPropertyIds GetPropertyId();
    public override string ToString();
}

.. which, when not set, defaults to 0. This causes, that after request with this list is sent, all properties are requested with propertyArrayIndex: 0, which fail for non-array object properties.

Example:

Request:

enter image description here

Response:

enter image description here

What is the right way to not add the propertyArrayIndex into request and thus be able to read non-array properties with ReadPropertyMultiple request?

2

There are 2 answers

0
user10099 On BEST ANSWER

The solution is to set propertyArrayIndex = uint.MaxValue.

For example:

BacnetPropertyReference reff = new BacnetPropertyReference((uint) BacnetPropertyIds.PROP_PRESENT_VALUE, uint.MaxValue);
1
DennisVM-D2i On

If you request array-index "0" you should (in theory) receive the number of (following) elements, and not the full list of values (/remaining elements containing values).

Can't you use (the) 'Read-Property' (service) for non-array items (?).