public UnconfirmedCOVnotification(byte[] apdu) { int len = 2; BacNetTag tag = new BacNetTag(apdu, len, ref len); ProccessId = new BacNetUInt(apdu, len, tag.Length, ref len); tag = new BacNetTag(apdu, len, ref len); Device = new BacNetObject(apdu, len, ref len); tag = new BacNetTag(apdu, len, ref len); Object = new BacNetObject(apdu, len, ref len); tag = new BacNetTag(apdu, len, ref len); TimeRemaining = new BacNetUInt(apdu, len, tag.Length, ref len); tag = new BacNetTag(apdu, len, ref len); tag = new BacNetTag(apdu, len, ref len); BacNetUInt value = new BacNetUInt(apdu, len, tag.Length, ref len); //{ tag = new BacNetTag(apdu, len, ref len); tag = new BacNetTag(apdu, len, ref len); //Это не правильно!!!! /*BacNetReal analogvalue = new BacNetReal(apdu, len, tag.Length, ref len); //} tag = new BacNetTag(apdu, len, ref len); tag = new BacNetTag(apdu, len, ref len);*/ }
public WriteProperty(BacNetObject bacNetObject, BacNetEnums.BACNET_PROPERTY_ID propertyId, ArrayList valueList) { ObjectId = bacNetObject; PropertyId = new BacNetUInt(); PropertyId.Value = (uint) propertyId; ValueList = valueList; InvokeId = BacNetDevice.Instance.InvokeId; }
public UnconfirmedEventNotification(byte[] apdu) { int len = 2; BacNetTag tag = new BacNetTag(apdu, len, ref len); ProccessId = new BacNetUInt(apdu, len, tag.Length, ref len); tag = new BacNetTag(apdu, len, ref len); Device = new BacNetObject(apdu, len, ref len); tag = new BacNetTag(apdu, len, ref len); Object = new BacNetObject(apdu, len, ref len); tag = new BacNetTag(apdu, len, ref len); if (tag.Length == 6 && tag.Number == 3) { tag = new BacNetTag(apdu, len, ref len); if (tag.Length == 6 && tag.Number == 2) { TimeStamp = new BacNetTimeStamp(apdu, len, ref len); } tag = new BacNetTag(apdu, len, ref len); tag = new BacNetTag(apdu, len, ref len); if (tag.Length != 7 && tag.Number != 3) throw new Exception("Invalid TimeStamp"); } tag = new BacNetTag(apdu, len, ref len); NotificationClass = new BacNetUInt(apdu, len, tag.Length, ref len); tag = new BacNetTag(apdu, len, ref len); Priority = new BacNetUInt(apdu, len, tag.Length, ref len); tag = new BacNetTag(apdu, len, ref len); EventType = new BacNetUInt(apdu, len, tag.Length, ref len); tag = new BacNetTag(apdu, len, ref len); Message = new BacNetString(apdu, len, tag.Length, ref len); tag = new BacNetTag(apdu, len, ref len); NotifyType = new BacNetUInt(apdu, len, tag.Length, ref len); tag = new BacNetTag(apdu, len, ref len); AckRequired = new BacNetUInt(apdu, len, tag.Length, ref len); tag = new BacNetTag(apdu, len, ref len); FromState = new BacNetUInt(apdu, len, tag.Length, ref len); tag = new BacNetTag(apdu, len, ref len); ToState = new BacNetUInt(apdu, len, tag.Length, ref len); }
public ReadPropertyAck(byte[] apdu) { InvokeId = apdu[1]; int len = 3; //Object tag BacNetTag objectIdTag = new BacNetTag(apdu, len, ref len); if (objectIdTag.Class == false) throw new Exception("Reject.Invalid_tag"); Obj = new BacNetObject(apdu, len, ref len); //Property Id BacNetTag propertyIdTag = new BacNetTag(apdu, len, ref len); if (propertyIdTag.Number != 1) throw new Exception("Reject.Invalid_tag"); BacNetUInt PropertyId = new BacNetUInt(apdu, len, propertyIdTag.Length, ref len); BacNetTag openingTag = new BacNetTag(apdu, len, ref len); ArrayList ValueList = new ArrayList(); if (openingTag.Length == 6) { BacNetTag metaTag = new BacNetTag(apdu, len, ref len); while (metaTag.Length != 7) { if (metaTag.Class == false) { object value = ByteConverter.GetAppTagValue(apdu, len, metaTag, ref len); ValueList.Add(value); } else { if (metaTag.Length == 6 && PropertyId.Value == (int)BacNetEnums.BACNET_PROPERTY_ID.PROP_WEEKLY_SCHEDULE) { var value = BuildScheduleDay(apdu, ref len); ValueList.Add(value); } if (metaTag.Length == 4 && metaTag.Number == 0 && PropertyId.Value == (int)BacNetEnums.BACNET_PROPERTY_ID.PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES) { var value = BuildObjectPropertyReference(apdu, ref len); ValueList.Add(value); } } metaTag = new BacNetTag(apdu, len, ref len); } } var property = new BacNetProperty {PropertyId = PropertyId, Values = ValueList}; Obj.Properties.Add(property); }
public BacNetObject CreateObject(uint instanceId, BacNetObject bacNetObject) { var npdu = new BacNetIpNpdu(); var apdu = new CreateObject(bacNetObject); IPEndPoint endPoint = null; foreach (BacNetRemoteDevice remoteDevice in BacNetDevice.Instance.Remote) { if (remoteDevice.InstanceNumber == instanceId) { npdu.Destination = remoteDevice.BacAddress; endPoint = remoteDevice.EndPoint; break; } } BacNetDevice.Instance.Services.Execute(npdu, apdu, endPoint); return apdu.NewObject; }
private bool ReadObject(byte[] apdu, int startIndex, ref int len) { bool res = false; if (apdu.Length - 1 > startIndex) { try { //Object tag BacNetTag objectIdTag = new BacNetTag(apdu, len, ref len); if (objectIdTag.Class == false) throw new Exception("Reject.Invalid_tag"); var objectId = new BacNetObject(apdu, len, ref len); ObjectList.Add(objectId); res = true; } catch { throw new Exception("Reject.Invalid_object_tag"); } } return res; }
public BacNetObject this[string i] { get { int index = _objectList.FindIndex(d => d.Id == i); if (index < 0) { var device = new BacNetObject(_device, i); _objectList.Add(device); index = _objectList.FindIndex(d => d.Id == i); } return _objectList[index]; } set { int index = _objectList.FindIndex(d => d.Id == i); if (index < 0) _objectList.Add(value); else _objectList[index] = value; } }
private void readPropertyButton_Click(object sender, EventArgs e) { /*ArrayList objectList = new ArrayList(); ArrayList propertyList = new ArrayList(); BacNetObject obj = new BacNetObject { ObjectId = 2, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_ANALOG_VALUE }; objectList.Add(obj); BacNetProperty property = new BacNetProperty { PropertyId = new BacNetUInt { Value = (uint)BacNetEnums.BACNET_PROPERTY_ID.PROP_PRESENT_VALUE }, Values = new ArrayList() }; propertyList.Add(property); _device.Services.Confirmed.Rpm(502, objectList, propertyList);*/ var property = new BacNetProperty { PropertyId = new BacNetUInt { Value = (uint)BacNetEnums.BACNET_PROPERTY_ID.PROP_OBJECT_LIST } }; var obj = new BacNetObject { ObjectId = 500, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_DEVICE }; var objList = new List<BacNetObject> {obj}; _device.Services.Confirmed.ReadProperty("500.DEV500", BacNetEnums.BACNET_PROPERTY_ID.PROP_OBJECT_LIST); _device.Services.Confirmed.ReadProperty("500.DEV500", BacNetEnums.BACNET_PROPERTY_ID.PROP_OBJECT_LIST); //objList[0].Properties.Add(property); /*objList.Add(new BacNetObject { ObjectId = 212, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_ANALOG_INPUT, Properties = new List<BacNetProperty> { property } }); objList.Add(new BacNetObject { ObjectId = 1212, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_ANALOG_INPUT, Properties = new List<BacNetProperty> { property } }); objList.Add(new BacNetObject { ObjectId = 1, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_ANALOG_VALUE, Properties = new List<BacNetProperty> { property } }); objList.Add(new BacNetObject { ObjectId = 999, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_ANALOG_VALUE, Properties = new List<BacNetProperty> { property } }); objList.Add(new BacNetObject { ObjectId = 1000, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_ANALOG_VALUE, Properties = new List<BacNetProperty> { property } }); objList.Add(new BacNetObject { ObjectId = 104, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_BINARY_INPUT, Properties = new List<BacNetProperty> { property } }); objList.Add(new BacNetObject { ObjectId = 108, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_BINARY_INPUT, Properties = new List<BacNetProperty> { property } }); objList.Add(new BacNetObject { ObjectId = 109, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_BINARY_INPUT, Properties = new List<BacNetProperty> { property } }); objList.Add(new BacNetObject { ObjectId = 111, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_BINARY_INPUT, Properties = new List<BacNetProperty> { property } }); objList.Add(new BacNetObject { ObjectId = 204, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_BINARY_INPUT, Properties = new List<BacNetProperty> { property } }); objList.Add(new BacNetObject { ObjectId = 208, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_BINARY_INPUT, Properties = new List<BacNetProperty> { property } }); objList.Add(new BacNetObject { ObjectId = 101, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_BINARY_OUTPUT, Properties = new List<BacNetProperty> { property } }); objList.Add(new BacNetObject { ObjectId = 103, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_BINARY_OUTPUT, Properties = new List<BacNetProperty> { property } }); objList.Add(new BacNetObject { ObjectId = 104, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_BINARY_OUTPUT, Properties = new List<BacNetProperty> { property } });*/ //_device.Services.Confirmed.RpmE(17811, objList, RpmECallBack); }
private void OnPropertyWritten(uint deviceid, BacNetObject objectid, string status) { MessageBox.Show(deviceid + " " + objectid.ObjectId + " " + status); }
private void button4_Click(object sender, EventArgs e) { /*var address = textBox3.Text.Split('-'); var propertyId = BacNetEnums.BACNET_PROPERTY_ID.PROP_PRESENT_VALUE; Enum.TryParse(address[1], out propertyId); var property = _device.Services.Confirmed.ReadProperty(address[0], propertyId); textBox4.Text = property.Value;*/ /*var sch = new BacNetWeeklySchedule(); //_device.Services.Confirmed.CreateObject(200, new BacNetObject { ObjectId = 20, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_SCHEDULE }); Thread.Sleep(500); sch.Monday.Add(new BacNetTime(12,14,2), new BacNetReal{Value = 32}); sch.Monday.Add(new BacNetTime(14, 14, 2), null); sch.Monday.Add(new BacNetTime(16, 10, 2), new BacNetEnumeration{ Value = 1 }); sch.Monday.Add(new BacNetTime(17, 0, 0), null); _device.Services.Confirmed.WriteProperty((uint)200, new BacNetObject { ObjectId = 20, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_SCHEDULE }, BacNetEnums.BACNET_PROPERTY_ID.PROP_WEEKLY_SCHEDULE, sch.ValueList); Thread.Sleep(500); var sch1 = new BacNetWeeklySchedule(); sch1.ValueList = _device.Services.Confirmed.ReadProperty("200.SCH19", BacNetEnums.BACNET_PROPERTY_ID.PROP_WEEKLY_SCHEDULE).Values;*/ var k = _device.Services.Confirmed.ReadProperty("200.SCH19", BacNetEnums.BACNET_PROPERTY_ID.PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES); var bcObject = new BacNetObject {ObjectId = 5, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_ANALOG_VALUE}; k.Values.Add(new BacNetObjectPropertyRef {ObjectId = bcObject, PropertyId = new BacNetUInt{Value = 85}}); _device.Services.Confirmed.WriteProperty(200, new BacNetObject { ObjectId = 19, ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_SCHEDULE }, BacNetEnums.BACNET_PROPERTY_ID.PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES, k.Values); var b = _device.Services.Confirmed.ReadProperty("200.SCH19", BacNetEnums.BACNET_PROPERTY_ID.PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES); }
public CreateObject(BacNetObject bacNetObject) { NewObject = bacNetObject; }
public SubscribeCOV(BacNetObject bacNetObject) { ObjectId = bacNetObject; InvokeId = BacNetDevice.Instance.InvokeId; }
public DeleteObject(BacNetObject bacNetObject) { _bacNetObject = bacNetObject; }
public bool? SubscribeCOV(string address, BacNetEnums.BACNET_PROPERTY_ID propId = BacNetEnums.BACNET_PROPERTY_ID.PROP_PRESENT_VALUE) { string[] addrArray = address.Split('.'); if (addrArray.Length != 2) { _logger.Warn("Wrong address: " + address); return null; } BacNetRemoteDevice remote = BacNetDevice.Instance.SearchRemote(BacNetRemoteDevice.Get(addrArray[0])); if (remote == null) { _logger.Warn("No such device in network. Device number: " + addrArray[0]); return null; } BacNetObject tmpObj; try { tmpObj = new BacNetObject(addrArray[1]); } catch (Exception ex) { _logger.Warn(ex.Message); return null; } BacNetObject obj = remote.Objects.FirstOrDefault(s => s.ObjectId == tmpObj.ObjectId && s.ObjectType == tmpObj.ObjectType); if (obj == null) { remote.Objects.Add(tmpObj); obj = tmpObj; } var apdu = new SubscribeCOV(obj) { ProccessId = new BacNetUInt(5556) }; var npdu = new BacNetIpNpdu { ExpectingReply = true, Destination = remote.BacAddress }; BacNetDevice.Instance.Waiter = apdu.InvokeId; BacNetDevice.Instance.Services.Execute(npdu, apdu, remote.EndPoint); ArrayList valueList = WaitForResponce(apdu.InvokeId) as ArrayList; /*BacNetProperty property = obj.Properties.FirstOrDefault(s => s.PropertyId.Value == (uint)propId); if (property != null) property.Values = valueList ?? new ArrayList(); else { property = new BacNetProperty { PropertyId = new BacNetUInt { Value = (uint)propId }, Values = valueList ?? new ArrayList() }; obj.Properties.Add(property); } return property;*/ return true; }
public IAm() { deviceObject = new BacNetObject { ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_DEVICE }; }
public void WriteProperty(uint instanceId, BacNetObject bacNetObject, BacNetEnums.BACNET_PROPERTY_ID propertyId, ArrayList valueList, WritePropertyDelegate callBack = null) { var apdu = new WriteProperty(bacNetObject, propertyId, valueList); apdu.InstanceId = instanceId; apdu.CallBack = callBack; var npdu = new BacNetIpNpdu(); npdu.ExpectingReply = true; IPEndPoint endPoint = null; foreach (BacNetRemoteDevice remoteDevice in BacNetDevice.Instance.Remote) { if (remoteDevice.InstanceNumber == instanceId) { npdu.Destination = remoteDevice.BacAddress; endPoint = remoteDevice.EndPoint; } } lock (_writePropertyPool) { if (_writePropertyPool.ContainsKey(apdu.InvokeId)) { _writePropertyPool[apdu.InvokeId].CallBack(_writePropertyPool[apdu.InvokeId].InstanceId, null, null); _writePropertyPool.Remove(apdu.InvokeId); } _writePropertyPool.Add(apdu.InvokeId, apdu); } BacNetDevice.Instance.Services.Execute(npdu, apdu, endPoint); }
private object BuildObjectPropertyReference(byte[] apdu, ref int len) { var objId = new BacNetObject(apdu, len, ref len); var metaTag = new BacNetTag(apdu, len, ref len); var propId = new BacNetUInt(apdu, len, metaTag.Length, ref len); return new BacNetObjectPropertyRef {ObjectId = objId, PropertyId = propId}; }
public ArrayList ReadProperty(UInt16 destinationAddress, BacNetObject bacNetObject, BacNetEnums.BACNET_PROPERTY_ID propertyId) { var apdu = new ReadProperty(bacNetObject, propertyId); var npdu = new BacNetIpNpdu(); npdu.ExpectingReply = true; BacNetRemoteDevice remote = null; foreach (BacNetRemoteDevice remoteDevice in BacNetDevice.Instance.Remote) if (remoteDevice.InstanceNumber == destinationAddress) remote = remoteDevice; if (remote != null) { npdu.Destination = remote.BacAddress; BacNetDevice.Instance.Services.Execute(npdu, apdu, remote.EndPoint); BacNetDevice.Instance.Waiter = apdu.InvokeId; return WaitForResponce(apdu.InvokeId) as ArrayList; } return null; }
public BacNetProperty ReadProperty(string address, BacNetEnums.BACNET_PROPERTY_ID propId = BacNetEnums.BACNET_PROPERTY_ID.PROP_PRESENT_VALUE) { string[] addrArray = address.Split('.'); if (addrArray.Length != 2) { _logger.Warn("Wrong address: " + address); return(null); } BacNetRemoteDevice remote = BacNetDevice.Instance.SearchRemote(BacNetRemoteDevice.Get(addrArray[0])); if (remote == null) { return(null); } BacNetObject tmpObj; try { tmpObj = new BacNetObject(addrArray[1]); } catch (Exception ex) { _logger.Warn(ex.Message); return(new BacNetProperty { PropertyId = new BacNetUInt { Value = (uint)propId }, Values = new ArrayList { new BacNetString("Error") } }); //return null; } BacNetObject obj = remote.Objects.FirstOrDefault(s => s.ObjectId == tmpObj.ObjectId && s.ObjectType == tmpObj.ObjectType); if (obj == null) { remote.Objects.Add(tmpObj); obj = tmpObj; } var apdu = new ReadProperty(obj, propId); var npdu = new BacNetIpNpdu { ExpectingReply = true, Destination = remote.BacAddress }; BacNetDevice.Instance.Waiter = apdu.InvokeId; BacNetDevice.Instance.Services.Execute(npdu, apdu, remote.EndPoint); ArrayList valueList = WaitForResponce(apdu.InvokeId) as ArrayList; BacNetProperty property = obj.Properties.FirstOrDefault(s => s.PropertyId.Value == (uint)propId); if (property != null) { property.Values = valueList ?? new ArrayList(); } else { property = new BacNetProperty { PropertyId = new BacNetUInt { Value = (uint)propId }, Values = valueList ?? new ArrayList() }; obj.Properties.Add(property); } return(property); }