コード例 #1
0
        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);*/
        }
コード例 #2
0
ファイル: WriteProperty.cs プロジェクト: kib357/BACsharp
 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;
 }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: ReadPropertyAck.cs プロジェクト: kib357/BACsharp
 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);
 }
コード例 #5
0
ファイル: ConfirmedServices.cs プロジェクト: kib357/BACsharp
        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;
        }
コード例 #6
0
 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;
 }
コード例 #7
0
 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;
     }
 }
コード例 #8
0
ファイル: Form1.cs プロジェクト: kib357/BACsharp
 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);
 }
コード例 #9
0
ファイル: Form1.cs プロジェクト: kib357/BACsharp
 private void OnPropertyWritten(uint deviceid, BacNetObject objectid, string status)
 {
     MessageBox.Show(deviceid + " " + objectid.ObjectId + " " + status);
 }
コード例 #10
0
ファイル: Form1.cs プロジェクト: kib357/BACsharp
        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);
        }
コード例 #11
0
ファイル: CreateObject.cs プロジェクト: kib357/BACsharp
 public CreateObject(BacNetObject bacNetObject)
 {
     NewObject = bacNetObject;
 }
コード例 #12
0
 public SubscribeCOV(BacNetObject bacNetObject)
 {
     ObjectId = bacNetObject;
     InvokeId = BacNetDevice.Instance.InvokeId;
 }
コード例 #13
0
ファイル: CreateObject.cs プロジェクト: zenglc/BACsharp
 public CreateObject(BacNetObject bacNetObject)
 {
     NewObject = bacNetObject;
 }
コード例 #14
0
ファイル: DeleteObject.cs プロジェクト: zenglc/BACsharp
 public DeleteObject(BacNetObject bacNetObject)
 {
     _bacNetObject = bacNetObject;
 }
コード例 #15
0
ファイル: ConfirmedServices.cs プロジェクト: kib357/BACsharp
        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;
        }
コード例 #16
0
ファイル: IAm.cs プロジェクト: zenglc/BACsharp
 public IAm()
 {
     deviceObject = new BacNetObject {
         ObjectType = BacNetEnums.BACNET_OBJECT_TYPE.OBJECT_DEVICE
     };
 }
コード例 #17
0
ファイル: ConfirmedServices.cs プロジェクト: kib357/BACsharp
        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);
        }
コード例 #18
0
ファイル: ReadPropertyAck.cs プロジェクト: kib357/BACsharp
 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};
 }
コード例 #19
0
ファイル: ConfirmedServices.cs プロジェクト: kib357/BACsharp
 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;
 }
コード例 #20
0
ファイル: ConfirmedServices.cs プロジェクト: zenglc/BACsharp
        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);
        }