public void ReadProperties(Device device, List <Property> properties) { Property property = new Property(); property.Tag = BACnetEnums.BACNET_APPLICATION_TAG.BACNET_APPLICATION_TAG_ENUMERATED; if (!BACStack.SendReadProperty( device, device.Instance, 0, // Array[0] is Object Count BACnetEnums.BACNET_OBJECT_TYPE.OBJECT_DEVICE, BACnetEnums.BACNET_PROPERTY_ID.PROP_OBJECT_LIST, property)) { return; } if (property.Tag != BACnetEnums.BACNET_APPLICATION_TAG.BACNET_APPLICATION_TAG_UNSIGNED_INT) { return; } int i, tries; uint total = property.ValueUInt; properties.Clear(); if (total > 0) { for (i = 1; i <= total; i++) { // Read through Array[x] up to Object Count // Need to try the read again if it times out tries = 0; while (tries < 5) { Console.WriteLine("Device : {0} , Property : {1}", device.ServerEP.Address.ToString(), i); tries++; if (BACStack.SendReadProperty( device, device.Instance, i, // each array index BACnetEnums.BACNET_OBJECT_TYPE.OBJECT_DEVICE, BACnetEnums.BACNET_PROPERTY_ID.PROP_OBJECT_LIST, property)) { tries = 5; // Next object if (property.Tag != BACnetEnums.BACNET_APPLICATION_TAG.BACNET_APPLICATION_TAG_OBJECT_ID) { tries = 5; // continue; } properties.Add(property); Console.WriteLine(property.ValueObjectInstance); } } } } }
private void GetObjectsBtn_Click(object sender, EventArgs e) { // Read the Device Array ObjectListLabel.Text = ""; Property property = new Property(); property.Tag = BACnetEnums.BACNET_APPLICATION_TAG.BACNET_APPLICATION_TAG_ENUMERATED; if (!BACStack.SendReadProperty( BACnetData.DeviceIndex, BACnetData.Devices[BACnetData.DeviceIndex].Instance, 0, // Array[0] is Object Count BACnetEnums.BACNET_OBJECT_TYPE.OBJECT_DEVICE, BACnetEnums.BACNET_PROPERTY_ID.PROP_OBJECT_LIST, property)) { ObjectListLabel.Text = "Read Property Object List Error (1)"; return; } if (property.Tag != BACnetEnums.BACNET_APPLICATION_TAG.BACNET_APPLICATION_TAG_UNSIGNED_INT) { ObjectListLabel.Text = "Read Property Object List Error (2)"; return; } ObjectListLabel.Text = property.ValueUInt.ToString() + " objects found"; int i, tries; uint total = property.ValueUInt; ObjectList.Items.Clear(); if (total > 0) { for (i = 1; i <= total; i++) { // Read through Array[x] up to Object Count // Need to try the read again if it times out tries = 0; while (tries < 5) { tries++; if (BACStack.SendReadProperty( BACnetData.DeviceIndex, BACnetData.Devices[BACnetData.DeviceIndex].Instance, i, // each array index BACnetEnums.BACNET_OBJECT_TYPE.OBJECT_DEVICE, BACnetEnums.BACNET_PROPERTY_ID.PROP_OBJECT_LIST, property)) { tries = 5; // Next object string s; if (property.Tag != BACnetEnums.BACNET_APPLICATION_TAG.BACNET_APPLICATION_TAG_OBJECT_ID) { tries = 5; // continue; } switch (property.ValueObjectType) { case BACnetEnums.BACNET_OBJECT_TYPE.OBJECT_DEVICE: s = "Device"; break; case BACnetEnums.BACNET_OBJECT_TYPE.OBJECT_ANALOG_INPUT: s = "Analog Input"; break; case BACnetEnums.BACNET_OBJECT_TYPE.OBJECT_ANALOG_OUTPUT: s = "Analog Output"; break; case BACnetEnums.BACNET_OBJECT_TYPE.OBJECT_ANALOG_VALUE: s = "Analog value"; break; case BACnetEnums.BACNET_OBJECT_TYPE.OBJECT_BINARY_INPUT: s = "Binary Input"; break; case BACnetEnums.BACNET_OBJECT_TYPE.OBJECT_BINARY_OUTPUT: s = "Binary Output"; break; case BACnetEnums.BACNET_OBJECT_TYPE.OBJECT_BINARY_VALUE: s = "Binary value"; break; default: s = "Other"; break; } s = s + " " + property.ValueObjectInstance.ToString(); ObjectList.Items.Add(s); } } } } }