private void OK_Click(object sender, EventArgs e) { try { BacnetObjectId?device = null; uint ArrayIdx = ASN1.BACNET_ARRAY_ALL; if (Reference_Device.Text != "") { device = new BacnetObjectId(BacnetObjectTypes.OBJECT_DEVICE, Convert.ToUInt16(Reference_Device.Text)); } if (Reference_Array.Text != "") { ArrayIdx = Convert.ToUInt16(Reference_Array.Text); } BacnetDeviceObjectPropertyReference newref = new BacnetDeviceObjectPropertyReference( new BacnetObjectId((BacnetObjectTypes)(Reference_ObjType.SelectedItem as Enumcombo).enumValue, Convert.ToUInt32(Reference_ObjId.Text) & 0x3FFFFF), (BacnetPropertyIds)(Reference_Prop.SelectedItem as Enumcombo).enumValue, device, ArrayIdx); if (!ObjRef.Equals(newref)) { ObjRef = newref; RefModified = true; } OutOK = true; Close(); } catch { Close(); } }
private void AddPropertyRefentry(BacnetDeviceObjectPropertyReference bopr, int IdxRemove) { String newText; if (bopr.deviceIndentifier.type != BacnetObjectTypes.OBJECT_DEVICE) { newText = bopr.objectIdentifier.ToString().Substring(7) + " - " + ((BacnetPropertyIds)bopr.propertyIdentifier).ToString().Substring(5) + " on localDevice"; } else { newText = bopr.objectIdentifier.ToString().Substring(7) + " - " + ((BacnetPropertyIds)bopr.propertyIdentifier).ToString().Substring(5) + " on DEVICE:" + bopr.deviceIndentifier.instance.ToString(); } if (IdxRemove != -1) { listReferences.Items.RemoveAt(IdxRemove); // remove an old entry } ListViewItem lvi = new ListViewItem(); // add a new one lvi.Text = newText; lvi.Tag = bopr; lvi.ImageIndex = MainDialog.GetIconNum(bopr.objectIdentifier.type); listReferences.Items.Add(lvi); }
/*****************************************************************************************************/ /* This is the objective of this sample ! */ /*****************************************************************************************************/ static void handler_OnEventNotify(BacnetClient sender, BacnetAddress adr, byte invoke_id, BacnetEventNotificationData EventData, bool need_confirm) { string val; // if event enrollment dispaly which datapoint is being watched if (EventData.eventObjectIdentifier.type == BacnetObjectTypes.OBJECT_EVENT_ENROLLMENT) { IList <BacnetValue> values; sender.ReadPropertyRequest(adr, EventData.eventObjectIdentifier, BacnetPropertyIds.PROP_OBJECT_PROPERTY_REFERENCE, out values); BacnetDeviceObjectPropertyReference obj = (BacnetDeviceObjectPropertyReference)values[0].Value; val = adr.ToString() + ":" + EventData.initiatingObjectIdentifier.type + ":" + EventData.initiatingObjectIdentifier.instance + ":" + EventData.eventObjectIdentifier.type + ":" + EventData.eventObjectIdentifier.instance + " object Type : " + obj.objectIdentifier.type + " object Instance :" + obj.objectIdentifier.instance + " object Property :" + obj.propertyIdentifier; } else { val = adr.ToString() + ":" + EventData.initiatingObjectIdentifier.type + ":" + EventData.initiatingObjectIdentifier.instance + ":" + EventData.eventObjectIdentifier.type + ":" + EventData.eventObjectIdentifier.instance; } if (need_confirm) { sender.SimpleAckResponse(adr, BacnetConfirmedServices.SERVICE_CONFIRMED_EVENT_NOTIFICATION, invoke_id); } // Just to show how Acknowledgement can be programmed. Never Ack an alarm like this without tested the source, the reason, ... and normally with a human action if (EventData.ackRequired) { sender.AlarmAcknowledgement(adr, EventData.eventObjectIdentifier, EventData.toState, "Alarmlistener", EventData.timeStamp, new BacnetGenericTime(DateTime.Now, BacnetTimestampTags.TIME_STAMP_DATETIME)); } Console.WriteLine(val + " " + EventData.fromState + " to " + EventData.toState + " " + EventData.notifyType.ToString()); }
public void AddPropertyReference(BacnetDeviceObjectPropertyReference reference) { lock (lockObj) { if (m_PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES.references == null) { m_PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES.references = new List <BacnetDeviceObjectPropertyReference>(); } m_PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES.references.Add(reference); } }
private void WriteObjectsPropertiesReferences() { List <BacnetValue> values = new List <BacnetValue>(); if (listReferences.Items.Count != 0) { values = new List <BacnetValue>(); foreach (ListViewItem lvi in listReferences.Items) { BacnetDeviceObjectPropertyReference b = (BacnetDeviceObjectPropertyReference)lvi.Tag; values.Add(new BacnetValue(b)); } } comm.WritePropertyRequest(adr, schedule_id, BacnetPropertyIds.PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES, values); }
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, System.Type destinationType) { if (destinationType == typeof(System.String) && value is BacnetDeviceObjectPropertyReference) { BacnetDeviceObjectPropertyReference pr = (BacnetDeviceObjectPropertyReference)value; return("Reference to " + pr.objectIdentifier.ToString()); } else { return(base.ConvertTo(context, culture, value, destinationType)); } }
public EditPropertyObjectReference(BacnetDeviceObjectPropertyReference ObjRef) { this.ObjRef = ObjRef; InitializeComponent(); foreach (BacnetObjectTypes bot in Enum.GetValues(typeof(BacnetObjectTypes))) { Reference_ObjType.Items.Add(new Enumcombo(bot.ToString().Substring(7), (uint)bot)); } for (int i = 0; i < Reference_ObjType.Items.Count; i++) { if ((Reference_ObjType.Items[i] as Enumcombo).enumValue == (uint)ObjRef.objectIdentifier.type) { Reference_ObjType.SelectedIndex = i; break; } } foreach (BacnetPropertyIds bpi in Enum.GetValues(typeof(BacnetPropertyIds))) { Reference_Prop.Items.Add(new Enumcombo(bpi.ToString().Substring(5), (uint)bpi)); } for (int i = 0; i < Reference_Prop.Items.Count; i++) { if ((Reference_Prop.Items[i] as Enumcombo).enumValue == (uint)ObjRef.propertyIdentifier) { Reference_Prop.SelectedIndex = i; break; } } Reference_ObjId.Text = ObjRef.objectIdentifier.instance.ToString(); if (ObjRef.deviceIndentifier.type == BacnetObjectTypes.OBJECT_DEVICE) { Reference_Device.Text = ObjRef.deviceIndentifier.instance.ToString(); } if (ObjRef.arrayIndex != ASN1.BACNET_ARRAY_ALL) { Reference_Array.Text = ObjRef.arrayIndex.ToString(); } }
// Add a new entry at the right place private void addToolStripMenuItem_Click(object sender, EventArgs e) { if (this.ActiveControl == Schedule) // In the Schedule List { AddScheduleNode(new String[] { "00:00:00 = 0" }); } else { BacnetDeviceObjectPropertyReference newobj = new BacnetDeviceObjectPropertyReference(new BacnetObjectId(), BacnetPropertyIds.PROP_PRESENT_VALUE); EditPropertyObjectReference form = new EditPropertyObjectReference(newobj); form.ShowDialog(); if (form.OutOK == true) { AddPropertyRefentry(form.ObjRef, -1); } } }
private void ReadObjectsPropertiesReferences() { listReferences.BeginUpdate(); listReferences.Items.Clear(); try { IList <BacnetValue> value; if (comm.ReadPropertyRequest(adr, schedule_id, BacnetPropertyIds.PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES, out value)) { foreach (BacnetValue bv in value) { BacnetDeviceObjectPropertyReference bopr = (BacnetDeviceObjectPropertyReference)bv.Value; AddPropertyRefentry(bopr, -1); } } } catch { } listReferences.EndUpdate(); }
// Add a new entry at the right place private void addToolStripMenuItem_Click(object sender, EventArgs e) { if (this.ActiveControl == Schedule) // In the Schedule List { if (mySelectedScheduleNode != null) { TreeNode T = new TreeNode("00:00:00 = 0", 1, 1); if (mySelectedScheduleNode.Parent == null) { mySelectedScheduleNode.Nodes.Add(T); mySelectedScheduleNode.Expand(); // sometimes neeeded } else { mySelectedScheduleNode.Parent.Nodes.Add(T); } // Modify mode mySelectedScheduleNode = T; modifyToolStripMenuItem_Click(null, null); } } else { BacnetDeviceObjectPropertyReference newobj = new BacnetDeviceObjectPropertyReference(new BacnetObjectId(), BacnetPropertyIds.PROP_PRESENT_VALUE); EditPropertyObjectReference form = new EditPropertyObjectReference(newobj); form.ShowDialog(); if (form.OutOK == true) { AddPropertyRefentry(form.ObjRef, -1); } } }
// Copy the Present value into each reference properties value protected virtual void DoDispatchValue() { if ((m_PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES.references == null) || (Mydevice == null)) { return; } foreach (object obj in m_PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES.references) { BacnetDeviceObjectPropertyReference reference = (BacnetDeviceObjectPropertyReference)obj; // reference.deviceIndentifier.type is not set to OBJECT_DEVICE for local object reference if (reference.deviceIndentifier.type != BacnetObjectTypes.OBJECT_DEVICE) // local object { BaCSharpObject bcs = Mydevice.FindBacnetObject(reference.objectIdentifier); if (bcs != null) { BacnetPropertyValue value = new BacnetPropertyValue(); if (m_PROP_PRIORITY == 0) { value.priority = (byte)16; } else { value.priority = (byte)m_PROP_PRIORITY; } value.property = new BacnetPropertyReference((uint)reference.propertyIdentifier, reference.arrayIndex); value.value = new BacnetValue[] { new BacnetValue(m_PROP_PRESENT_VALUE) }; bcs.WritePropertyValue(value, false); } } else { KeyValuePair <BacnetClient, BacnetAddress>?recipient = null; try { // SuroundingDevices is updated with Iam messages recipient = Mydevice.SuroundingDevices[reference.deviceIndentifier.instance]; } catch { } if (recipient == null) { return; } BacnetValue[] value = new BacnetValue[] { new BacnetValue(m_PROP_PRESENT_VALUE) }; uint wp = m_PROP_PRIORITY; System.Threading.ThreadPool.QueueUserWorkItem((o) => { recipient.Value.Key.WritePriority = wp; recipient.Value.Key.BeginWritePropertyRequest(recipient.Value.Value, reference.objectIdentifier, (BacnetPropertyIds)reference.propertyIdentifier, value, false); } , null); } } }
public static BacnetValue DeserializeValue(string value, BacnetApplicationTags type) { switch (type) { case BacnetApplicationTags.BACNET_APPLICATION_TAG_NULL: return(value == "" ? new BacnetValue(type, null) : new BacnetValue(value)); case BacnetApplicationTags.BACNET_APPLICATION_TAG_BOOLEAN: return(new BacnetValue(type, bool.Parse(value))); case BacnetApplicationTags.BACNET_APPLICATION_TAG_UNSIGNED_INT: return(new BacnetValue(type, uint.Parse(value))); case BacnetApplicationTags.BACNET_APPLICATION_TAG_SIGNED_INT: return(new BacnetValue(type, int.Parse(value))); case BacnetApplicationTags.BACNET_APPLICATION_TAG_REAL: return(new BacnetValue(type, float.Parse(value, CultureInfo.InvariantCulture))); case BacnetApplicationTags.BACNET_APPLICATION_TAG_DOUBLE: return(new BacnetValue(type, double.Parse(value, CultureInfo.InvariantCulture))); case BacnetApplicationTags.BACNET_APPLICATION_TAG_OCTET_STRING: try { return(new BacnetValue(type, Convert.FromBase64String(value))); } catch { return(new BacnetValue(type, value)); } case BacnetApplicationTags.BACNET_APPLICATION_TAG_CONTEXT_SPECIFIC_DECODED: try { return(new BacnetValue(type, Convert.FromBase64String(value))); } catch { return(new BacnetValue(type, value)); } case BacnetApplicationTags.BACNET_APPLICATION_TAG_CHARACTER_STRING: return(new BacnetValue(type, value)); case BacnetApplicationTags.BACNET_APPLICATION_TAG_BIT_STRING: return(new BacnetValue(type, BacnetBitString.Parse(value))); case BacnetApplicationTags.BACNET_APPLICATION_TAG_ENUMERATED: return(new BacnetValue(type, uint.Parse(value))); case BacnetApplicationTags.BACNET_APPLICATION_TAG_DATE: return(new BacnetValue(type, DateTime.Parse(value))); case BacnetApplicationTags.BACNET_APPLICATION_TAG_TIME: return(new BacnetValue(type, DateTime.Parse(value))); case BacnetApplicationTags.BACNET_APPLICATION_TAG_OBJECT_ID: return(new BacnetValue(type, BacnetObjectId.Parse(value))); case BacnetApplicationTags.BACNET_APPLICATION_TAG_READ_ACCESS_SPECIFICATION: return(new BacnetValue(type, BacnetReadAccessSpecification.Parse(value))); case BacnetApplicationTags.BACNET_APPLICATION_TAG_OBJECT_PROPERTY_REFERENCE: return(new BacnetValue(type, BacnetDeviceObjectPropertyReference.Parse(value))); default: return(new BacnetValue(type, null)); } }
private void btnSchedule_Click(object sender, EventArgs e) { Int32 liDeviceID = Convert.ToInt32(ddlScheduleDevice.SelectedValue); Int32 liObjectID = Convert.ToInt32(Convert.ToString(ddlScheduleObject.SelectedValue).Split('|')[1]); string lsNewPresentvalue = Convert.ToString(txtScheduleValue.Text); Int32 liDaySelected = Convert.ToInt32(ddlScheduleDay.SelectedValue); if (liDeviceID > -1 && liObjectID > -1 && !string.IsNullOrEmpty(lsNewPresentvalue) && !string.IsNullOrEmpty(txtScheduleHours.Text) && !string.IsNullOrEmpty(txtScheduleMinutes.Text) && !string.IsNullOrEmpty(txtScheduleSeconds.Text)) { using (var loESDLutronEntities = new ESDLutronEntities()) { var loBACnetDeviceDetail = loESDLutronEntities.BACnetDevices .Where(x => x.device_id == liDeviceID && x.object_type.ToUpper() == LutronFloorObjectType.Device) .Select(x => x).FirstOrDefault(); int?liTopInstanceID = loESDLutronEntities.BACnetDevices .Where(x => x.device_id == liDeviceID && x.object_type.ToUpper() == LutronFloorObjectType.SCHEDULE) .Select(x => x.object_instance).OrderByDescending(x => x.Value).FirstOrDefault(); BacnetAddress loBacnetAddress; loBacnetAddress = new BacnetAddress(BacnetAddressTypes.IP, loBACnetDeviceDetail.network_id); loBacnetAddress.RoutedSource = new BacnetAddress(BacnetAddressTypes.IP, loBACnetDeviceDetail.routed_source, (ushort)loBACnetDeviceDetail.routed_net); //var deviceObjId = new BacnetObjectId(BacnetObjectTypes.OBJECT_DEVICE, (uint)liDeviceID); //var objectIdList = await moBacnetClient.ReadPropertyAsync(loBacnetAddress, deviceObjId, BacnetPropertyIds.PROP_OBJECT_LIST); //IList<BacnetValue> loDeviceObject; //moBacnetClient.ReadPropertyRequest(loBacnetAddress, new BacnetObjectId(BacnetObjectTypes.OBJECT_DEVICE, (uint)liDeviceID), BacnetPropertyIds.PROP_OBJECT_LIST, out loDeviceObject); //IList<BacnetValue> loScheduleValues; //moBacnetClient.ReadPropertyRequest(loBacnetAddress, new BacnetObjectId(BacnetObjectTypes.OBJECT_SCHEDULE, (uint)11), BacnetPropertyIds.PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES, out loScheduleValues); //IList<BacnetValue> loWeekValues; //moBacnetClient.ReadPropertyRequest(loBacnetAddress, new BacnetObjectId(BacnetObjectTypes.OBJECT_SCHEDULE, (uint)11), BacnetPropertyIds.PROP_WEEKLY_SCHEDULE, out loWeekValues); //IList<BacnetValue> loObjectName; //moBacnetClient.ReadPropertyRequest(loBacnetAddress, new BacnetObjectId(BacnetObjectTypes.OBJECT_SCHEDULE, (uint)11), BacnetPropertyIds.PROP_OBJECT_NAME, out loObjectName); //var loData = values // .Where(x => ((BacnetObjectId)values[0].Value).Type == BacnetObjectTypes.OBJECT_SCHEDULE) // .Select(x => x.Value.GetType().GetProperty("Instance")) IList <BacnetValue> loScheduleValues; moBacnetClient.ReadPropertyRequest(loBacnetAddress, new BacnetObjectId(BacnetObjectTypes.OBJECT_SCHEDULE, (uint)2), BacnetPropertyIds.PROP_EXCEPTION_SCHEDULE, out loScheduleValues); ICollection <BacnetPropertyValue> loBacnetPropertyValueList = new List <BacnetPropertyValue>(); BacnetPropertyValue loNewPropertyValue = new BacnetPropertyValue(); List <BacnetValue> loBacnetValue = new List <BacnetValue>(); #region set schedule //// Create new instance id based on largest available //if(liTopInstanceID) liTopInstanceID = liTopInstanceID != null ? liTopInstanceID + 1 : 1; //// Set schedule object name loBacnetValue = new List <BacnetValue>(); loNewPropertyValue = new BacnetPropertyValue(); loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_CHARACTER_STRING, "Schedule" + " " + liTopInstanceID)); loNewPropertyValue.value = loBacnetValue; loNewPropertyValue.property = new BacnetPropertyReference((uint)BacnetPropertyIds.PROP_OBJECT_NAME, ASN1.BACNET_ARRAY_ALL); loBacnetPropertyValueList.Add(loNewPropertyValue); //// Set effective period for schedule object loBacnetValue = new List <BacnetValue>(); loNewPropertyValue = new BacnetPropertyValue(); loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_DATE, DateTime.Today.AddDays(-1))); loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_DATE, DateTime.Today.AddMonths(1))); loNewPropertyValue.value = loBacnetValue; loNewPropertyValue.property = new BacnetPropertyReference((uint)BacnetPropertyIds.PROP_EFFECTIVE_PERIOD, ASN1.BACNET_ARRAY_ALL); loBacnetPropertyValueList.Add(loNewPropertyValue); #endregion //// Set object reference to update it's value with schedule object loBacnetValue = new List <BacnetValue>(); loNewPropertyValue = new BacnetPropertyValue(); BacnetDeviceObjectPropertyReference loPropertyReference = new BacnetDeviceObjectPropertyReference(); //BACnetCalendarEntry loBACnetCalendarEntry = new BACnetCalendarEntry(); //// Add AV 1 present value change loPropertyReference.ArrayIndex = -1; loPropertyReference.DeviceId = new BacnetObjectId(BacnetObjectTypes.OBJECT_DEVICE, (uint)liDeviceID); loPropertyReference.ObjectId = new BacnetObjectId(BacnetObjectTypes.OBJECT_ANALOG_VALUE, (uint)liObjectID); loPropertyReference.PropertyId = BacnetPropertyIds.PROP_PRESENT_VALUE; loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_OBJECT_PROPERTY_REFERENCE, loPropertyReference)); // Add AV 2 present value change loPropertyReference = new BacnetDeviceObjectPropertyReference(); loPropertyReference.ArrayIndex = -1; loPropertyReference.DeviceId = new BacnetObjectId(BacnetObjectTypes.OBJECT_DEVICE, (uint)liDeviceID); loPropertyReference.ObjectId = new BacnetObjectId(BacnetObjectTypes.OBJECT_ANALOG_VALUE, (uint)2); loPropertyReference.PropertyId = BacnetPropertyIds.PROP_PRESENT_VALUE; loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_OBJECT_PROPERTY_REFERENCE, loPropertyReference)); loNewPropertyValue.value = loBacnetValue; loNewPropertyValue.property = new BacnetPropertyReference((uint)BacnetPropertyIds.PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES, ASN1.BACNET_ARRAY_ALL); loBacnetPropertyValueList.Add(loNewPropertyValue); //// Add weekly schedule for object loBacnetValue = new List <BacnetValue>(); loNewPropertyValue = new BacnetPropertyValue(); //// setup weekday to add schedule (0 = Monday, 1 = Tuesday ....., 6 = Sunday) BacnetWeeklySchedule loBacnetWeeklySchedule = new BacnetWeeklySchedule(); loBacnetWeeklySchedule.days[liDaySelected] = new List <DaySchedule>(); //// Schedule to update AV 1,2 at specified time loBacnetWeeklySchedule.days[liDaySelected].Add( new DaySchedule(new DateTime(1, 1, 1, Convert.ToInt32(txtScheduleHours.Text), Convert.ToInt32(txtScheduleMinutes.Text), Convert.ToInt32(txtScheduleSeconds.Text)), Convert.ToSingle((new Random()).Next(100, 999)))); //// Schedule to update AV 1,2 after 5 mins of schedule loBacnetWeeklySchedule.days[liDaySelected].Add(new DaySchedule(DateTime.Now.AddMinutes(1), Convert.ToSingle(lsNewPresentvalue))); loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_WEEKLY_SCHEDULE, loBacnetWeeklySchedule)); loNewPropertyValue.value = loBacnetValue; loNewPropertyValue.property = new BacnetPropertyReference((uint)BacnetPropertyIds.PROP_WEEKLY_SCHEDULE, ASN1.BACNET_ARRAY_ALL); loBacnetPropertyValueList.Add(loNewPropertyValue); //// Add exception schedule //loBacnetValue = new List<BacnetValue>(); //loNewPropertyValue = new BacnetPropertyValue(); //loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_TIME, new DateTime(2017,9,11,15,10,0))); //loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_REAL, 333)); //loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_DATE, DateTime.Today.Date)); //loNewPropertyValue.value = loBacnetValue; //loNewPropertyValue.property = new BacnetPropertyReference((uint)BacnetPropertyIds.PROP_EXCEPTION_SCHEDULE, ASN1.BACNET_ARRAY_ALL); //loBacnetPropertyValueList.Add(loNewPropertyValue); loBacnetValue = new List <BacnetValue>(); loNewPropertyValue = new BacnetPropertyValue(); BacnetWeeklyExceptionSchedule loBacnetWeeklyExceptionSchedule = new BacnetWeeklyExceptionSchedule(); List <ExceptionScheduleTimeValue>[] loExceptionSchedulTimeValue = new List <ExceptionScheduleTimeValue> [1]; loExceptionSchedulTimeValue[0] = new List <ExceptionScheduleTimeValue>(); loExceptionSchedulTimeValue[0].Add(new ExceptionScheduleTimeValue(DateTime.Now.AddMinutes(2), Convert.ToSingle(111))); loBacnetWeeklyExceptionSchedule.loExceptionScheduleArray = new List <ExceptionScheduleArray> [1]; loBacnetWeeklyExceptionSchedule.loExceptionScheduleArray[0] = new List <ExceptionScheduleArray>(); loBacnetWeeklyExceptionSchedule.loExceptionScheduleArray[0].Add(new ExceptionScheduleArray(new DateTime(1, 1, 1, 18, 30, 1), loExceptionSchedulTimeValue)); loBacnetValue.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_SPECIAL_EVENT, loBacnetWeeklyExceptionSchedule)); loNewPropertyValue.value = loBacnetValue; loNewPropertyValue.property = new BacnetPropertyReference((uint)BacnetPropertyIds.PROP_EXCEPTION_SCHEDULE, ASN1.BACNET_ARRAY_ALL); loBacnetPropertyValueList.Add(loNewPropertyValue); moBacnetClient.CreateObjectRequest(loBacnetAddress, new BacnetObjectId(BacnetObjectTypes.OBJECT_SCHEDULE, (uint)liTopInstanceID), loBacnetPropertyValueList); } } else { if (liDeviceID < 0) { MessageBox.Show("Please select device"); } else if (liObjectID < 0) { MessageBox.Show("Please select object"); } else { MessageBox.Show("Schedule is not setup properly, please review."); } } }