Exemple #1
0
        /// <summary>
        /// 回发网络模块的状态至核心业务逻辑层
        /// </summary>
        /// <param name="net">网络模块IP</param>
        private void SendNetStateToCenter(NetworkDeviceInfo net)
        {
            ProtocolDataCreatedEventArgs upData = new ProtocolDataCreatedEventArgs();
            NetworkDeviceDataRequest     cData  = new NetworkDeviceDataRequest(); //网络模块自身的实时值数据

            lock (Cache.LockWorkNet)                                              //用缓存的网络设备进行操作
            {
                CacheNetWork curnet = Cache.LstWorkNet.Find(delegate(CacheNetWork p) { return(p.IP == net.IP); });
                if (curnet != null)
                {
                    net.NetID = curnet.NetID;
                    net.State = curnet.State;
                }
            }
            upData.DeviceCode  = net.IP;
            upData.DriverCode  = this.DriverCode;
            upData.MasProtocol = new MasProtocol(SystemType.Security, DirectionType.Up, ProtocolType.NetworkDeviceDataRequest);
            cData.DeviceCode   = net.IP;
            cData.RealData     = net.NetID.ToString();
            cData.Address      = net.IP;
            cData.Channel      = net.MAC;
            if (net.State == 4) //直流
            {
                cData.State = ItemState.EquipmentDC;
            }
            else if (net.State == 3) //交流
            {
                cData.State = ItemState.EquipmentAC;;
            }
            upData.MasProtocol.Protocol = cData;
            OnProtocolData(upData);
        }
Exemple #2
0
        /// <summary>
        /// 处理向上的数据事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private void Driver_OnProtocolDataCreated(object sender, ProtocolDataCreatedEventArgs args)
        {
            var response = GatewayManager.RpcManager.Send <GatewayRpcResponse>(args.MasProtocol, RequestType.DeviceRequest);

            if (response != null && response.IsSuccess)
            {
            }
        }
 /// <summary>
 /// 接收上行数据处理的接口
 /// </summary>
 /// <param name="pdcEvents"></param>
 public static void OnBroadCastProtocolData(ProtocolDataCreatedEventArgs pdcEvents)
 {
     if (OnBraodCastProtocolDataCreated != null)
     {
         //触发事件
         OnBraodCastProtocolDataCreated(null, pdcEvents);
     }
 }
Exemple #4
0
 /// <summary>
 /// 接收上行数据处理的接口
 /// </summary>
 /// <param name="pdcEvents"></param>
 public void OnProtocolData(ProtocolDataCreatedEventArgs pdcEvents)
 {
     if (OnProtocolDataCreated != null)
     {
         //这里是例子MasProtocol
         OnProtocolDataCreated(null, pdcEvents);
     }
 }
Exemple #5
0
        /// <summary>
        /// 广播系统终端状态事件(用于接收广播系统服务器发过来的状态变动数据)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private void Communication_BroadCastProtocolDataArrived(object sender, ProtocolDataCreatedEventArgs args)
        {
            //将数据通过Rpc发送到核心服务层
            var response = GatewayManager.RpcManager.Send <GatewayRpcResponse>(args.MasProtocol, RequestType.DeviceRequest);

            if (response != null && response.IsSuccess)
            {
            }
        }
 public void callEndReport(CallEndResponse request)
 {
     //通过事件,触发并将数据发送到服务端
     if (request != null)
     {
         ProtocolDataCreatedEventArgs upData = new ProtocolDataCreatedEventArgs();
         upData.DriverCode              = "";
         upData.DeviceCode              = request.callId;//呼叫唯一标识
         upData.MasProtocol             = new MasProtocol(SystemType.Broadcast, DirectionType.Up, ProtocolType.CallEndResponse);
         upData.MasProtocol.CreatedTime = DateTime.Now;
         upData.MasProtocol.Protocol    = request;
         BroadCastUpEvent.OnBroadCastProtocolData(upData);
     }
 }
 public void termRegStateReport(TermRegResponse request)
 {
     //通过事件,触发并将数据发送到服务端
     if (request != null)
     {
         ProtocolDataCreatedEventArgs upData = new ProtocolDataCreatedEventArgs();
         upData.DriverCode              = "";
         upData.DeviceCode              = request.termDN;//终端号码
         upData.MasProtocol             = new MasProtocol(SystemType.Broadcast, DirectionType.Up, ProtocolType.TermRegResponse);
         upData.MasProtocol.CreatedTime = DateTime.Now;
         upData.MasProtocol.Protocol    = request;
         BroadCastUpEvent.OnBroadCastProtocolData(upData);
     }
 }
Exemple #8
0
        /// <summary>
        /// 应答核心业务逻辑层的初始化接收确认。
        /// </summary>
        /// <param name="Fzh"></param>
        private void SendInitializeAffirmToCenter(string Fzh)
        {
            ProtocolDataCreatedEventArgs upData = new ProtocolDataCreatedEventArgs();
            InitializeResponse           cData  = new InitializeResponse();//初始化应答数据
            DeviceInfo def = Cache.CacheManager.QueryFrist <DeviceInfo>(p => p.Fzh == Convert.ToInt16(Fzh) && p.DevPropertyID == 0, true);

            if (def == null)
            {
                return;
            }
            upData.DriverCode  = this.DriverCode;
            upData.DeviceCode  = def.Point;
            upData.MasProtocol = new MasProtocol(SystemType.Security, DirectionType.Up, ProtocolType.InitializeResponse);
            upData.MasProtocol.DeviceNumber = Convert.ToUInt16(Fzh);
            cData.DeviceCode            = def.Point;
            upData.MasProtocol.Protocol = cData;
            OnProtocolData(upData);
        }
 public void termCallStateReport(TermCallResponse request)
 {
     //通过事件,触发并将数据发送到服务端
     if (request != null)
     {
         ProtocolDataCreatedEventArgs upData = new ProtocolDataCreatedEventArgs();
         upData.DriverCode              = "";
         upData.DeviceCode              = request.termDN;//终端号码
         upData.MasProtocol             = new MasProtocol(SystemType.Broadcast, DirectionType.Up, ProtocolType.TermCallResponse);
         upData.MasProtocol.CreatedTime = DateTime.Now;
         //将英文转换成枚举值并重新创建对象 (统一在服务端去转换)
         //var requestNew = new TermCallResponse();
         //requestNew.zoneId = request.zoneId;
         //requestNew.termDN = request.termDN;
         //requestNew.callState = (ItemCallState)Enum.Parse(typeof(ItemCallState), request.callState);
         upData.MasProtocol.Protocol = request;
         BroadCastUpEvent.OnBroadCastProtocolData(upData);
     }
 }
Exemple #10
0
        /// <summary>
        /// 表示数据包回发处理后至核心业务逻辑层
        /// </summary>
        /// <param name="net"></param>
        /// <param name="data"></param>
        private void SendDevicDataAffirmToCenter(NetworkDeviceInfo net, byte[] data)
        {
            int index = 0, deviceCode;

            byte[]     fzhBuffer          = new byte[1];
            ushort     receiveDeviceCount = 0;//每包的长度
            DeviceInfo def;
            ProtocolDataCreatedEventArgs upData      = new ProtocolDataCreatedEventArgs();
            DeviceDataConrtol            dataConrtol = new DeviceDataConrtol();

            if (data.Length >= 8)
            {
                receiveDeviceCount = CommandUtil.ConvertByteToInt16(data, 6, false);//读长度,后续字节长度为-4
                deviceCode         = data[4];
                def = Cache.CacheManager.QueryFrist <DeviceInfo>(p => p.Fzh == deviceCode && p.DevPropertyID == 0, true);
                if (def != null)
                {
                    if (def.Jckz2 == net.IP)//只处理分站定义相对应的IP。
                    {
                        if (4 + receiveDeviceCount > data.Length)
                        {//数据长度不足
                            LogHelper.Error("回发长度不足:" + net.MAC + "  回发长度:" + data.Length + " 判断长度:" + (4 + receiveDeviceCount).ToString());
                            return;
                        }
                        fzhBuffer = new byte[data.Length - 4];
                        for (index = 4; index < data.Length; index++)
                        {
                            fzhBuffer[index - 4] = data[index];
                        }
                        upData.DriverCode  = this.DriverCode;
                        upData.DeviceCode  = def.Point;
                        upData.MasProtocol = new MasProtocol((SystemType)(def.Sysid), DirectionType.Up, ProtocolType.QueryRealDataResponse);
                        upData.MasProtocol.DeviceNumber = Convert.ToUInt16(def.Fzh);
                        dataConrtol.def = def;
                        dataConrtol.HandleDeviceData(fzhBuffer, upData.MasProtocol);
                        OnProtocolData(upData);
                    }
                }
            }
        }
Exemple #11
0
        /// <summary>
        /// 表示交换机电源的确认
        /// </summary>
        /// <param name="net"></param>
        /// <param name="data"></param>
        private void SendBatteryAffirmToCenter(NetworkDeviceInfo net, byte[] data)
        {
            //7F-03-2A-00-00-01-8A-01-8A-01-8A-01-8A-01-8A-01-8A-00-00-00-00-09-41-00-40-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-E8-07

            ProtocolDataCreatedEventArgs upData = new ProtocolDataCreatedEventArgs();
            QueryBatteryRealDataResponse cData  = new QueryBatteryRealDataResponse();//获取交换机电源箱的应答数据;

            //需要反过来找一下,串口服务器对应的交换机IP地址。
            upData.DeviceCode          = net.IP;
            upData.DriverCode          = this.DriverCode;
            upData.MasProtocol         = new MasProtocol(SystemType.Security, DirectionType.Up, ProtocolType.QueryBatteryRealDataResponse);
            cData.DeviceCode           = net.IP;
            cData.DeviceProperty       = ItemDevProperty.Switches;
            cData.BatteryRealDataItems = new List <BatteryRealDataItem>();
            BatteryRealDataItem BatteryItem = new BatteryRealDataItem();

            cData.BatteryDateTime = DateTime.Now;
            Cache.HandleDeviceBattery(data, 5, BatteryItem, true);//解析电源箱的数据
            cData.BatteryRealDataItems.Add(BatteryItem);
            upData.MasProtocol.Protocol = cData;
            OnProtocolData(upData);
        }
        public static void HandleSwitchInfo(byte[] data, ProtocolDataCreatedEventArgs upData, NetworkDeviceInfo net)
        {
            GetSwitchboardParamCommResponse cData = new GetSwitchboardParamCommResponse();//交换机基本信息;

            byte[] buffer = new byte[data.Length - 4];
            ushort startindex = 32760;         //数据开始位置
            int    receivelength = 0;          //下标|接收数据长度
            ushort crcvalue = 0, receivevalue; //crc累加和 回发累加和
            byte   curByte = 0, SignCount = 0;

            cData.DeviceCode    = net.MAC;
            cData.RealDataItems = new List <RealDataItem>();
            for (int i = 4; i < data.Length; i++)
            {
                buffer[i - 4] = data[i];
            }
            if (buffer[0] == 252)
            {
                startindex = 0;
            }
            if (startindex == 32760)
            {
                LogHelper.Error("【HandleSwitchInfo】" + "没有长到分站地址引导符【252】");
                return;
            }
            receivelength = CommandUtil.ConvertByteToInt16(buffer, startindex + 2);
            if (receivelength > buffer.Length)
            {
                LogHelper.Error("【HandleSwitchInfo】" + "回发长度不足【" + receivelength + "】" + "【" + data.Length + "】");
                return;
            }
            receivevalue = CommandUtil.ConvertByteToInt16(buffer, startindex + receivelength - 2);
            crcvalue     = CommandUtil.CRC16_CCITT(buffer, startindex, startindex + receivelength - 2);
            if (crcvalue != receivevalue)
            {
                LogHelper.Error("【HandleSwitchInfo】" + "通讯误码【" + crcvalue + "】" + "【" + receivevalue + "】");
                return;
            }

            #region 协议解析
            //5A A5 3C C3 FC 46 00 12 C1 04 64 FF FF 00 F8 C1 C1 00 00 00 0B 84
            curByte   = buffer[startindex + 5];
            SignCount = (byte)(curByte >> 2);
            cData.BatteryControlState = (byte)(curByte & 0x01);
            cData.BatteryState        = (byte)((curByte >> 1) & 0x01);
            startindex            = (ushort)(startindex + 6);
            cData.BatteryCapacity = buffer[startindex++];
            curByte = buffer[startindex++];
            cData.SerialPortBatteryState = (byte)((curByte >> 6) & 0x01); //(串口服务器-供电电源)
            cData.SerialPortRunState     = (byte)((curByte >> 5) & 0x01); //(串口服务器-运行状态)
            cData.SwitchRunState         = (byte)((curByte >> 1) & 0x01); //(交换机-运行状态)
            cData.SwitchBatteryState     = (byte)(curByte & 0x01);        //(交换机-供电电源)
            cData.Switch1000State        = new byte[3];
            cData.Switch1000State[0]     = (byte)((curByte >> 2) & 0x01); //Bit2位(千兆光口1)
            cData.Switch1000State[1]     = (byte)((curByte >> 3) & 0x01); //Bit2位(千兆光口2)
            cData.Switch1000State[2]     = (byte)((curByte >> 4) & 0x01); //Bit2位(千兆光口3)
            curByte = buffer[startindex++];
            cData.Switch100State = new byte[7];
            for (int i = 0; i < 7; i++)
            {
                cData.Switch100State[i] = (byte)((curByte >> i) & 0x01); //Bit2位(百兆接口1~7)
            }
            startindex++;                                                //预留字节
            if (SignCount > 0)
            {
                HandleSoleCoding(SignCount, buffer, startindex, cData);
            }
            #endregion
            upData.MasProtocol.Protocol = cData;
        }