/// <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); }
/// <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); } }
/// <summary> /// 接收上行数据处理的接口 /// </summary> /// <param name="pdcEvents"></param> public void OnProtocolData(ProtocolDataCreatedEventArgs pdcEvents) { if (OnProtocolDataCreated != null) { //这里是例子MasProtocol OnProtocolDataCreated(null, pdcEvents); } }
/// <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); } }
/// <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); } }
/// <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); } } } }
/// <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; }