Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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;
                        }
                    });
                }
            }
        }
Esempio n. 3
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");
            }
        }
Esempio n. 4
0
 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;
         }
     }
 }
Esempio n. 5
0
        /// <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;
                        }
                    });
                }
            }
        }
Esempio n. 6
0
        /// <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");
            }
        }
Esempio n. 7
0
        /// <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));
            }
        }
Esempio n. 8
0
        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)));
            }
        }
Esempio n. 9
0
        /// <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");
            }
        }
Esempio n. 10
0
 /// <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);
 }
Esempio n. 11
0
        /// <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));
            }
        }
Esempio n. 12
0
        /// <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);
                }
            }
        }
Esempio n. 13
0
        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;
            }
        }
Esempio n. 14
0
        /// <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));
            }
        }
Esempio n. 15
0
 /// <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);
     }
 }
Esempio n. 16
0
        /// <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);
                });
            }
        }
Esempio n. 17
0
        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>");
        }
Esempio n. 18
0
        /// <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;
                });
            }
        }
Esempio n. 19
0
        /// <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;
                    });
                }
            }
        }
Esempio n. 20
0
        /// <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; });
            //}
        }
Esempio n. 21
0
        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;
        }
Esempio n. 22
0
        /// <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);
        }
Esempio n. 23
0
        /// <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;
                    });
                }
            }
        }
Esempio n. 24
0
        /// <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; });
                }
            }
        }
Esempio n. 25
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)
            {
                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);
        }
Esempio n. 26
0
        /// <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;
                        }
                    });
                }
            }
        }
Esempio n. 27
0
        /// <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);
            //}
        }
Esempio n. 28
0
        /// <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");
            }
        }
Esempio n. 29
0
        /// <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;
                    }
                }
            }
        }
Esempio n. 30
0
        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;
            }
        }