예제 #1
0
        /// <summary>
        /// 判断并执行报工(两种情况:1、正常每个机台最后一道工序报工;2、出现FAIL时不管处于哪个工序都立即报工)
        /// </summary>
        /// <param name="_session"></param>
        /// <param name="_transData"></param>
        /// <param name="equipmentID"></param>
        /// <param name="employeeName"></param>
        /// <param name="isCheck">是否需要校验机台工序是否处于该机台最后一步,默认需要</param>
        /// <param name="toPlc"></param>
        /// <returns></returns>
        public static bool WorkingEfficiency(MesSession _session, TransData _transData, string equipmentID, string employeeName, string INorOUT, bool toPlc = false)
        {
            string caller = string.Empty;

            try
            {
                // true-报工成功,false-报工失败
                DM_API.DM_SFCInterface Dm_Interface = new DM_API.DM_SFCInterface();
                //E.ATP1002.0020.01 传ATP1002.0020
                string phevEquipID = equipmentID.Substring(equipmentID.Length - 15, 12);
                string actionParam = $"{_transData.SN},{phevEquipID},{INorOUT},产品工站工时效率";
                caller = $"{employeeName}-{_transData.DeviceCode}_{_transData.OpeIndex}MES报工";
                DataTable dtR;
                bool      bRet = GlobalData.RunTaskWithTimeoutDT <DataTable>(delegate { return(Dm_Interface.SFC_DM_UnitItemWorkingEfficiency(_transData.SN, phevEquipID, INorOUT, "产品工站工时效率")); }, out dtR, GlobalData.ApiTimeout, _session, _transData, actionParam, caller, toPlc);

                // SAP报工
                if (INorOUT == "103OUT")
                {
                    string status_IN = _transData.Status.Contains("OK") ? "1" : "0";//【PASS】传值<1>,【FAIL】传值<0>
                    actionParam = $"{phevEquipID},{_transData.SN},{status_IN}";
                    caller      = $"{employeeName}-{_transData.DeviceCode}_{_transData.OpeIndex}SAP报工";
                    bRet        = GlobalData.RunTaskWithTimeoutDT <DataTable>(delegate { return(Dm_Interface.SFC_DM_Proc_MESSet_OrdersConfirm(phevEquipID, _transData.SN, status_IN)); }, out dtR, GlobalData.ApiTimeout, _session, _transData, actionParam, caller, toPlc);
                }
                return(bRet);
            }
            catch (Exception e)
            {
                LogInfo log = new SocketService.LogInfo(_session, LogLevel.Error, $"[{_transData.SN}]执行【{caller}】接口失败>> Error:{e.Message}");
                return(false);
            }
        }
예제 #2
0
 void NewSessionConnected(MesSession session)
 {
     this.Invoke(new ThreadStart(delegate
     {
         SessionConnectUpdate(session);
     }));
 }
예제 #3
0
        /// <summary>
        /// 反馈消息至PLC
        /// </summary>
        /// <param name="_session"></param>
        /// <param name="_transData"></param>
        /// <param name="checkR"></param>
        public static void SendMsg(MesSession _session, TransData _transData, CheckResult checkR)
        {
            _transData.Status = checkR.ToString();
            string msg = GlobalData.ToTranString(_transData);

            _session.Send(msg);
            LogInfo log = new SocketService.LogInfo(_session, LogLevel.Info, GlobalData.Pre_Send + msg);
        }
예제 #4
0
 public TestItemFlex(string sn, string devCode, string equipmentID, List <string> processData, MesSession mesSession)
 {
     SN          = sn;
     DevCode     = devCode;
     EquipmentID = equipmentID;
     ProcessData = processData;
     MesSession  = mesSession;
 }
예제 #5
0
        /// <summary>
        /// 关键字段为空时处理方法
        /// </summary>
        /// <param name="_session"></param>
        /// <param name="_transData"></param>
        /// <param name="_keyWord"></param>
        public static void KeyWordIsNullRecv(MesSession _session, TransmitData _transData, string _keyWord)
        {
            _transData.CheckResult = "NG";
            _transData.Description = _keyWord + " is null Or white space.";
            string sendTransData = JsonHelper.SerializeObject(_transData);

            _session.Send(sendTransData);
            _session.Logger.Error(_transData.CheckResult + "---" + _transData.Description);
        }
예제 #6
0
        // 螺丝数据队列
        public TestItemFlex(MesSession mesSession, TransData transData, string equipmentID, string employeeName, string type)
        {
            MesSession  = mesSession;
            TransData   = transData;
            EquipmentID = equipmentID;

            EmployeeName = employeeName;
            Type         = type;
        }
예제 #7
0
        private void SessionConnectUpdate(MesSession session)
        {
            lstClientConnHistory.Insert(0, new ClientInfo(session.SessionID, session.RemoteDeviceName, session.StartTime.ToString("yyyy-MM-dd HH:mm:ss.fff"), "连接", ""));

            //TeartbeatShowStateInfo(GlobalData.ClientSessionList.Count, session.RemoteEndPoint + " 成功连接至服务器中心.");


            dataCount  = GlobalData.ClientSessionList.FindAll(li => li.LocalEndPoint.Port == 5000).Count();
            heartCount = GlobalData.ClientSessionList.FindAll(li => li.LocalEndPoint.Port == 5001).Count();
            UpdateClientCount(dataCount, heartCount);
        }
예제 #8
0
        /// <summary>
        /// 执行生产扣料(不管需不需要,过站前执行一遍,系统自动判断,如需口料则扣,无需则不扣)
        /// 该方法执行成功与否无需知会PLC
        /// </summary>
        /// <param name="_session"></param>
        /// <param name="_transData"></param>
        /// <param name="workOrder"></param>
        /// <param name="equipmentID"></param>
        /// <param name="apiStatus"></param>
        /// <param name="employeeName"></param>
        /// <returns></returns>
        private static bool ReduceComponent(MesSession _session, TransData _transData, string equipmentID, string employeeName, bool toPlc)
        {
            // 判断API是否执行超时 ---------------------------------
            DM_API.DM_SFCInterface Dm_Interface = new DM_API.DM_SFCInterface();
            employeeName += "_生产扣料";
            string    actionParam = $"{equipmentID},{_transData.SN}";
            DataTable dtR;
            bool      bRet = GlobalData.RunTaskWithTimeoutDT <DataTable>(delegate { return(Dm_Interface.SFC_DM_Standard_BMReduceComponent(equipmentID, _transData.SN)); }, out dtR, GlobalData.ApiTimeout, _session, _transData, actionParam, employeeName, toPlc);

            return(bRet);
        }
예제 #9
0
        private void SessionClosedQueueServer_ProcessItem(MesSession session)
        {
            this.Invoke(new ThreadStart(delegate
            {
                lstClientConnHistory.Insert(0, new ClientInfo(session.SessionID, session.RemoteDeviceName, session.StartTime.ToString("yyyy-MM-dd HH:mm:ss.fff"), "断开", ""));

                dataCount  = GlobalData.ClientSessionList.FindAll(li => li.LocalEndPoint.Port == 5000).Count();
                heartCount = GlobalData.ClientSessionList.FindAll(li => li.LocalEndPoint.Port == 5001).Count();
                UpdateClientCount(dataCount, heartCount);
            }));
        }
예제 #10
0
        /// <summary>
        /// 校验Status并返回
        /// </summary>
        /// <param name="_session"></param>
        /// <param name="_transData"></param>
        /// <param name="status"></param>
        /// <param name="caller"></param>
        /// <returns></returns>
        public static bool CheckApiStatus(MesSession _session, TransData _transData, out string apiStatus, string caller)
        {
            META_ParameterInfo info = BLLFactory <META_Parameter> .Instance.FindSingle($"Key='{_transData.Status}'");

            apiStatus = "ERROR";
            if (info == null || string.IsNullOrEmpty(info.Value))
            {
                LogInfo log = new SocketService.LogInfo(_session, LogLevel.Error, $"[{_transData.SN}]执行【{caller}】接口失败>> 参数错误,请检查SQLLite中是否配置WorkOrder参数,执行参数:{_transData.Status}。");
                EmployeeComm.SendMsg(_session, _transData, CheckResult.NG);
                return(false);
            }
            apiStatus = info.Value;
            return(true);
        }
예제 #11
0
        /// <summary>
        /// 校验EquipmentID并返回
        /// </summary>
        /// <param name="_session"></param>
        /// <param name="_transData"></param>
        /// <param name="equipmentID"></param>
        /// <returns></returns>
        public static bool CheckEquipmentID(MesSession _session, TransData _transData, out string equipmentID, string caller)
        {
            caller     += "-获取设备编码";
            equipmentID = string.Empty;
            META_DevLinkInfo info = BLLFactory <META_DevLink> .Instance.FindSingle($"DevCode='{_transData.DeviceCode}'");

            if (info == null)
            {
                LogInfo log = new SocketService.LogInfo(_session, LogLevel.Error, $"[{_transData.SN}]执行【{caller}】接口失败>> 参数错误,根据机台编码[{_transData.DeviceCode}] 获取设备编码失败,请检查SQLLite中是否配置机台映射关系。");
                _transData.ProcessData = $"Failed to get the equipmentID by {_transData.DeviceCode},Check SQLite DB.";
                EmployeeComm.SendMsg(_session, _transData, CheckResult.NG);
                return(false);
            }

            //前工序校验是获取产品工艺类型
            if (!GlobalData.IsDebug && _transData.FuncCode == "PRC")
            {
                DataTable dtR;
                DM_API.DM_SFCInterface Dm_Interface = new DM_API.DM_SFCInterface();
                caller += "-获取工艺类型<用于识别设备编码>";
                string[] arrSN = _transData.SN.Trim().Split('-');
                bool     bRet  = GlobalData.RunTaskWithTimeoutDT <DataTable>(delegate { return(Dm_Interface.SFC_DM_SelectProductionProcess(arrSN[0])); }, out dtR, GlobalData.ApiTimeout, _session, _transData, arrSN[0], caller);
                if (!bRet)
                {
                    return(false);
                }

                string type = DataTableHelper.GetCellValueinDT(dtR, 0, 1);
                info.ProcessType = type;
                BLLFactory <META_DevLink> .Instance.Update(info, info.ID);

                LogInfo log = new SocketService.LogInfo(_session, LogLevel.Info, $"[{_transData.SN}]获取当前机台工艺类型成功,工艺类型[{info.ProcessType}]【已缓存】 ");
            }

            switch (info.ProcessType)
            {
            case "PHEV-3.3KW":
                equipmentID = info.EquipmentID2;
                break;

            case "PHEV-6.6KW":
                equipmentID = info.EquipmentID3;
                break;

            default:
                equipmentID = info.EquipmentID1;
                break;
            }
            return(true);
        }
예제 #12
0
        public LogInfo(MesSession session, LogLevel logLevel, string msg)
        {
            BaseInfo(logLevel, msg);
            isView           = session.IsShowLog;
            localAddress     = session.LocalEndPoint.Address.ToString();
            localPort        = session.LocalEndPoint.Port.ToString();
            localDeviceName  = session.LocalDeviceName;
            remoteAddress    = session.RemoteEndPoint.Address.ToString();
            remotePort       = session.RemoteEndPoint.Port.ToString();
            remoteDeviceName = session.RemoteDeviceName;

            ILog iLog = session.Logger;

            WriteLog(iLog, logLevel);
        }
예제 #13
0
        /// <summary>
        /// 测试失败记录不良(ps:打螺丝失败等)
        /// </summary>
        /// <param name="_session"></param>
        /// <param name="_transData"></param>
        /// <param name="equipmentID"></param>
        /// <returns></returns>
        private static bool BadRecord(MesSession _session, TransData _transData, string badItemName, string equipmentID, string apiStatus, string employeeName)
        {
            DM_API.DM_SFCInterface Dm_Interface = new DM_API.DM_SFCInterface();
            string actionParam = $"{_transData.SN},{badItemName},0.0,0.0,0.0,FAIL";
            string caller      = $"{employeeName}-记录不良";
            string sRet        = GlobalData.RunTaskWithTimeout <string>(delegate { return(Dm_Interface.SFC_DM_InsertTestItem(_transData.SN, badItemName, 0.0, 0.0, 0.0, "FAIL")); }, GlobalData.ApiTimeout, _session, _transData, actionParam, caller);

            if (string.IsNullOrWhiteSpace(sRet))
            {
                return(false);
            }

            WorkingEfficiency(_session, _transData, equipmentID, employeeName, "103OUT");

            return(true);
        }
예제 #14
0
        /// <summary>
        /// 校验WorkOrder并返回
        /// </summary>
        /// <param name="_session"></param>
        /// <param name="_transData"></param>
        /// <param name="workOrder"></param>
        /// <param name="caller"></param>
        /// <returns></returns>
        public static bool CheckNormalParam(MesSession _session, TransData _transData, string paramKey, out string paramValue, string paramDisplay, string caller)
        {
            META_ParameterInfo info = BLLFactory <META_Parameter> .Instance.FindSingle($"Key='{paramKey}'");

            if (info == null && string.IsNullOrEmpty(info.Value))
            {
                paramValue = "ERROR";
                LogInfo log = new SocketService.LogInfo(_session, LogLevel.Error, $"[{_transData.SN}]执行【{caller}】接口失败>> 参数错误,获取{paramDisplay}失败,请检查SQLLite中是否缓存{paramDisplay},(请求参数:{paramKey})。");
                _transData.ProcessData = $"Failed to get the cache barcode by [{paramKey}],Check SQLite DB.";
                EmployeeComm.SendMsg(_session, _transData, CheckResult.NG);
                return(false);
            }

            paramValue = info.Value;
            return(true);
        }
예제 #15
0
        /// <summary>
        /// 校验ProcessData并返回
        /// </summary>
        /// <param name="_session"></param>
        /// <param name="_transData"></param>
        /// <param name="status"></param>
        /// <param name="caller"></param>
        /// <returns></returns>
        public static bool CheckProcessData(MesSession _session, TransData _transData, out List <string> lstProcessData, string caller, Comparator comparator, int count)
        {
            lstProcessData = StringHelper.GetStrArray(_transData.ProcessData, ',', false);
            bool bCp = false;

            switch (comparator)
            {
            case Comparator.MoreThan:
                if (lstProcessData.Count > count)
                {
                    bCp = true;
                }
                break;

            case Comparator.LessThan:
                if (lstProcessData.Count < count)
                {
                    bCp = true;
                }
                break;

            case Comparator.Equal:
                if (lstProcessData.Count == count)
                {
                    bCp = true;
                }
                break;

            case Comparator.NotEqual:
                if (lstProcessData.Count != count)
                {
                    bCp = true;
                }
                break;
            }

            if (!bCp)
            {
                LogInfo log = new SocketService.LogInfo(_session, LogLevel.Error, $"[{_transData.SN}]执行【{caller}】协议错误,当前协议中过程数据项应该是{EnumHelper.GetDescription(typeof(Comparator), comparator)}{count}项,当前过程数据({lstProcessData.Count} 项):{_transData.ProcessData}。");
                _transData.ProcessData = $"Protocol error, procedure data should be {comparator} {count} items, current is {lstProcessData.Count} items, procedure data: {_transData.ProcessData}";
                EmployeeComm.SendMsg(_session, _transData, CheckResult.NG);
            }

            return(bCp);
        }
예제 #16
0
        /// <summary>
        /// 执行过站 [包含操作:1、判断是否记录不良(FAIL时记录),2、执行生产扣料(不管是否需要扣料都执行),3、判断是否执行报工(正常是机台最后一道工序,但是如果遇到FAIL则马上执行报工),4、插过站记录]
        /// </summary>
        /// <returns></returns>
        public static bool CheckRoute(MesSession _session, TransData _transData, string workOrder, string equipmentID, string apiStatus, string employeeName)
        {
            string badName = string.Empty;

            // 1、如果返回FAIL,判断该工序是否可以传FAIL,如果可以则顺带返回不良名称
            if (apiStatus == "FAIL")
            {
                bool bRetBad = GetBadName(_session, _transData, out badName, equipmentID, employeeName);
                if (!bRetBad)
                {
                    return(bRetBad);
                }
            }

            //1、 必须先插过站记录 ---------------------------------
            DM_API.DM_SFCInterface Dm_Interface = new DM_API.DM_SFCInterface();
            string    actionParam = $"{_transData.SN},{workOrder},{equipmentID},{apiStatus}, 2";
            DataTable dtR;
            bool      bRet = GlobalData.RunTaskWithTimeoutDT <DataTable>(delegate { return(Dm_Interface.SFC_DM_CheckRouteVV4(_transData.SN, workOrder, equipmentID, apiStatus, "2")); }, out dtR, GlobalData.ApiTimeout, _session, _transData, actionParam, employeeName);

            if (!bRet)
            {
                return(bRet);
            }

            //2、是否测试失败记录不良(ps:打螺丝失败等)
            if (apiStatus == "FAIL")
            {
                bool bRetBad = BadRecord(_session, _transData, badName, equipmentID, apiStatus, employeeName);
                if (!bRetBad)
                {
                    return(bRetBad);
                }
            }

            // 2020年1月7日15:43:49 --> 因为 SAP 报工耗时巨大,暂时托里出来,单独放进队列执行
            //3、判断是否执行报工(如果记录了不良则无需进行第二次报工,因为记录不良时已经进行第一次报工了)
            //if (apiStatus != "FAIL")
            //    WorkingEfficiency(_session, _transData, equipmentID, employeeName, "103OUT");

            //4、执行生产扣料【2019年11月19日13:59:40 >> 当前没有上料,所以扣料一定失败,暂时取消该API的执行。 】
            //ReduceComponent(_session, _transData, equipmentID, employeeName, false);

            return(true);
        }
예제 #17
0
        /// <summary>
        /// 获取不良名称
        /// </summary>
        /// <param name="_session"></param>
        /// <param name="_transData"></param>
        /// <param name="equipmentID"></param>
        /// <returns></returns>
        private static bool GetBadName(MesSession _session, TransData _transData, out string badName, string equipmentID, string employeeName)
        {
            badName = string.Empty;
            DM_API.DM_SFCInterface Dm_Interface = new DM_API.DM_SFCInterface();
            string mEmployeeName = $"{employeeName}-记录不良之获取不良名称";

            //获取缺陷名称
            DataTable dtR;
            bool      bRet = GlobalData.RunTaskWithTimeoutDT <DataTable>(delegate { return(Dm_Interface.SFC_DM_ProcessQuery(equipmentID)); }, out dtR, GlobalData.ApiTimeout, _session, _transData, equipmentID, mEmployeeName);

            if (!bRet)
            {
                return(false);
            }

            badName = DataTableHelper.GetCellValueinDT(dtR, 0, "ReturnMsg");
            return(true);
        }
예제 #18
0
        /// <summary>
        /// 校验接收数据是否正确
        /// </summary>
        /// <param name="session"></param>
        /// <param name="requestInfo"></param>
        /// <param name="recvTransData"></param>
        /// <returns></returns>
        public static TransmitData CheckRecvData(MesSession session, StringRequestInfo requestInfo, TransmitData recvTransData)
        {
            try
            {
                if (requestInfo.Parameters.Count() == 1)
                {
                    recvTransData = JsonHelper.DeserializeJsonToObject <TransmitData>(requestInfo.Body);
                }
                else
                {
                    session.Logger.Error(GlobalData.ProtocolFormalError);
                    return(null);
                }
            }
            catch (Exception e)
            {
                session.Logger.Error("json 序列化错误:" + e.Message + ",json字符串:" + requestInfo.Body);
                return(null);
            }

            return(recvTransData);
        }
예제 #19
0
        /// <summary>
        /// 校验WorkOrder并返回(配置文件获取)
        /// </summary>
        /// <param name="_session"></param>
        /// <param name="_transData"></param>
        /// <param name="workOrder"></param>
        /// <param name="caller"></param>
        /// <returns></returns>
        public static bool CheckWorkOrder(MesSession _session, TransData _transData, out string workOrder, string caller, DataFrom getFrom)
        {
            workOrder = string.Empty;
            caller   += "-获取工单编码";

            META_ParameterInfo info = BLLFactory <META_Parameter> .Instance.FindSingle($"Key='WorkOrder'");

            if (info == null && string.IsNullOrEmpty(info.Value))
            {
                LogInfo log = new SocketService.LogInfo(_session, LogLevel.Error, $"[{_transData.SN}]执行【{caller}】接口失败>> 参数错误,请检查SQLLite中是否配置WorkOrder参数。");
                EmployeeComm.SendMsg(_session, _transData, CheckResult.NG);
                return(false);
            }

            switch (getFrom)
            {
            case DataFrom.SQLite:
                workOrder = info.Value;
                break;

            case DataFrom.SQLServer:
                DataTable dtR;
                DM_API.DM_SFCInterface Dm_Interface = new DM_API.DM_SFCInterface();
                bool bRet = GlobalData.RunTaskWithTimeoutDT <DataTable>(delegate { return(DBHelper.GetWorkOrderRemain()); }, out dtR, GlobalData.ApiTimeout, _session, _transData, "空", caller);
                if (!bRet)
                {
                    return(false);
                }

                workOrder  = DataTableHelper.GetCellValueinDT(dtR, 0, "ReturnMsg");
                info.Value = workOrder;
                BLLFactory <META_Parameter> .Instance.Update(info, info.ID);

                LogInfo log = new SocketService.LogInfo(_session, LogLevel.Info, $"[{_transData.SN}]执行【{caller}】接口成功,数据缓存本地成功,当前工单号:{workOrder}。");

                break;
            }
            return(true);
        }
예제 #20
0
        public static T RunTaskWithTimeout <T>(Func <T> TaskAction, int TimeoutMillisecond, MesSession _session, TransData _transData, string actionParam, string caller, bool toPlc = true)
        {
            LogInfo  log;
            Task <T> backgroundTask;

            try
            {
                backgroundTask = Task.Factory.StartNew(TaskAction);
                backgroundTask.Wait(new TimeSpan(0, 0, 0, 0, TimeoutMillisecond));
            }
            catch (AggregateException ex)
            {
                // task failed
                var failMessage = ex.Flatten().InnerException.Message;
                log = new SocketService.LogInfo(_session, LogLevel.Error, $"[{_transData.SN}]执行【{caller}】接口超时(>{GlobalData.ApiTimeout}ms),原因:{failMessage},执行参数:{actionParam}.");
                _transData.ProcessData = $"Mission Timeout({TimeoutMillisecond}ms) , Please check the database connection";
                if (toPlc)
                {
                    EmployeeComm.SendMsg(_session, _transData, CheckResult.NG);
                }

                return(default(T));
            }
            catch (Exception ex)
            {
                // task failed
                var failMessage = ex.Message;
                log = new SocketService.LogInfo(_session, LogLevel.Error, $"[{_transData.SN}]执行【{caller}】接口超时(>{GlobalData.ApiTimeout}ms),原因:{failMessage},执行参数:{actionParam}.");
                _transData.ProcessData = $"Mission Timeout({TimeoutMillisecond}ms) , Please check the database connection";
                if (toPlc)
                {
                    EmployeeComm.SendMsg(_session, _transData, CheckResult.NG);
                }
                return(default(T));
            }

            if (!backgroundTask.IsCompleted)
            {
                // task timed out
                log = new SocketService.LogInfo(_session, LogLevel.Error, $"[{_transData.SN}]执行【{caller}】接口超时(>{GlobalData.ApiTimeout}ms),请检查网络状况或数据库连接配置文件是否正确,执行参数:{actionParam}.");
                _transData.ProcessData = $"Mission Timeout({TimeoutMillisecond}ms) , Please check the database connection,Check SQLServer Connection. ";
                if (toPlc)
                {
                    EmployeeComm.SendMsg(_session, _transData, CheckResult.NG);
                }
                return(default(T));
            }

            // task succeeded
            log = new LogInfo(_session, LogLevel.Info, $"[{_transData.SN}]执行【{caller}】接口成功>> 执行参数:{actionParam}。");
            return(backgroundTask.Result);
        }
예제 #21
0
        public static bool RunTaskWithTimeoutDT <DataTableT>(Func <DataTable> TaskAction, out DataTable dtR, int TimeoutMillisecond, MesSession _session, TransData _transData, string actionParam, string caller, bool toPlc = true)
        {
            LogInfo          log;
            Task <DataTable> backgroundTask;

            dtR = null;
            try
            {
                backgroundTask = Task.Factory.StartNew(TaskAction);
                backgroundTask.Wait(new TimeSpan(0, 0, 0, 0, TimeoutMillisecond));
            }
            catch (AggregateException ex)
            {
                var failMessage = ex.Flatten().InnerException.Message;
                log = new SocketService.LogInfo(_session, LogLevel.Error, $"[{_transData.SN}]执行【{caller}】接口超时(>{TimeoutMillisecond}ms),原因:{failMessage},执行参数:{actionParam}.");
                _transData.ProcessData = $"Mission Timeout({TimeoutMillisecond}ms) , Please check the database connection";
                if (toPlc)
                {
                    EmployeeComm.SendMsg(_session, _transData, CheckResult.NG);
                }
                return(false);
            }
            catch (Exception ex)
            {
                var failMessage = ex.Message;
                log = new SocketService.LogInfo(_session, LogLevel.Error, $"[{_transData.SN}]执行【{caller}】接口超时(>{TimeoutMillisecond}ms),原因:{failMessage},执行参数:{actionParam}.");
                _transData.ProcessData = $"Mission Timeout({TimeoutMillisecond}ms) , Please check the database connection";
                if (toPlc)
                {
                    EmployeeComm.SendMsg(_session, _transData, CheckResult.NG);
                }
                return(false);
            }

            if (!backgroundTask.IsCompleted)
            {
                log = new SocketService.LogInfo(_session, LogLevel.Error, $"[{_transData.SN}]执行【{caller}】接口超时(>{TimeoutMillisecond}ms),请检查网络状况或数据库连接配置文件是否正确,执行参数:{actionParam}.");
                _transData.ProcessData = $"Mission Timeout({TimeoutMillisecond}ms) , Please check the database connection";
                if (toPlc)
                {
                    EmployeeComm.SendMsg(_session, _transData, CheckResult.NG);
                }
                return(false);
            }

            // task succeeded
            dtR = backgroundTask.Result;
            // 判断API是否执行成功 ---------------------------------
            //string checkStatusR = DataTableHelper.GetCellValueinDT(dtR, 0, "CheckStatus");
            //string checkMsgR = DataTableHelper.GetCellValueinDT(dtR, 0, "ReturnMsg");
            string checkStatusR = DataTableHelper.GetCellValueinDT(dtR, 0, 0);
            string checkMsgR    = DataTableHelper.GetCellValueinDT(dtR, 0, 1);

            if (checkStatusR == "-1")
            {
                log = new LogInfo(_session, LogLevel.Error, $"[{_transData.SN}]执行【{caller}】接口失败>> 接口返回({checkStatusR}---{checkMsgR}),执行参数:{actionParam}。");
                _transData.ProcessData = $"Error:{checkMsgR}";
                if (toPlc)
                {
                    EmployeeComm.SendMsg(_session, _transData, CheckResult.NG);
                }
                return(false);
            }

            log = new LogInfo(_session, LogLevel.Info, $"[{_transData.SN}]执行【{caller}】接口成功>> 执行参数:{actionParam}。");
            return(true);
        }
예제 #22
0
 void SessionClosed(MesSession session, global::SuperSocket.SocketBase.CloseReason value)
 {
     sessionClosedQueueServer.EnqueueItem(session);
 }