Esempio n. 1
0
        public string Parse(List <byte> Data)
        {
            if (Data.Count < 904)
            {
                LogService.Log("非法数据包:" + MachineControlProtocol.BytelistToHexString(Data), LogType.Debug);
                return(null);
            }

            RunService             RunSer             = new RunService();
            RGTPOSManager          RGTPOSMgr          = new RGTPOSManager();
            TroubleLogService      TroubleLogSer      = new TroubleLogService();
            RealTimeCUVDataService RealTimeCUVDataSer = new RealTimeCUVDataService();

            int Pt1stWn  = 0;
            int Pt3ndWn  = 0;
            int Pt26thWn = 0;

            int BlkCUVNO = MachineControlProtocol.HexConverToDec(Data[904], Data[905], Data[906]);
            int BlkWN    = MachineControlProtocol.HexConverToDec(Data[2], Data[3], Data[4]);

            RealTimeCUVDataSer.SaveCuvNumber(BlkWN, BlkCUVNO);

            for (int i = 2; i < 886; i = i + 17)
            {
                int   WN  = MachineControlProtocol.HexConverToDec(Data[i], Data[i + 1], Data[i + 2]);
                int   PT  = MachineControlProtocol.HexConverToDec(Data[i + 3], Data[i + 4]);
                float PWL = MachineControlProtocol.HexConverToFloat(Data[i + 5], Data[i + 6], Data[i + 7], Data[i + 8], Data[i + 9], Data[i + 10]);
                float SWL = MachineControlProtocol.HexConverToFloat(Data[i + 11], Data[i + 12], Data[i + 13], Data[i + 14], Data[i + 15], Data[i + 16]);

                if (PWL > -0.000001 && PWL < 0.000001)
                {
                    PWL = 3.5f;
                }
                else
                {
                    PWL = (float)Math.Log10(10 / PWL) * MachineInfo.LightSpan;
                }
                if (SWL > -0.000001 && SWL < 0.000001)
                {
                    SWL = 3.5f;
                }
                else
                {
                    SWL = (float)Math.Log10(10 / SWL) * MachineInfo.LightSpan;
                }

                if (WN != 0 && PT != 0)
                {
                    RealTimeCUVDataService.SaveABS(WN, PT, PWL, SWL);
                }
                if (PT == 1)
                {
                    Pt1stWn = WN;
                }
                if (PT == 3)
                {
                    Pt3ndWn = WN;
                }
                if (PT == 26)
                {
                    Pt26thWn = WN;
                }

                //Console.WriteLine(string.Format("WN:{0}PT:{1}PWL:{2}SWL:{3}", WN, PT, PWL, SWL));
            }
            //温度
            float tcv = MachineControlProtocol.HexConverToFloat(Data[887], Data[888], Data[889], Data[890]);

            RunSer.UpdateLatestCUVPanelTemperature(tcv * 10);
            float tr1 = MachineControlProtocol.HexConverToFloat(Data[891], Data[892], Data[893], Data[894]);

            RunSer.UpdateLatestR1PanelTemperature(tr1 * 10);
            LogService.Log(string.Format("反应盘温度:{0};试剂盘温度 :{1}", tcv * 10, tr1 * 10), LogType.Debug);
            //试剂余量
            int R1P = MachineControlProtocol.HexConverToDec(Data[896], Data[897]);
            int R1V = MachineControlProtocol.HexConverToDec(Data[898], Data[899]);

            RGTPOSMgr.UpdateLatestRgtVol(1, R1P, R1V);
            RgtWarning(1, R1P);
            int R2P = MachineControlProtocol.HexConverToDec(Data[900], Data[901]);
            int R2V = MachineControlProtocol.HexConverToDec(Data[902], Data[903]);

            RGTPOSMgr.UpdateLatestRgtVol(1, R2P, R2V);
            RgtWarning(1, R2P);
            LogService.Log(string.Format("R1位置:{0} R1体积:{1} R2位置:{2} R2体积:{3}", R1P, R1V, R2P, R2V), LogType.Debug);
            //查找错误报头
            int erindex = 0;

            for (int i = 0; i < Data.Count(); i++)
            {
                if (Data[i] == 0x1C)
                {
                    erindex = i;
                    break;
                }
            }
            //错误信息
            if (Data[erindex] == 0x1C)
            {
                LogService.Log(MachineControlProtocol.BytelistToHexString(Data), LogType.Debug);

                int errcount = Data[erindex + 2] - 0x30;
                //Console.WriteLine(string.Format("there is {0} errors!", errcount));
                for (int i = 0; i < errcount; i++)
                {
                    int index = (erindex + 3) + i * 7;

                    string cmdname = string.Format("{0}{1}", (char)Data[index], (char)Data[index + 1]);
                    if (cmdname == "77" && Data[index + 2] == 0x30)//R1
                    {
                        RealTimeCUVDataService.RunningErrors(Pt1stWn, "R1");

                        Result r = new RealTimeCUVDataService().GetResultFromRealTimeWorkNum(Pt1stWn);
                        if (r != null)
                        {
                            TroubleLog trouble = new TroubleLog();
                            trouble.TroubleCode = @"0000770";
                            trouble.TroubleType = TROUBLETYPE.ERR;
                            trouble.TroubleUnit = @"设备";
                            trouble.TroubleInfo = string.Format("样本{0}项目{1}反应进程{2}:添加试剂1失败. ", r.SMPNO, r.ItemName, r.TCNO);
                            TroubleLogSer.Save(trouble);
                        }
                    }
                    if (cmdname == "77" && Data[index + 2] == 0x31)//R2
                    {
                        RealTimeCUVDataService.RunningErrors(Pt26thWn, "R2");

                        Result r = new RealTimeCUVDataService().GetResultFromRealTimeWorkNum(Pt26thWn);
                        if (r != null)
                        {
                            TroubleLog trouble = new TroubleLog();
                            trouble.TroubleCode = @"0000771";
                            trouble.TroubleType = TROUBLETYPE.ERR;
                            trouble.TroubleUnit = @"设备";
                            trouble.TroubleInfo = string.Format("样本{0}项目{1}反应进程{2}:添加试剂2失败. ", r.SMPNO, r.ItemName, r.TCNO);
                            TroubleLogSer.Save(trouble);
                        }
                    }
                    if (cmdname == "57" && Data[index + 2] == 0x30)//SMP
                    {
                        RealTimeCUVDataService.RunningErrors(Pt3ndWn, "SMP");

                        Result r = new RealTimeCUVDataService().GetResultFromRealTimeWorkNum(Pt3ndWn);
                        if (r != null)
                        {
                            TroubleLog trouble = new TroubleLog();
                            trouble.TroubleCode = @"0000570";
                            trouble.TroubleType = TROUBLETYPE.ERR;
                            trouble.TroubleUnit = @"设备";
                            trouble.TroubleInfo = string.Format("样本{0}项目{1}反应进程{2}:添加样本失败. ", r.SMPNO, r.ItemName, r.TCNO);
                            TroubleLogSer.Save(trouble);
                        }
                    }


                    TroubleLog t = new TroubleLog();
                    t.TroubleCode = string.Format("{0}{1}{2}{3}{4}{5}{6}", (char)Data[index], (char)Data[index + 1], (char)Data[index + 2], (char)Data[index + 3], (char)Data[index + 4], (char)Data[index + 5], (char)Data[index + 6]);
                    t.TroubleType = TROUBLETYPE.ERR;
                    t.TroubleUnit = @"设备";
                    t.TroubleInfo = null;
                    TroubleLogSer.Save(t);

                    LogService.Log("测试运行设备发生错误:" + t.TroubleCode, LogType.Debug);
                }
            }
            return(null);
        }
Esempio n. 2
0
        void RgtWarning(int d, int p)
        {
            RGTPOSManager       RGTPOSMgr       = new RGTPOSManager();
            AssayRunParaService AssayRunParaSer = new AssayRunParaService();
            RunService          RunSer          = new RunService();
            TroubleLogService   TroubleLogSer   = new TroubleLogService();

            int rgtwarncount  = RunSer.GetRgtWarnCount();
            int rgtleastcount = RunSer.GetRgtLeastCount();

            RGTPosition rgp = RGTPOSMgr.Get(1, p.ToString());

            if (rgp != null)
            {
                AssayRunPara arp = AssayRunParaSer.Get(rgp.Assay) as AssayRunPara;
                int          c   = 0;
                int          v   = rgp.CType.Volume * rgp.ValidPercent / 100 * 1000;
                switch (rgp.AssayPara)
                {
                case "R1":
                    c = arp.R1Vol == 0 ? 0 : v / arp.R1Vol;
                    if (c < rgtleastcount)
                    {
                        if (RunSer.IsMutiRgtEnable() == true)    //多试剂位开关标志
                        {
                            RGTPosition mrgt = RGTPOSMgr.GetEnableMutiRgtPosition(rgp);
                            if (mrgt != null)
                            {
                                RGTPOSMgr.BetweenMutiRgtPositionAndRgtPositionChange(mrgt, rgp);

                                TroubleLog trouble = new TroubleLog();
                                trouble.TroubleCode = @"0000773";
                                trouble.TroubleType = TROUBLETYPE.WARN;
                                trouble.TroubleUnit = @"试剂";
                                trouble.TroubleInfo = string.Format("试剂位{0}项目{1}试剂1由于余量不足开始启用其多试剂位{2}. ", p, rgp.Assay, mrgt.Position);
                                TroubleLogSer.Save(trouble);
                            }
                            else
                            {
                                if (RunSer.IsLockRgtEnable() == true)
                                {
                                    rgp.IsLocked = true;
                                    RGTPOSMgr.UpdateLockState(rgp);

                                    TroubleLog trouble = new TroubleLog();
                                    trouble.TroubleCode = @"0000773";
                                    trouble.TroubleType = TROUBLETYPE.WARN;
                                    trouble.TroubleUnit = @"试剂";
                                    trouble.TroubleInfo = string.Format("试剂位{0}项目{1}试剂1由于余量不足将锁定其对应的工作表. ", p, rgp.Assay);
                                    TroubleLogSer.Save(trouble);
                                }
                                else
                                {
                                    TroubleLog trouble = new TroubleLog();
                                    trouble.TroubleCode = @"0000773";
                                    trouble.TroubleType = TROUBLETYPE.ERR;
                                    trouble.TroubleUnit = @"试剂";
                                    trouble.TroubleInfo = string.Format("试剂位{0}项目{1}试剂1由于余量不足. ", p, rgp.Assay);
                                    TroubleLogSer.Save(trouble);
                                }
                            }
                        }
                        else
                        {
                            if (RunSer.IsLockRgtEnable() == true)
                            {
                                rgp.IsLocked = true;
                                RGTPOSMgr.UpdateLockState(rgp);

                                TroubleLog trouble = new TroubleLog();
                                trouble.TroubleCode = @"0000773";
                                trouble.TroubleType = TROUBLETYPE.WARN;
                                trouble.TroubleUnit = @"试剂";
                                trouble.TroubleInfo = string.Format("试剂位{0}项目{1}试剂1由于余量不足将锁定其对应的工作表. ", p, rgp.Assay);
                                TroubleLogSer.Save(trouble);
                            }
                            else
                            {
                                TroubleLog trouble = new TroubleLog();
                                trouble.TroubleCode = @"0000773";
                                trouble.TroubleType = TROUBLETYPE.ERR;
                                trouble.TroubleUnit = @"试剂";
                                trouble.TroubleInfo = string.Format("试剂位{0}项目{1}试剂1由于余量不足. ", p, rgp.Assay);
                                TroubleLogSer.Save(trouble);
                            }
                        }
                    }

                    if (c < rgtwarncount && c > rgtleastcount)
                    {
                        TroubleLog trouble = new TroubleLog();
                        trouble.TroubleCode = @"0000773";
                        trouble.TroubleType = TROUBLETYPE.WARN;
                        trouble.TroubleUnit = @"设备";
                        trouble.TroubleInfo = string.Format("试剂位{0}项目{1}:试剂1余量即将耗尽. ", p, rgp.Assay);
                        TroubleLogSer.Save(trouble);
                        return;
                    }
                    break;

                case "R2":
                    c = arp.R2Vol == 0 ? 0 : v / arp.R2Vol;
                    if (c < rgtleastcount)
                    {
                        if (RunSer.IsMutiRgtEnable() == true)    //多试剂位开关标志
                        {
                            RGTPosition mrgt = RGTPOSMgr.GetEnableMutiRgtPosition(rgp);
                            if (mrgt != null)
                            {
                                RGTPOSMgr.BetweenMutiRgtPositionAndRgtPositionChange(mrgt, rgp);

                                TroubleLog trouble = new TroubleLog();
                                trouble.TroubleCode = @"0000773";
                                trouble.TroubleType = TROUBLETYPE.WARN;
                                trouble.TroubleUnit = @"试剂";
                                trouble.TroubleInfo = string.Format("试剂位{0}项目{1}试剂2由于余量不足开始启用其多试剂位{2}. ", p, rgp.Assay, mrgt.Position);
                                TroubleLogSer.Save(trouble);
                            }
                            else
                            {
                                if (RunSer.IsLockRgtEnable() == true)
                                {
                                    rgp.IsLocked = true;
                                    RGTPOSMgr.UpdateLockState(rgp);

                                    TroubleLog trouble = new TroubleLog();
                                    trouble.TroubleCode = @"0000773";
                                    trouble.TroubleType = TROUBLETYPE.WARN;
                                    trouble.TroubleUnit = @"试剂";
                                    trouble.TroubleInfo = string.Format("试剂位{0}项目{1}试剂2由于余量不足将锁定其对应的工作表. ", p, rgp.Assay);
                                    TroubleLogSer.Save(trouble);
                                }
                                else
                                {
                                    TroubleLog trouble = new TroubleLog();
                                    trouble.TroubleCode = @"0000773";
                                    trouble.TroubleType = TROUBLETYPE.ERR;
                                    trouble.TroubleUnit = @"试剂";
                                    trouble.TroubleInfo = string.Format("试剂位{0}项目{1}试剂2余量不足. ", p, rgp.Assay);
                                    TroubleLogSer.Save(trouble);
                                }
                            }
                        }
                        else
                        {
                            if (RunSer.IsLockRgtEnable() == true)
                            {
                                rgp.IsLocked = true;
                                RGTPOSMgr.UpdateLockState(rgp);

                                TroubleLog trouble = new TroubleLog();
                                trouble.TroubleCode = @"0000773";
                                trouble.TroubleType = TROUBLETYPE.WARN;
                                trouble.TroubleUnit = @"试剂";
                                trouble.TroubleInfo = string.Format("试剂位{0}项目{1}试剂2余量不足将锁定其对应的工作表. ", p, rgp.Assay);
                                TroubleLogSer.Save(trouble);
                            }
                            else
                            {
                                TroubleLog trouble = new TroubleLog();
                                trouble.TroubleCode = @"0000773";
                                trouble.TroubleType = TROUBLETYPE.ERR;
                                trouble.TroubleUnit = @"试剂";
                                trouble.TroubleInfo = string.Format("试剂位{0}项目{1}试剂2余量不足. ", p, rgp.Assay);
                                TroubleLogSer.Save(trouble);
                            }
                        }
                    }
                    if (c < rgtwarncount && c > rgtleastcount)
                    {
                        TroubleLog trouble = new TroubleLog();
                        trouble.TroubleCode = @"0000775";
                        trouble.TroubleType = TROUBLETYPE.WARN;
                        trouble.TroubleUnit = @"设备";
                        trouble.TroubleInfo = string.Format("试剂位{0}项目{1}:试剂2余量即将耗尽. ", p, rgp.Assay);
                        TroubleLogSer.Save(trouble);
                        return;
                    }
                    break;
                }
            }
        }
Esempio n. 3
0
        public string Parse(List <byte> Data)
        {
            if (Data.Count < 904)
            {
                LogService.Log("非法数据包:" + MachineControlProtocol.BytelistToHexString(Data), LogType.Debug);
                return(null);
            }

            RunService        RunSer        = new RunService();
            RGTPOSManager     RGTPOSMgr     = new RGTPOSManager();
            TroubleLogService TroubleLogSer = new TroubleLogService();

            int Pt1stWn  = 0;
            int Pt3ndWn  = 0;
            int Pt14thWn = 0;

            int BlkCUVNO = MachineControlProtocol.HexConverToDec(Data[904], Data[905], Data[906]);
            int BlkWN    = MachineControlProtocol.HexConverToDec(Data[2], Data[3], Data[4]);

            for (int i = 2; i < 886; i = i + 17)
            {
                int WN = MachineControlProtocol.HexConverToDec(Data[i], Data[i + 1], Data[i + 2]);
                int PT = MachineControlProtocol.HexConverToDec(Data[i + 3], Data[i + 4]);


                if (PT == 1)
                {
                    Pt1stWn = WN;
                }
                if (PT == 3)
                {
                    Pt3ndWn = WN;
                }
                if (PT == 14)
                {
                    Pt14thWn = WN;
                }
            }
            //温度
            float tcv = MachineControlProtocol.HexConverToFloat(Data[887], Data[888], Data[889], Data[890]);

            RunSer.UpdateLatestCUVPanelTemperature(tcv * 10);
            float tr1 = MachineControlProtocol.HexConverToFloat(Data[891], Data[892], Data[893], Data[894]);

            RunSer.UpdateLatestR1PanelTemperature(tr1 * 10);
            LogService.Log(string.Format("反应盘温度:{0};试剂盘温度 :{1}", tcv * 10, tr1 * 10), LogType.Debug);
            //试剂余量
            int R1P = MachineControlProtocol.HexConverToDec(Data[896], Data[897]);
            int R1V = MachineControlProtocol.HexConverToDec(Data[898], Data[899]);

            RGTPOSMgr.UpdateLatestRgtVol(1, R1P, R1V);
            RgtWarning(1, R1P);
            int R2P = MachineControlProtocol.HexConverToDec(Data[900], Data[901]);
            int R2V = MachineControlProtocol.HexConverToDec(Data[902], Data[903]);

            RGTPOSMgr.UpdateLatestRgtVol(1, R2P, R2V);
            RgtWarning(1, R2P);
            LogService.Log(string.Format("R1位置:{0} R1体积:{1} R2位置:{2} R2体积:{3}", R1P, R1V, R2P, R2V), LogType.Debug);
            //查找错误报头
            int erindex = 0;

            for (int i = 0; i < Data.Count(); i++)
            {
                if (Data[i] == 0x1C)
                {
                    erindex = i;
                    break;
                }
            }
            //错误信息
            if (Data[erindex] == 0x1C)
            {
                LogService.Log(MachineControlProtocol.BytelistToHexString(Data), LogType.Debug);

                int errcount = Data[erindex + 2] - 0x30;
                //Console.WriteLine(string.Format("there is {0} errors!", errcount));
                for (int i = 0; i < errcount; i++)
                {
                    int index = (erindex + 3) + i * 7;

                    string cmdname = string.Format("{0}{1}", (char)Data[index], (char)Data[index + 1]);
                    if (cmdname == "77" && Data[index + 2] == 0x30)//R1
                    {
                        TroubleLog trouble = new TroubleLog();
                        trouble.TroubleCode = @"0000770";
                        trouble.TroubleType = TROUBLETYPE.ERR;
                        trouble.TroubleUnit = @"设备";
                        trouble.TroubleInfo = string.Format("试剂位清洗液添加失败. ");
                        TroubleLogSer.Save(trouble);
                    }
                    if (cmdname == "77" && Data[index + 2] == 0x31)//R2
                    {
                        TroubleLog trouble = new TroubleLog();
                        trouble.TroubleCode = @"0000771";
                        trouble.TroubleType = TROUBLETYPE.ERR;
                        trouble.TroubleUnit = @"设备";
                        trouble.TroubleInfo = string.Format("试剂位清洗液添加失败. ");
                        TroubleLogSer.Save(trouble);
                    }
                    if (cmdname == "57" && Data[index + 2] == 0x30)//SMP
                    {
                        TroubleLog trouble = new TroubleLog();
                        trouble.TroubleCode = @"0000570";
                        trouble.TroubleType = TROUBLETYPE.ERR;
                        trouble.TroubleUnit = @"设备";
                        trouble.TroubleInfo = string.Format("样本位清洗液添加失败. ");
                        TroubleLogSer.Save(trouble);
                    }


                    TroubleLog t = new TroubleLog();
                    t.TroubleCode = string.Format("{0}{1}{2}{3}{4}{5}{6}", (char)Data[index], (char)Data[index + 1], (char)Data[index + 2], (char)Data[index + 3], (char)Data[index + 4], (char)Data[index + 5], (char)Data[index + 6]);
                    t.TroubleType = TROUBLETYPE.ERR;
                    t.TroubleUnit = @"设备";
                    t.TroubleInfo = null;
                    TroubleLogSer.Save(t);

                    LogService.Log("测试运行设备发生错误:" + t.TroubleCode, LogType.Debug);
                }
            }
            return(null);
        }
Esempio n. 4
0
        void RgtWarning(int d, int p)
        {
            RGTPOSManager     RGTPOSMgr     = new RGTPOSManager();
            RunService        RunSer        = new RunService();
            TroubleLogService TroubleLogSer = new TroubleLogService();

            int rgtwarncount  = RunSer.GetRgtWarnCount();
            int rgtleastcount = RunSer.GetRgtLeastCount();

            RGTPosition rgp = RGTPOSMgr.Get(1, p.ToString());

            if (rgp != null)
            {
                int c = 0;
                int v = rgp.CType.Volume * rgp.ValidPercent / 100 * 1000;
                switch (rgp.AssayPara)
                {
                case "R1":
                    c = v / 250;
                    if (c < rgtleastcount)
                    {
                        TroubleLog trouble = new TroubleLog();
                        trouble.TroubleCode = @"0000772";
                        trouble.TroubleType = TROUBLETYPE.ERR;
                        trouble.TroubleUnit = @"设备";
                        trouble.TroubleInfo = string.Format("试剂位{0}清洗剂耗尽. ", p);
                        TroubleLogSer.Save(trouble);

                        return;
                    }
                    if (c < rgtwarncount)
                    {
                        TroubleLog trouble = new TroubleLog();
                        trouble.TroubleCode = @"0000773";
                        trouble.TroubleType = TROUBLETYPE.WARN;
                        trouble.TroubleUnit = @"设备";
                        trouble.TroubleInfo = string.Format("试剂位{0}清洗剂即将耗尽. ", p);
                        TroubleLogSer.Save(trouble);
                        return;
                    }
                    break;

                case "R2":
                    c = v / 150;
                    if (c < rgtleastcount)
                    {
                        TroubleLog trouble = new TroubleLog();
                        trouble.TroubleCode = @"0000774";
                        trouble.TroubleType = TROUBLETYPE.ERR;
                        trouble.TroubleUnit = @"设备";
                        trouble.TroubleInfo = string.Format("试剂位{0}清洗剂耗尽. ", p);
                        TroubleLogSer.Save(trouble);

                        return;
                    }
                    if (c < rgtwarncount)
                    {
                        TroubleLog trouble = new TroubleLog();
                        trouble.TroubleCode = @"0000775";
                        trouble.TroubleType = TROUBLETYPE.WARN;
                        trouble.TroubleUnit = @"设备";
                        trouble.TroubleInfo = string.Format("试剂位{0}清洗剂即将耗尽. ", p);
                        TroubleLogSer.Save(trouble);
                        return;
                    }
                    break;
                }
            }
        }
Esempio n. 5
0
        public object Process(string barcode, int disk, string position)
        {
            string b = Decode(barcode);

            if (b == null)
            {
                string erinfo = "条码:" + barcode + "解码失败";

                TroubleLog t = new TroubleLog();
                t.TroubleCode = "7777771";
                t.TroubleType = TROUBLETYPE.ERR;
                t.TroubleUnit = @"试剂条码";
                t.TroubleInfo = erinfo;
                new TroubleLogService().Save(t);

                return("条码:" + barcode + "不识别");
            }

            this.Disk     = disk;
            this.Position = position;
            RGTPosition newreagentPosition = AnanlyeBarcode(b, barcode);

            if (newreagentPosition == null)
            {
                return("条码:" + barcode + "不识别");
            }

            AssayRunPara a = new AssayRunParaService().Get(newreagentPosition.Assay) as AssayRunPara;

            if (a != null)
            {
                if (a.R2Vol == 0 && newreagentPosition.AssayPara == "R2")
                {
                    string erinfo = "条码:" + barcode + "不能装填。原因:参数试剂2体积为0,不能在该位置装填试剂2";

                    TroubleLog t = new TroubleLog();
                    t.TroubleCode = "7777771";
                    t.TroubleType = TROUBLETYPE.ERR;
                    t.TroubleUnit = @"试剂条码";
                    t.TroubleInfo = erinfo;
                    new TroubleLogService().Save(t);

                    return("条码:" + barcode + "装填失败");
                }
            }
            //检查该条码在试剂盘中是否存在
            RGTPosition barrgtpos = new RGTPOSManager().GetAssayALLReagentByBarcode(newreagentPosition.BarCode);

            if (barrgtpos == null)
            {
                //newreagentPosition.AssayPara = "MR1";
            }
            else
            {
                ReagentBarcode r = new ReagentBarcode();
                r.Barcode          = barrgtpos.BarCode;
                r.ValidPercent     = barrgtpos.ValidPercent;
                r.ExchangeDatetime = DateTime.Now;
                new ReagentBarcodeService().InsertReagentBarcode(r);
                new RGTPOSManager().Delete(barrgtpos);

                //newreagentPosition.AssayPara = barrgtpos.AssayPara;
            }
            RGTPosition rgtpos = new RGTPOSManager().Get(disk, position);

            if (rgtpos == null)
            {
            }
            else
            {
                ReagentBarcode r = new ReagentBarcode();
                r.Barcode          = rgtpos.BarCode;
                r.ValidPercent     = rgtpos.ValidPercent;
                r.ExchangeDatetime = DateTime.Now;
                new ReagentBarcodeService().InsertReagentBarcode(r);
                new RGTPOSManager().Delete(rgtpos);
            }

            List <CLItem> reagents = new RGTPOSManager().GetAssayALLReagent(newreagentPosition.Assay);

            if (newreagentPosition.AssayPara == "R1")
            {
                bool f1 = false;
                foreach (RGTPosition e in reagents)
                {
                    if (e.AssayPara == "R1")
                    {
                        f1 = true;
                        break;
                    }
                }
                if (f1 == true)
                {
                    newreagentPosition.AssayPara = "MR1";
                }
                else
                {
                    newreagentPosition.AssayPara = "R1";
                }
            }
            if (newreagentPosition.AssayPara == "R2")
            {
                bool f1 = false;
                foreach (RGTPosition e in reagents)
                {
                    if (e.AssayPara == "R2")
                    {
                        f1 = true;
                        break;
                    }
                }
                if (f1 == true)
                {
                    newreagentPosition.AssayPara = "MR2";
                }
                else
                {
                    newreagentPosition.AssayPara = "R2";
                }
            }

            newreagentPosition.Disk     = disk;
            newreagentPosition.Position = position;

            RGTPosition oldreagentPosition = new RGTPOSManager().Get(disk, position);

            if (oldreagentPosition != null)
            {
                ReagentBarcode r = new ReagentBarcode();
                r.Barcode          = oldreagentPosition.BarCode;
                r.ValidPercent     = oldreagentPosition.ValidPercent;
                r.ExchangeDatetime = DateTime.Now;
                new ReagentBarcodeService().InsertReagentBarcode(r);
            }

            ReagentBarcode ReagentBarcode = new ReagentBarcodeService().GetLastestReagentBarcode(barcode);

            if (ReagentBarcode == null)
            {
                newreagentPosition.ValidPercent = 99;
            }
            else
            {
                newreagentPosition.ValidPercent = ReagentBarcode.ValidPercent;
            }

            new RGTPOSManager().Delete(newreagentPosition);
            new RGTPOSManager().Save(newreagentPosition);

            TroubleLog t1 = new TroubleLog();

            t1.TroubleCode = "7777772";
            t1.TroubleType = TROUBLETYPE.WARN;
            t1.TroubleUnit = @"试剂条码";
            t1.TroubleInfo = "条码:" + barcode + "加载成功";;
            new TroubleLogService().Save(t1);

            return(null);
        }
Esempio n. 6
0
        void DoSaveAssayRunPara(ReagentItem ReagentItem)
        {
            //加载测试参数
            AssayRunPara a = new AssayRunPara();

            a.Name     = ReagentItem.ItemName;
            a.FullName = ReagentItem.LongName;
            //分析方法
            a.AnalyzeMethod = ReagentItem.AnalyzeMethod;
            //第一测试点S
            a.FirstPointS = ReagentItem.FirstPointS;
            //第一测试点E
            a.FirstPointE = ReagentItem.FirstPointE;
            //第二测试点S
            a.SecondPointS = ReagentItem.SecondPointS;
            //第二测试点E
            a.SecondPointE = ReagentItem.SecondPointE;
            //主波长
            a.MainWaveLength = ReagentItem.MainWaveLength;
            //次波长
            a.SubWaveLength = ReagentItem.SubWaveLength;
            //测试次数
            a.DoCount = ReagentItem.DoCount;
            //质控间隔
            a.QCSpace = ReagentItem.QCSpace;
            //定标次数
            a.SDTCount = ReagentItem.SDTCount;
            //试剂1体积
            a.R1Vol = ReagentItem.R1Vol;
            //试剂2体积
            a.R2Vol = ReagentItem.R2Vol;
            //样本反应体积
            a.SerumIncreaseVol.VolPre = ReagentItem.IncreaseVol;
            a.SerumIncreaseVol.VolAft = 0;
            a.SerumIncreaseVol.VolDil = 0;
            a.SerumNormalVol.VolPre   = ReagentItem.NormalVol;
            a.SerumNormalVol.VolAft   = 0;
            a.SerumNormalVol.VolDil   = 0;
            a.SerumDecreaseVol.VolPre = ReagentItem.DecreaseVol;
            a.SerumDecreaseVol.VolAft = 0;
            a.SerumDecreaseVol.VolDil = 0;
            a.UrineIncreaseVol.VolPre = ReagentItem.IncreaseVol;
            a.UrineIncreaseVol.VolAft = 0;
            a.UrineIncreaseVol.VolDil = 0;
            a.UrineNormalVol.VolPre   = ReagentItem.NormalVol;
            a.UrineNormalVol.VolAft   = 0;
            a.UrineNormalVol.VolDil   = 0;
            a.UrineDecreaseVol.VolPre = ReagentItem.DecreaseVol;
            a.UrineDecreaseVol.VolAft = 0;
            a.UrineDecreaseVol.VolDil = 0;
            a.SDTVol.VolPre           = ReagentItem.SDTVol;
            a.SDTVol.VolAft           = 0;
            a.SDTVol.VolDil           = 0;
            //反应方向
            a.ReacteDirect = ReagentItem.ReacteDirect;
            //搅拌强度
            a.Stiring1Force = ReagentItem.Stiring1Force;
            a.Stiring2Force = ReagentItem.Stiring2Force;
            //显示顺序
            int m = new RGTPOSManager().GetReagentMode();

            AssayRunPara a1 = new AssayRunParaService().Get(ReagentItem.ItemName) as AssayRunPara;

            if (a1 != null && a1.DisplaySQ <= 0)
            {
                new AssayRunParaService().Delete(a1.DisplaySQ);
            }
            a1 = new AssayRunParaService().Get(ReagentItem.ItemName) as AssayRunPara;
            if (a1 == null)
            {
                for (int i = 1; i <= 120; i++)
                {
                    AssayRunPara e = new AssayRunParaService().Get(i) as AssayRunPara;
                    if (e == null)
                    {
                        if (m == 3)
                        {
                            List <int> itemnumbers = new RGTPOSManager().GetReagentNumbers();
                            bool       isflag      = false;
                            foreach (int ie in itemnumbers)
                            {
                                if (ie == i)
                                {
                                    isflag = true;
                                }
                            }

                            if (isflag == true)
                            {
                                continue;
                            }
                            else
                            {
                                a.DisplaySQ = i;
                                break;
                            }
                        }


                        if (m == 2)
                        {
                            a.DisplaySQ = i;
                            break;
                        }
                    }
                }
            }
            else
            {
                a.DisplaySQ = a1.DisplaySQ;
            }

            new AssayRunParaService().Delete(ReagentItem.ItemName);
            new AssayRunParaService().Delete(a.DisplaySQ);
            new AssayRunParaService().Save(a);
        }
Esempio n. 7
0
        public string Parse(List <byte> Data)
        {
            RunService        RunSer        = new RunService();
            RGTPOSManager     RGTPOSMgr     = new RGTPOSManager();
            TroubleLogService TroubleLogSer = new TroubleLogService();

            int Pt1stWn  = 0;
            int Pt2ndWn  = 0;
            int Pt12thWn = 0;

            for (int i = 2; i < 886; i = i + 17)
            {
                int   WN  = MachineControlProtocol.HexConverToDec(Data[i], Data[i + 1], Data[i + 2]);
                int   PT  = MachineControlProtocol.HexConverToDec(Data[i + 3], Data[i + 4]);
                float PWL = MachineControlProtocol.HexConverToFloat(Data[i + 5], Data[i + 6], Data[i + 7], Data[i + 8], Data[i + 9], Data[i + 10]);
                float SWL = MachineControlProtocol.HexConverToFloat(Data[i + 11], Data[i + 12], Data[i + 13], Data[i + 14], Data[i + 15], Data[i + 16]);

                if (PWL > -0.000001 && PWL < 0.000001)
                {
                    PWL = 6.8f;
                }
                else
                {
                    PWL = (float)Math.Log10(10 / PWL) * MachineInfo.LightSpan;
                }
                if (SWL > -0.000001 && SWL < 0.000001)
                {
                    SWL = 6.8f;
                }
                else
                {
                    SWL = (float)Math.Log10(10 / SWL) * MachineInfo.LightSpan;
                }

                //Console.WriteLine(string.Format("WN:{0}PT:{1}PWL:{2}SWL:{3}", WN, PT, PWL, SWL));
                if (WN != 0 && PT != 0)
                {
                    RealTimeCUVDataService.SaveABS(WN, PT, PWL, SWL);
                }

                if (PT == 2)
                {
                    Pt2ndWn = WN;
                }
                if (PT == 12)
                {
                    Pt12thWn = WN;
                }
            }
            //温度
            float tcv = MachineControlProtocol.HexConverToFloat(Data[887], Data[888], Data[889], Data[890]);

            RunSer.UpdateLatestCUVPanelTemperature(tcv);
            float tr1 = MachineControlProtocol.HexConverToFloat(Data[891], Data[892], Data[893], Data[894]);

            RunSer.UpdateLatestR1PanelTemperature(tr1);
            //Console.WriteLine(string.Format("the CUV-Panel temperature:{0};the R1-Panel temperature :{1}", tcv * 10, tr1 * 10));
            //试剂余量
            int R1P = MachineControlProtocol.HexConverToDec(Data[896], Data[897]);
            int R1V = MachineControlProtocol.HexConverToDec(Data[898], Data[899]);

            RGTPOSMgr.UpdateLatestRgtVol(1, R1P, R1V);
            int R2P = MachineControlProtocol.HexConverToDec(Data[900], Data[901]);
            int R2V = MachineControlProtocol.HexConverToDec(Data[902], Data[903]);

            RGTPOSMgr.UpdateLatestRgtVol(1, R2P, R2V);
            //Console.WriteLine(string.Format("R1P:{0} R1V:{1} R2P:{2} R2V:{3}", R1P, R1V, R2P, R2V));
            //错误信息
            if (Data[904] == 0x1C)
            {
                int errcount = Data[906] - 0x30;
                //Console.WriteLine(string.Format("there is {0} errors!", errcount));
                for (int i = 0; i < errcount; i++)
                {
                    int index = 907 + i * 7;
                    switch (Data[index] - 0x30)
                    {
                    case 0x02:
                        if (Pt2ndWn != 0)
                        {
                            RealTimeCUVDataService.RunningErrors(Pt2ndWn, "SMP");
                        }
                        break;    //SMP

                    case 0x03:
                        if (Pt1stWn != 0)
                        {
                            RealTimeCUVDataService.RunningErrors(Pt1stWn, "R1");
                        }
                        break;    //R1

                    case 0x04:
                        if (Pt12thWn != 0)
                        {
                            RealTimeCUVDataService.RunningErrors(Pt12thWn, "R2");
                        }
                        break;    //R2
                    }

                    TroubleLog trouble = new TroubleLog();
                    trouble.TroubleType = TROUBLETYPE.ERR;
                    trouble.TroubleUnit = MyResources.Instance.FindResource("TroubleUnit1").ToString();
                    trouble.TroubleCode = string.Format("{0}{1}{2}{3}", (char)Data[index + 1], (char)Data[index + 2], (char)Data[index + 3], (char)Data[index + 4]);
                    trouble.TroubleInfo = null;
                    TroubleLogSer.Save(trouble);
                }
            }
            return(null);
        }