/// <summary> /// 处理定期报告信息 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0x1001(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { _0x1001 x1001 = new _0x1001(); x1001.Content = obj.MsgContent; x1001.Unpackage(); if (null != equipment) { EquipmentInstance.Update(f => f.id == equipment.id, act => { act.Signal = x1001.CSQ_1 > 0 ? x1001.CSQ_1 : (x1001.CSQ_2 > 0 ? x1001.CSQ_2 : byte.MinValue); if (x1001.WorkTime > 0) { act.Runtime = (int)x1001.WorkTime; } }); } var pos = GetGpsinfoFrom1001(x1001, true); pos.Equipment = null == equipment ? (int?)null : equipment.id; pos.Terminal = obj.TerminalID; pos.StoreTimes = null == equipment ? 0 : equipment.StoreTimes; PositionInstance.Add(pos); pos = GetGpsinfoFrom1001(x1001, false); pos.Equipment = null == equipment ? (int?)null : equipment.id; pos.Terminal = obj.TerminalID; pos.StoreTimes = null == equipment ? 0 : equipment.StoreTimes; PositionInstance.Add(pos); }
/// <summary> /// 处理装载机的0x600B初始化运转时间的回复 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0x600B(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { _0x600B x600B = new _0x600B(); x600B.Content = obj.MsgContent; x600B.Unpackage(); if (null != equipment) { using (var bll = new EquipmentBLL()) { bll.Update(f => f.id == equipment.id, act => { // 600B时直接重置所有的运转时间 act.Runtime = (int)x600B.Worktime; act.AccumulativeRuntime = (int)x600B.Worktime; // 装载机的总运转时间初始化时,将其特定的初始化时间设为0 if (act.InitializedRuntime > 0) { act.InitializedRuntime = 0; } // 更改运转时间时,同时清空补偿的运转时间 2017/11/24 10:40 if (act.CompensatedHours > 0) { act.CompensatedHours = 0; } }); } } }
/// <summary> /// 处理报警信息 /// </summary> /// <param name="obj"></param> private void Handle0x2000(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { // 报警 _0x2000 x2000 = new _0x2000(); x2000.Content = obj.MsgContent; x2000.Unpackage(); if (null != equipment) { EquipmentInstance.Update(f => f.id == equipment.id, act => { if (x2000.AlarmBIN[0] == '1') { // Main Power Disconnect act.Voltage = "G0000"; // 主电断报警之后进入睡眠状态 act.OnlineStyle = (byte)LinkType.SLEEP; } if (x2000.GPSInfo.Available) { act.Latitude = x2000.GPSInfo.Latitude; act.Longitude = x2000.GPSInfo.Longitude; act.GpsUpdated = false; } }); } if (x2000.GPSInfo.Available) { SaveGpsInfo(x2000.GPSInfo, equipment, obj.TerminalID, "0x2000"); } }
private void HandleEquipmentRuntime(TB_Equipment equipment, uint newTime) { if (null != equipment) { var time = (int)newTime; int old = (int)equipment.AccumulativeRuntime; // 新运转时间大于旧运转时间时 if (time > old) { int interval = time - old; // 时间差小于10万小时才更新,否则有可能是错误的运转时间 2017/11/29 08:31 if (interval < max) { // 更新旧时间为新的时间 equipment.AccumulativeRuntime = time; // 如果新旧时间之差大于1天则说明可能是修改了终端的运转时间了 if (interval > day) { // 修改真实的总运转时间为当前新时间 equipment.Runtime = time; } else { // 真实的总运转时间累计新旧时间之差 equipment.Runtime += interval; } } } else { // 新时间小于旧时间,则直接将旧时间更新成新时间,但不更新真实的总运转时间 equipment.AccumulativeRuntime = time; } } }
/// <summary> /// 处理运转时间消息 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0x6004(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { _0x6004DX x6004 = new _0x6004DX(); x6004.Type = obj.TerminalType; x6004.Content = obj.MsgContent; x6004.Unpackage(); HandleEquipmentRuntime(equipment, x6004.TotalWorkTime); if (null != equipment) { using (var bll = new EquipmentBLL()) { bll.Update(f => f.id == equipment.id, act => { act.Runtime = equipment.Runtime; act.AccumulativeRuntime = equipment.AccumulativeRuntime; if (obj.TerminalType == Protocol.TerminalTypes.DH || obj.TerminalType == Protocol.TerminalTypes.DX) { // EPOS命令时清空报警 2015/09/24 08:00 act.Alarm = ALARM; } }); } } }
/// <summary> /// 处理设备的开关机信息 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0x5000(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { // 发动机启动/关闭信息 _0x5000 x5000 = new _0x5000(); x5000.Content = obj.MsgContent; x5000.Unpackage(); if (null != equipment) { EquipmentInstance.Update(f => f.id == equipment.id, act => { act.Voltage = string.Format("G{0}", ((int)Math.Floor(x5000.GeneratorVoltage * 10)).ToString("0000")); if (x5000.GPSInfo.Available) { act.Latitude = x5000.GPSInfo.Latitude; act.Longitude = x5000.GPSInfo.Longitude; act.GpsUpdated = false; } }); } if (x5000.GPSInfo.Available) { SaveGpsInfo(x5000.GPSInfo, equipment, obj.TerminalID, "0x5000"); } }
/// <summary> /// 处理命令回复的定位信息 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0x1000(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { _0x1000 x1000 = new _0x1000(); x1000.Content = obj.MsgContent; x1000.Unpackage(); if (null != equipment) { if (x1000.GPSInfo.Available) { using (var bll = new EquipmentBLL()) { bll.Update(f => f.id == equipment.id, act => { act.Latitude = x1000.GPSInfo.Latitude; act.Longitude = x1000.GPSInfo.Longitude; act.GpsUpdated = false; }); } } } if (x1000.GPSInfo.Available) { SaveGpsInfo(x1000.GPSInfo, equipment, obj.TerminalID, "Position command" + GetPackageType(obj.ProtocolType)); } }
private void Handle0x3000(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { _0x3000 x3000 = new _0x3000(); x3000.Content = obj.MsgContent; x3000.Unpackage(); if (null != equipment) { using (var bll = new EquipmentBLL()) { bll.Update(f => f.id == equipment.id, act => { act.LockStatus = CustomConvert.GetHex(x3000.Type); // 存储锁车状态 act.LockEffected = (byte)((x3000.Type == 0x40 || x3000.Type == 0x0F || x3000.Type == 0xFF) ? 1 : 0); if (x3000.GPSInfo.Available) { act.Latitude = x3000.GPSInfo.Latitude; act.Longitude = x3000.GPSInfo.Longitude; act.GpsUpdated = false; } }); } } if (x3000.GPSInfo.Available) { SaveGpsInfo(x3000.GPSInfo, equipment, obj.TerminalID, ("Security: " + x3000.Flag + GetPackageType(obj.ProtocolType))); } }
/// <summary> /// 处理终端OFF的信息 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0xFF00(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { // 终端没电关机 _0xFF00 xff00 = new _0xFF00(); xff00.Content = obj.MsgContent; xff00.Unpackage(); if (null != equipment) { EquipmentInstance.Update(f => f.id == equipment.id, act => { act.Voltage = "G0000"; act.OnlineStyle = (byte)LinkType.OFF; if (xff00.GPSInfo.Available) { act.Latitude = xff00.GPSInfo.Latitude; act.Longitude = xff00.GPSInfo.Longitude; act.GpsUpdated = false; } }); } if (xff00.GPSInfo.Available) { SaveGpsInfo(xff00.GPSInfo, equipment, obj.TerminalID, "0xFF00"); } }
/// <summary> /// 保存位置信息 /// </summary> /// <param name="obj"></param> private long SaveGpsInfo(GPSInfo obj, TB_Equipment equipment, string terminal, string type) { //if (!obj.Available) return -1; using (var bll = new PositionBLL()) { TB_Data_Position pos = bll.GetObject(); pos.Altitude = obj.Altitude; pos.Direction = obj.Direction; pos.Equipment = null == equipment ? (int?)null : equipment.id; pos.EW = obj.EW[0]; pos.GpsTime = obj.GPSTime; pos.Latitude = obj.Latitude; pos.Longitude = obj.Longitude; pos.NS = obj.NS[0]; pos.ReceiveTime = DateTime.Now; pos.Speed = obj.Speed; pos.StoreTimes = null == equipment ? 0 : equipment.StoreTimes; pos.Terminal = terminal; pos.Type = type; pos = bll.Add(pos); // 更新定位信息 ShowUnhandledMessage("position: " + pos.id); return(pos.id); } //HandleGpsAddress(pos); }
/// <summary> /// 处理终端OFF的信息 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0xFF00(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { // 终端没电关机 _0xFF00 xff00 = new _0xFF00(); xff00.Content = obj.MsgContent; xff00.Unpackage(); if (null != equipment) { using (var bll = new EquipmentBLL()) { bll.Update(f => f.id == equipment.id, act => { act.Voltage = "G0000"; act.OnlineStyle = (byte)LinkType.OFF; if (xff00.GPSInfo.Available) { act.Latitude = xff00.GPSInfo.Latitude; act.Longitude = xff00.GPSInfo.Longitude; act.GpsUpdated = false; } }); } } if (xff00.GPSInfo.Available) { SaveGpsInfo(xff00.GPSInfo, equipment, obj.TerminalID, "Battery OFF" + GetPackageType(obj.ProtocolType)); } }
/// <summary> /// 处理定期报告信息 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0x1001(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { _0x1001 x1001 = new _0x1001(); x1001.Content = obj.MsgContent; x1001.Unpackage(); HandleEquipmentRuntime(equipment, x1001.WorkTime); if (null != equipment) { using (var bll = new EquipmentBLL()) { bll.Update(f => f.id == equipment.id, act => { act.Signal = (x1001.CSQ_1 > 0 && x1001.CSQ_1 <= 31) ? x1001.CSQ_1 : ((x1001.CSQ_2 > 0 && x1001.CSQ_2 <= 31) ? x1001.CSQ_2 : byte.MinValue); // 去掉 0x1001 里面的运转时间更新 //if (x1001.WorkTime > 0) //{ act.AccumulativeRuntime = equipment.AccumulativeRuntime; act.Runtime = equipment.Runtime; //} // 更新0x1001里的定位信息 2015/09/09 23:29 if (x1001.Available_2) { act.Latitude = x1001.Latitude_2; act.Longitude = x1001.Longitude_2; } else if (x1001.Available_1) { act.Latitude = x1001.Latitude_1; act.Longitude = x1001.Longitude_1; } }); } } using (var posbll = new PositionBLL()) { var pos = GetGpsinfoFrom1001(x1001, true); if ((pos.Longitude > 0 && pos.Longitude < 180) && (pos.Latitude > 0 && pos.Latitude < 90)) { pos.Equipment = null == equipment ? (int?)null : equipment.id; pos.Terminal = obj.TerminalID; pos.StoreTimes = null == equipment ? 0 : equipment.StoreTimes; pos.Type = "Period report" + GetPackageType(obj.ProtocolType); posbll.Add(pos); } pos = GetGpsinfoFrom1001(x1001, false); if ((pos.Longitude > 0 && pos.Longitude < 180) && (pos.Latitude > 0 && pos.Latitude < 90)) { pos.Equipment = null == equipment ? (int?)null : equipment.id; pos.Terminal = obj.TerminalID; pos.StoreTimes = null == equipment ? 0 : equipment.StoreTimes; pos.Type = "Period report" + GetPackageType(obj.ProtocolType); posbll.Add(pos); } } }
private void HandleCommand(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { switch (obj.CommandID) { case 0x1000: Handle0x1000(obj, equipment, terminal); break; case 0x1001: HandleTerminalVersion(obj, terminal); Handle0x1001(obj, equipment, terminal); break; case 0x2000: Handle0x2000(obj, equipment, terminal); break; case 0x5000: Handle0x5000(obj, equipment, terminal); break; case 0x6000: break; case 0x6001: break; case 0x6004: break; case 0x6007: Handle0x6007(obj, equipment, terminal); break; case 0xBB00: HandleTerminalVersion(obj, terminal); break; case 0xBB0F: break; case 0xCC00: HandleTerminalVersion(obj, terminal); break; case 0xDD00: HandleTerminalVersion(obj, terminal); break; case 0xDD02: break; case 0xEE00: HandleTerminalVersion(obj, terminal); break; case 0xFF00: Handle0xFF00(obj, equipment, terminal); break; } }
/// <summary> /// 处理设备的开关机信息 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0x5000(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { // 发动机启动/关闭信息 _0x5000 x5000 = new _0x5000(); x5000.Type = obj.TerminalType; x5000.Content = obj.MsgContent; x5000.Unpackage(); HandleEquipmentRuntime(equipment, x5000.WorkTime); if (null != equipment) { string vol = format("G{0}0", ((int)Math.Floor(x5000.GeneratorVoltage * 10)).ToString("000")); using (var bll = new EquipmentBLL()) { bll.Update(f => f.id == equipment.id, act => { act.Voltage = vol; if (x5000.GeneratorVoltage > 20.0) { // 开机的时候清空报警信息 2015/09/24 08:00 act.Alarm = ALARM; } if (x5000.GeneratorVoltage < 20) { act.Rpm = 0; } act.Runtime = equipment.Runtime; act.AccumulativeRuntime = equipment.AccumulativeRuntime; //if (x5000.WorkTime > 0) //{ // // 如果总运转时间大于等于当前服务器中保存的时间则更新,否则不更新 // if (x5000.WorkTime >= act.Runtime) // { // act.Runtime = (int)x5000.WorkTime; // } //} if (x5000.GPSInfo.Available) { act.Latitude = x5000.GPSInfo.Latitude; act.Longitude = x5000.GPSInfo.Longitude; act.GpsUpdated = false; } }); } } if (x5000.GPSInfo.Available) { SaveGpsInfo(x5000.GPSInfo, equipment, obj.TerminalID, "Eng.: " + x5000.State + GetPackageType(obj.ProtocolType)); } }
/// <summary> /// 保存报警记录 /// </summary> /// <param name="equipment"></param> /// <param name="terminal"></param> /// <param name="posId"></param> /// <param name="alarm"></param> private void SaveAlarm(TB_Equipment equipment, string terminal_id, long posId, string alarm) { using (var bll = new AlarmBLL()) { var obj = bll.GetObject(); obj.Code = alarm; obj.Equipment = null == equipment ? (int?)null : equipment.id; obj.Position = (0 >= posId ? (long?)null : posId); obj.StoreTimes = null == equipment ? 0 : equipment.StoreTimes; obj.Terminal = terminal_id; bll.Add(obj); } }
/// <summary> /// 处理保安命令 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0x6007(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { _0x6007 x6007 = new _0x6007(); x6007.Content = obj.MsgContent; x6007.Unpackage(); if (null != equipment) { EquipmentInstance.Update(f => f.id == equipment.id, act => { act.LockStatus = CustomConvert.GetHex(x6007.Code); }); } }
private string GetEquipment(TB_Terminal terminal, TB_Equipment equipment) { if (null == equipment) { return("<a href=\"./equipment_terminal.aspx?key=" + Utility.UrlEncode(Utility.Encrypt(terminal.id.ToString())) + "\">bind</a>"); } if (string.IsNullOrEmpty(terminal.Sim)) { return("no sim card"); } return("<a href=\"#unbind_" + terminal.id + "\">" + EquipmentInstance.GetFullNumber(equipment) + "</a>"); }
/// <summary> /// 处理EE00命令 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0xEE00(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { _0xEE00 xee00 = new _0xEE00(); xee00.Content = obj.MsgContent; xee00.Unpackage(); // 更新终端发送命令的结果 if (null != equipment && xee00.ErrorCommand.Equals("0x6007")) { // 更新锁车状态 using (var bll = new EquipmentBLL()) { bll.Update(f => f.id == equipment.id, act => { act.LockStatus = xee00.ErrorParamenter; }); } } // 更新命令的发送状态 using (var bll = new CommandBLL()) { bll.Update(f => f.DestinationNo == obj.TerminalID && f.Command == xee00.ErrorCommand && f.ScheduleTime >= DateTime.Now.AddMinutes(-3) && f.Status >= (byte)CommandStatus.SentByTCP && f.Status <= (byte)CommandStatus.SentToDest, act => { byte b = 0x10; switch (xee00.Error) { case 0x20: b = (byte)CommandStatus.EposFail; break; case 0x30: b = (byte)CommandStatus.EngNotStart; break; default: b = (byte)CommandStatus.NoFunction; break; } act.Status = b; }); } }
/// <summary> /// 处理0xEE00传回来的0x6007命令 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0xEE00(TX300 obj, TB_Equipment equipment) { _0xEE00 xee00 = new _0xEE00(); xee00.Content = obj.MsgContent; xee00.Unpackage(); if (xee00.ErrorCommand == "0x6007") { if (null != equipment) { EquipmentInstance.Update(f => f.id == equipment.id && f.Deleted == false, act => { act.LockStatus = xee00.ErrorParamenter; }); } } }
/// <summary> /// 处理DD00命令 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0xDD00(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { _0xDD00 xdd00 = new _0xDD00(); xdd00.Content = obj.MsgContent; xdd00.Unpackage(); if (null != equipment) { using (var bll = new EquipmentBLL()) { bll.Update(f => f.id == equipment.id, act => { act.Signal = xdd00.CSQ; }); } } //if (null != terminal) //{ // TerminalInstance.Update(f => f.id == terminal.id, act => { act.Firmware = xdd00.Firmware; }); //} }
public TempEquipment(TB_Equipment obj) { Number = obj.TB_EquipmentModel.Code + obj.Number; Id = obj.id; var n = (int?)null; Terminal = n == obj.Terminal ? "" : obj.TB_Terminal.Number; Sim = n == obj.Terminal ? "" : obj.TB_Terminal.Sim; Satellite = n == obj.Terminal ? "" : (n == obj.TB_Terminal.Satellite ? "" : obj.TB_Terminal.TB_Satellite.CardNo); Functional = Utility.GetEquipmentFunctional(obj.Functional.Value); Worktime = EquipmentBLL.GetRuntime(obj.Runtime + obj.InitializedRuntime, obj.CompensatedHours.Value, true); Latitude = obj.Latitude.Value; Longitude = obj.Longitude.Value; Online = Utility.GetOnlineStyle(obj.OnlineStyle, obj.OnlineTime, false); Lock = obj.LockStatus; Acttime = null == obj.LastActionTime ? 0 : CustomConvert.DateTimeToJavascriptDate(obj.LastActionTime.Value); Voltage = obj.Voltage; Alarm = obj.Alarm; }
/// <summary> /// 保存位置信息 /// </summary> /// <param name="obj"></param> private void SaveGpsInfo(GPSInfo obj, TB_Equipment equipment, string terminal, string type) { TB_Data_Position pos = PositionInstance.GetObject(); pos.Altitude = obj.Altitude; pos.Direction = obj.Direction; pos.Equipment = null == equipment ? (int?)null : equipment.id; pos.EW = obj.EW[0]; pos.GpsTime = obj.GPSTime; pos.Latitude = obj.Latitude; pos.Longitude = obj.Longitude; pos.NS = obj.NS[0]; pos.ReceiveTime = DateTime.Now; pos.Speed = obj.Speed; pos.StoreTimes = null == equipment ? 0 : equipment.StoreTimes; pos.Terminal = terminal; pos.Type = type; PositionInstance.Add(pos); }
/// <summary> /// 处理仪表盘数据 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0x6000(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { _0x6000 x6000 = new _0x6000(); x6000.Content = obj.MsgContent; x6000.Unpackage(); if (null != equipment) { using (var bll = new EquipmentBLL()) { bll.Update(f => f.id == equipment.id, act => { act.Rpm = (short)x6000.RPM; // EPOS命令时清空报警 2015/09/24 08:00 act.Alarm = ALARM; }); } } }
/// <summary> /// 处理DD02卫星功能命令 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0xDD02(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { _0xDD02 xdd02 = new _0xDD02(); xdd02.Content = obj.MsgContent; xdd02.Unpackage(); if (null != equipment) { using (var bll = new EquipmentBLL()) { bll.Update(f => f.id == equipment.id, act => { act.SatelliteStatus = xdd02.Status; }); } } if (null != terminal) { using (var bll = new TerminalBLL()) { bll.Update(f => f.id == terminal.id, act => { act.SatelliteStatus = xdd02.Status; }); } } }
/// <summary> /// 处理报警信息 /// </summary> /// <param name="obj"></param> private void Handle0x2000(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { // 报警 _0x2000 x2000 = new _0x2000(); x2000.Content = obj.MsgContent; x2000.Unpackage(); if (null != equipment) { using (var bll = new EquipmentBLL()) { bll.Update(f => f.id == equipment.id, act => { if (x2000.AlarmBIN[0] == '1') { // Main Power Disconnect act.Voltage = "G0000"; // 主电断报警之后进入睡眠状态 act.OnlineStyle = (byte)LinkType.SLEEP; } // 同时更新设备的报警状态 2015/09/10 14:02 act.Alarm = x2000.AlarmBIN; if (x2000.GPSInfo.Available) { act.Latitude = x2000.GPSInfo.Latitude; act.Longitude = x2000.GPSInfo.Longitude; act.GpsUpdated = false; } }); } } long gps = -1; if (x2000.GPSInfo.Available) { gps = SaveGpsInfo(x2000.GPSInfo, equipment, obj.TerminalID, "Alarm report" + GetPackageType(obj.ProtocolType)); } // 保存报警信息 SaveAlarm(equipment, obj.TerminalID, gps, x2000.AlarmBIN); }
/// <summary> /// 处理保安命令 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0x6007(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { _0x6007 x6007 = new _0x6007(); x6007.Content = obj.MsgContent; x6007.Unpackage(); if (null != equipment) { using (var bll = new EquipmentBLL()) { bll.Update(f => f.id == equipment.id, act => { act.LockStatus = CustomConvert.GetHex(x6007.Code); if (obj.TerminalType == Protocol.TerminalTypes.DH || obj.TerminalType == Protocol.TerminalTypes.DX) { // EPOS命令时清空报警 2015/09/24 08:00 act.Alarm = ALARM; } }); } } }
/// <summary> /// 处理CC00命令,这里只处理卫星方式 /// </summary> /// <param name="obj"></param> /// <param name="equipment"></param> /// <param name="terminal"></param> private void Handle0xCC00(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { _0xCC00 cc00 = new _0xCC00(); cc00.Content = obj.MsgContent; cc00.Unpackage(); HandleEquipmentRuntime(equipment, cc00.WorkTime); if (null != equipment) { using (var bll = new EquipmentBLL()) { bll.Update(f => f.id == equipment.id, act => { act.Runtime = equipment.Runtime; act.AccumulativeRuntime = equipment.AccumulativeRuntime; if ((int?)null != act.Terminal) { act.TB_Terminal.Firmware = cc00.Firmware; } }); } } // 更新最近发送的0xBB0F命令为成功状态 Handle0xBB0FStatus(); // 返回铱星方式的0xCC00数据 //if (obj.ProtocolType == Protocol.ProtocolTypes.SATELLITE) //{ // var cc00 = Get0xCC00(obj); // var cmd = CommandInstance.GetObject(); // cmd.Command = "0xCC00"; // cmd.Content = CustomConvert.GetHex(cc00); // cc00 = null; // cmd.DestinationNo = terminal.Sim + (terminal.Sim.Length < 11 ? "000" : ""); // cmd.Status = (byte)CommandStatus.WaitingForSatellite; // cmd.Terminal = terminal.id; // CommandInstance.Add(cmd); //} }
/// <summary> /// 处理0x1000命令 /// </summary> /// <param name="obj"></param> private void Handle0x1000(TX300 obj, TB_Equipment equipment) { _0x1000 x1000 = new _0x1000(); x1000.Content = obj.MsgContent; x1000.Unpackage(); if (null != equipment) { if (x1000.GPSInfo.Available) { EquipmentInstance.Update(f => f.id == equipment.id && f.Deleted == false, act => { act.Latitude = x1000.GPSInfo.Latitude; act.Longitude = x1000.GPSInfo.Longitude; act.GpsUpdated = false; }); } } if (x1000.GPSInfo.Available) { SaveGpsInfo(x1000.GPSInfo, equipment, obj.TerminalID, "0x1000"); } }
/// <summary> /// 处理新版的卫星通讯协议 /// </summary> /// <param name="data"></param> private void HandleIridiumNewProtocolPackage(IridiumData data) { if (data.Payload[0] == 0x01) { // 新版的卫星通讯协议 uint thisWorkTime = BitConverter.ToUInt32(data.Payload, 13); string locks = CustomConvert.GetHex(data.Payload[1]); string alarms = CustomConvert.IntToDigit(data.Payload[2], CustomConvert.BIN, 8) + CustomConvert.IntToDigit(data.Payload[3], CustomConvert.BIN, 8); IridiumLocation location = new IridiumLocation(); location.LatLng = new byte[IridiumLocation.SIZE]; Buffer.BlockCopy(data.Payload, 4, location.LatLng, 0, IridiumLocation.SIZE); location.Unpackate(); // 通过卫星的IMEI号码查找终端 using (var tbll = new TerminalBLL()) { using (var ebll = new EquipmentBLL()) { var terminal = tbll.Find(f => f.TB_Satellite.CardNo.Equals(data.IMEI)); TB_Equipment equipment = null; if (null != terminal) { // 只有第一版的终端才需要计算补偿时间 var compensated = terminal.Version == 1; tbll.Update(f => f.id == terminal.id, act => { act.OnlineStyle = (byte)LinkType.SATELLITE; // 同时更新终端的最后链接时间 act.OnlineTime = data.Time; }); equipment = ebll.Find(f => f.Terminal == terminal.id); if (null != equipment) { // 旧的运转时间 var oldRuntime = equipment.Runtime; var interval = 0 == oldRuntime ? 0 : (thisWorkTime - oldRuntime); // 粗略增加的小时数,启动时加2小时 var addMin = interval > 60 ? interval / 60 : 1 + (location.EngFlag.Equals("On") ? 1 : 0); int addHour = (int)(interval > 60 ? interval / 60 : 1);// 显示历史记录 string oldCompensated = format("WorkHours {0}, UsedHours {1}, Efficiency {2}, AddHours {3}, Compensated {4}", equipment.WorkHours, equipment.UsedHours, equipment.HourWorkEfficiency, equipment.AddedHours, equipment.CompensatedHours); string newCompensated = ""; // 更新设备的总运转时间 HandleEquipmentRuntime(equipment, thisWorkTime); if (null != equipment) { string calculated = ""; ebll.Update(f => f.id == equipment.id, act => { act.OnlineStyle = (byte)LinkType.SATELLITE; act.OnlineTime = data.Time; // 更新设备的报警状态 2015/09/10 14:04 act.Alarm = alarms; act.LastAction = "0x1000"; act.LastActionBy = "SAT"; act.LastActionTime = data.Time; // 更新定位信息 2015/09/09 23:29 if (location.Available) { act.Latitude = location.Latitude; act.Longitude = location.Longitude; } // 更新启动与否状态 2015/08/31 act.Voltage = location.EngFlag.Equals("On") ? "G2400" : "G0000"; // 更新总运转时间 act.Runtime = equipment.Runtime; act.AccumulativeRuntime = equipment.AccumulativeRuntime; // 更新 version 终端为1的版本的运转时间的补偿 if (compensated && interval > 0) { // 实际工作小时数 act.WorkHours += interval / 60.0; // 实际所用小时数 act.UsedHours += addHour; // 重新计算每小时工作效率 act.HourWorkEfficiency = act.WorkHours / act.UsedHours; // 补偿的小时数 act.AddedHours += addMin / 60.0; // 实际补偿的小时数 act.CompensatedHours = act.AddedHours * act.HourWorkEfficiency; } // 如果回来的运转时间比当前时间大则更新成为On状态 暂时 2015/09/02 //if (worktime > act.Runtime) //{ // // act.Voltage = "G2400"; // act.Runtime = (int)worktime; //} //else //{ // if (worktime > 0) // { // // 运转时间不为零的话,更新运转时间 // act.Runtime = (int)worktime; // } //} // 锁车状态 2015/08/14 if (act.LockStatus != locks) { act.LockStatus = locks; } // 判断锁车的有效状态 if (locks.Equals("40") || locks.Equals("0F") || locks.Equals("FF")) { // 锁车时还有开机状态 if (location.EngFlag.Equals("On")) { // 锁车了,但未关机,还在工作中 if (act.LockEffected == (byte)LockEffect.Locked) { act.LockEffected = (byte)LockEffect.LockedAndStillWork; } else if (act.LockEffected == (byte)LockEffect.LockedAndEngineOff) { // 锁车了且已关机了,此时再开机则需要报警(没锁住车) act.LockEffected = (byte)LockEffect.LockedAndNoEffect; } } else { // 锁车了,且已关机了 if (act.LockEffected == (byte)LockEffect.Locked) { act.LockEffected = (byte)LockEffect.LockedAndEngineOff; } } } }); if (compensated && interval > 0) { equipment = ebll.Find(f => f.id == equipment.id); newCompensated = format("WorkHours {0}, UsedHours {1}, Efficiency {2}, AddHours {3}, Compensated {4}", equipment.WorkHours, equipment.UsedHours, equipment.HourWorkEfficiency, equipment.AddedHours, equipment.CompensatedHours); calculated = format("Compensate changed(interval: {0}){1} from {2}{3} to {4}", interval, Environment.NewLine, oldCompensated, Environment.NewLine, newCompensated); } if (!string.IsNullOrEmpty(calculated)) { OnUnhandledMessage(this, new Sockets.UIEventArgs() { Message = format("{0}{1}{2}", Now, calculated, Environment.NewLine) }); } } } else { OnUnhandledMessage(this, new Sockets.UIEventArgs() { Message = format("{0} Iridium has not bind with any equipment.", Now, Environment.NewLine) }); } } else { OnUnhandledMessage(this, new Sockets.UIEventArgs() { Message = format("{0} Satellite has no terminal, data will save as terminal number: \"{1}\".{2}", Now, data.IMEI.Substring(4), Environment.NewLine) }); } // 保存TX300历史记录 SaveTX300History(new TX300() { CommandID = 0x1000, MsgContent = data.Payload, ProtocolType = ProtocolTypes.SATELLITE, // 默认装载机终端类型 2015/09/22 09:40 TerminalType = null == terminal ? TerminalTypes.LD : terminal.Type.Value, // 没有终端时,用IMEI号码的末尾11位数字表示终端号码 2015/09/22 09:40 TerminalID = null == terminal ? data.IMEI.Substring(4) : terminal.Sim, TotalLength = (ushort)data.Payload.Length }, data.Time, ebll.GetFullNumber(equipment)); try { long?posId = null; if (location.Available) { using (var posbll = new PositionBLL()) { var pos = posbll.GetObject(); pos.Latitude = location.Latitude; pos.Longitude = location.Longitude; pos.NS = location.NSI; pos.EW = location.EWI; pos.StoreTimes = null == equipment ? 0 : equipment.StoreTimes; pos.GpsTime = data.Time; pos.Equipment = null == equipment ? (int?)null : equipment.id; // 没有终端时,用IMEI号码的末尾11位数字表示终端号码 2015/09/22 09:40 pos.Terminal = null == terminal?data.IMEI.Substring(4) : (terminal.Sim.Length < 11 ? (terminal.Sim + "000") : terminal.Sim); pos.Type = location.Report + "(Eng " + location.EngFlag + ")(SAT)"; posbll.Add(pos); posId = pos.id; } } // 处理报警信息 if (alarms != ALARM) { using (var armbll = new AlarmBLL()) { var arm = armbll.GetObject(); arm.Code = alarms; arm.AlarmTime = data.Time; arm.Equipment = null == equipment ? (int?)null : equipment.id; arm.Position = posId; arm.StoreTimes = null == equipment ? 0 : equipment.StoreTimes; // 没有终端时,用IMEI号码的末尾11位数字表示终端号码 2015/09/22 09:40 arm.Terminal = null == terminal?data.IMEI.Substring(4) : (terminal.Sim.Length < 11 ? (terminal.Sim + "000") : terminal.Sim); armbll.Add(arm); } } } catch (Exception e) { OnUnhandledMessage(this, new Sockets.UIEventArgs() { Message = format("{0}{1}{2}{3}", Now, e.Message, Environment.NewLine, e.StackTrace) }); } // 更新卫星方式的命令状态(只处理命令回复的1000,其他的命令在普通命令过程中处理) if (location.ReportType == 1 && data.Payload.Length <= 17) { HandleIridiumCommandResponseed(data); } location.Dispose(); location = null; } } } }
private void HandleCommand(TX300 obj, TB_Equipment equipment, TB_Terminal terminal) { switch (obj.CommandID) { case 0x1000: Handle0x1000(obj, equipment, terminal); break; case 0x1001: HandleTerminalVersion(obj, terminal); Handle0x1001(obj, equipment, terminal); break; case 0x2000: Handle0x2000(obj, equipment, terminal); break; case 0x3000: Handle0x3000(obj, equipment, terminal); break; case 0x5000: Handle0x5000(obj, equipment, terminal); break; case 0x6000: Handle0x6000(obj, equipment, terminal); break; case 0x6001: break; case 0x6004: Handle0x6004(obj, equipment, terminal); break; case 0x6007: Handle0x6007(obj, equipment, terminal); break; case 0x600B: Handle0x600B(obj, equipment, terminal); break; case 0xBB00: HandleTerminalVersion(obj, terminal); break; case 0xBB0F: break; case 0xCC00: Handle0xCC00(obj, equipment, terminal); //HandleTerminalVersion(obj, terminal); break; case 0xDD00: HandleTerminalVersion(obj, terminal); Handle0xDD00(obj, equipment, terminal); break; case 0xDD02: // 增加处理DD02命令的功能 2015/09/18 14:10 Handle0xDD02(obj, equipment, terminal); break; case 0xEE00: Handle0xEE00(obj, equipment, terminal); HandleTerminalVersion(obj, terminal); break; case 0xFF00: Handle0xFF00(obj, equipment, terminal); break; } }