예제 #1
0
 public void Append(BaseMessage msg,string rackName,string boardName)
 {
     try
     {
         lock (lockFile)
         {
             if (sw != null)
             {
                 sw.WriteLine("{0},{1:D2},{2},{3:D2},{4},0x{5:X2},{6}",
                     Util.FormateDateTime3(msg.DtTime),
                     msg.RackNo,
                     rackName,
                     msg.SlotNo,
                     boardName,
                     msg.Code,
                     errorDescription.GetDescription(msg.Code)
                     );
             }
         }
     }
     catch (Exception ee)
     {
         LogHelper.GetLogger<ErrorCodeMsgFile>().Error(ee.Message);
         LogHelper.GetLogger<ErrorCodeMsgFile>().Error(ee.StackTrace);
     }
 }
예제 #2
0
        //没有消息的时候,界面会周期性发送0xFF消息
        public void AppendLog(BaseMessage msg)
        {
            if (TestStatus == TestStatus.THRESHOLD)
            {
                //检查被测板卡的心跳是否都已经收到
                CheckPreTstHeart(msg);
            }

            //生成心跳超时
            if (TestStatus == TestStatus.RUNNING)
            {
                if (msg is IdleMsg)  //idle消息会每秒钟发出来
                {
                    List<Board> boards = GetTimeoutBoard(runTimeoutDic, runTimeout);
                    foreach (var b in boards)
                    {
                        Rack r = GetRack(b);
                        if (r != null)
                        {
                            HeartTimeoutMsg mymsg = HeartTimeoutMsg.CreateNewMsg(r.No, b.No);
                            if (msgQueue != null)
                                msgQueue.Push(mymsg);
                            //下一次再进行超时判断
                            runTimeoutDic[b] = DateTime.Now;
                        }
                    }
                }
                else //心跳消息、错误码消息都算是心跳,更新收到上次心跳的时间
                {
                    Board board = GetBoard(msg.RackNo, msg.SlotNo);
                    runTimeoutDic[board] = DateTime.Now;
                }
            }

            //只在测试过程中记录日志,并且不记录心跳数据
            if (TestStatus == TestStatus.RUNNING && errorCodeMsgFile != null && !IsHeartMsg(msg))
            {
                Board b = GetBoard(msg.RackNo, msg.SlotNo);
                if(b.IsPassed)
                {
                    b.IsPassed = false;
                    GenBoardStatusChangeEvent(b);
                }
                errorCodeMsgFile.Append(msg, GetRack(msg.RackNo).Name, GetBoard(msg.RackNo, msg.SlotNo).Name);
            }
        }
예제 #3
0
 //是否是心跳或者空闲消息
 private bool IsHeartMsg(BaseMessage msg)
 {
     return (msg is HeartMsg || msg is IdleMsg);
 }
예제 #4
0
        //检查是否所有的心跳都已经收到
        private void CheckPreTstHeart(BaseMessage msg)
        {
            if (!IsHeartMsg(msg))
                return;

            //更新心跳记录
            Board b = GetBoard(msg.RackNo, msg.SlotNo);
            if (preTimeoutDic.ContainsKey(b))
                preTimeoutDic[b] = true;
            //如果所有心跳都收到,开始正式测试
            bool isAllOk = true;
            foreach (var kv in preTimeoutDic)
            {
                isAllOk &= kv.Value;
            }
            if (isAllOk)
            {
                StartNomalTest();
                return;
            }
            //如果超时了,还有板卡没有收到消息,进入异常结束
            if (DateTime.Now.Ticks - preTestTime.Ticks > (uint)preTimeout * 10000000)
            {
                List<Board> boards = new List<Board>();
                foreach (var kv in preTimeoutDic)
                {
                    if (kv.Value == false)
                        boards.Add(kv.Key);
                }
                //执行异常结束工作
                FinishUnExpectedTest();
                GenTimeoutEvent(boards, TestStatus.THRESHOLD);
            }
        }