Beispiel #1
0
 //获取子节点个数
 public uint GetDeviceArrayIndexCount(BacNode device)
 {
     try
     {
         var adr = device.Address;
         if (adr == null)
         {
             return(0);
         }
         var list = ReadScalarValue(adr,
                                    new BacnetObjectId(BacnetObjectTypes.OBJECT_DEVICE, device.DeviceId),
                                    BacnetPropertyIds.PROP_OBJECT_LIST, 0, 0);
         var rst = Convert.ToUInt32(list.FirstOrDefault().Value);
         return(rst);
     }
     catch
     { }
     return(0);
 }
Beispiel #2
0
        /// <summary>
        /// 扫描设备
        /// </summary>
        public void ScanPointsBatch(BacNode device, uint deviceCount, uint count)
        {
            try
            {
                if (device == null)
                {
                    return;
                }
                var pid       = BacnetPropertyIds.PROP_OBJECT_LIST;
                var device_id = device.DeviceId;
                var bobj      = new BacnetObjectId(BacnetObjectTypes.OBJECT_DEVICE, device_id);
                var adr       = device.Address;
                if (adr == null)
                {
                    return;
                }

                device.Properties.Clear();
                List <BacnetPropertyReference> rList = new List <BacnetPropertyReference>();
                for (uint i = 0; i < count; i++)
                {
                    rList.Add(new BacnetPropertyReference((uint)pid, i));
                    if ((i != 0 && i % deviceCount == 0) || i == count - 1)//不要超了 MaxAPDU
                    {
                        IList <BacnetReadAccessResult> lstAccessRst;
                        var bRst = Bacnet_client.ReadPropertyMultipleRequest(adr, bobj, rList, out lstAccessRst, this.GetCurrentInvokeId());
                        if (bRst)
                        {
                            foreach (var aRst in lstAccessRst)
                            {
                                if (aRst.values == null)
                                {
                                    continue;
                                }
                                foreach (var bPValue in aRst.values)
                                {
                                    if (bPValue.value == null)
                                    {
                                        continue;
                                    }
                                    foreach (var bValue in bPValue.value)
                                    {
                                        var strBValue = "" + bValue.Value;
                                        //Log(pid + " , " + strBValue + " , " + bValue.Tag);

                                        var strs = strBValue.Split(':');
                                        if (strs.Length < 2)
                                        {
                                            continue;
                                        }
                                        var strType  = strs[0];
                                        var strObjId = strs[1];
                                        var subNode  = new BacProperty();
                                        BacnetObjectTypes otype;
                                        Enum.TryParse(strType, out otype);
                                        if (otype == BacnetObjectTypes.OBJECT_NOTIFICATION_CLASS || otype == BacnetObjectTypes.OBJECT_DEVICE)
                                        {
                                            continue;
                                        }
                                        subNode.ObjectId = new BacnetObjectId(otype, Convert.ToUInt32(strObjId));
                                        //添加属性
                                        device.Properties.Add(subNode);
                                    }
                                }
                            }
                        }
                        rList.Clear();
                    }
                }
            }
            catch (Exception exp)
            {
                Log("Err:" + exp.Message);
            }
        }
Beispiel #3
0
        /// <summary>
        /// 扫描属性
        /// </summary>
        /// <param name="device"></param>
        private void ScanSubProperties(BacNode device)
        {
            var adr = device.Address;

            if (adr == null)
            {
                return;
            }
            if (device.Properties == null)
            {
                return;
            }
            foreach (BacProperty subNode in device.Properties)
            {
                try
                {
                    List <BacnetPropertyReference> rList = new List <BacnetPropertyReference>();
                    rList.Add(new BacnetPropertyReference((uint)BacnetPropertyIds.PROP_DESCRIPTION, uint.MaxValue));
                    rList.Add(new BacnetPropertyReference((uint)BacnetPropertyIds.PROP_REQUIRED, uint.MaxValue));
                    rList.Add(new BacnetPropertyReference((uint)BacnetPropertyIds.PROP_OBJECT_NAME, uint.MaxValue));
                    rList.Add(new BacnetPropertyReference((uint)BacnetPropertyIds.PROP_PRESENT_VALUE, uint.MaxValue));
                    IList <BacnetReadAccessResult> lstAccessRst;
                    var bRst = Bacnet_client.ReadPropertyMultipleRequest(adr, subNode.ObjectId, rList, out lstAccessRst, this.GetCurrentInvokeId());
                    if (bRst)
                    {
                        foreach (var aRst in lstAccessRst)
                        {
                            if (aRst.values == null)
                            {
                                continue;
                            }
                            foreach (var bPValue in aRst.values)
                            {
                                if (bPValue.value == null || bPValue.value.Count == 0)
                                {
                                    continue;
                                }
                                var pid       = (BacnetPropertyIds)(bPValue.property.propertyIdentifier);
                                var bValue    = bPValue.value.First();
                                var strBValue = "" + bValue.Value;
                                //Log(pid + " , " + strBValue + " , " + bValue.Tag);
                                switch (pid)
                                {
                                case BacnetPropertyIds.PROP_DESCRIPTION:    //描述
                                {
                                    subNode.PROP_DESCRIPTION = bValue + "";
                                }
                                break;

                                case BacnetPropertyIds.PROP_OBJECT_NAME:    //点名
                                {
                                    subNode.PROP_OBJECT_NAME = bValue + "";
                                }
                                break;

                                case BacnetPropertyIds.PROP_PRESENT_VALUE:    //值
                                {
                                    subNode.PROP_PRESENT_VALUE = bValue.Value;
                                    subNode.DataType           = bValue.Value.GetType();
                                }
                                break;
                                }
                            }
                        }
                        ShwoText(string.Format("点名:{0,-20} 值:{1,-10} 类型:{3,-15} 描述:{2} ", subNode.PROP_OBJECT_NAME, subNode.PROP_PRESENT_VALUE, subNode.PROP_DESCRIPTION, subNode.PROP_PRESENT_VALUE.GetType()));
                    }
                }
                catch (Exception exp)
                {
                    Log("Error: " + exp.Message);
                }
            }
        }