Exemple #1
0
        public string Parse(List <byte> data)
        {
            byte disk = data[2];

            for (int i = 3; i < data.Count - 3; i = i + 4)
            {
                int p = MachineControlProtocol.HexConverToDec(data[i], data[i + 1]);
                p = p > 90 ? (p - 90) : p;
                int v = MachineControlProtocol.HexConverToDec(data[i + 2], data[i + 3]);
                if (p != 0)
                {
                    switch (disk)
                    {
                    case 0x30: UpdateLatestRgtVol(1, p, v); break;

                    case 0x31: UpdateLatestRgtVol(2, p, v); break;
                    }
                }
            }
            for (int i = 0; i < data.Count; i++)
            {
                if (data[i] == 0x1C)
                {
                    TroubleLog trouble = new TroubleLog();
                    trouble.TroubleType = TROUBLETYPE.ERR;
                    trouble.TroubleUnit = "设备";
                    trouble.TroubleCode = string.Format("{0}{1}{2}{3}", (char)data[i + 1], (char)data[i + 2], (char)data[i + 3], (char)data[i + 4]);
                    trouble.TroubleInfo = null;
                    myBatis.TroubleLogSave("TroubleLogSave", trouble);
                }
            }
            return(null);
        }
Exemple #2
0
        public string Parse(List <byte> data)
        {
            int n = MachineControlProtocol.HexConverToDec(data[2], data[3], data[4]);

            TroubleLog trouble = new TroubleLog();

            trouble.TroubleType = TROUBLETYPE.ERR;
            trouble.TroubleUnit = "比色杯";
            trouble.TroubleCode = string.Format("CUV001");
            trouble.TroubleInfo = n + "号比色杯有污垢,测试无法在此号比色杯中进行";
            myBatis.TroubleLogSave("TroubleLogSave", trouble);

            return(n + "号比色杯有污垢");
        }
Exemple #3
0
        public string Parse(List <byte> data)
        {
            TroubleLogService TroubleLogSer = new TroubleLogService();

            int n = MachineControlProtocol.HexConverToDec(data[2], data[3]);

            TroubleLog trouble = new TroubleLog();

            trouble.TroubleType = TROUBLETYPE.ERR;
            trouble.TroubleUnit = MyResources.Instance.FindResource("Parse1101").ToString();
            trouble.TroubleCode = "CUV001";
            trouble.TroubleInfo = n + MyResources.Instance.FindResource("Parse1102").ToString();//string.Format("{0}号比色杯有污垢,测试无法在此号比色杯中进行. ", n); ;
            TroubleLogSer.Save(trouble);

            return(n + MyResources.Instance.FindResource("Parse1103").ToString());//string.Format("{0}号比色杯有污垢. ", n);
        }
Exemple #4
0
        public string Parse(List <byte> data)
        {
            if (data.Count < (5 + 7))
            {
                return(null);
            }

            TroubleLog trouble = new TroubleLog();

            trouble.TroubleType = TROUBLETYPE.ERR;
            trouble.TroubleUnit = "设备";
            trouble.TroubleCode = string.Format("{0}{1}{2}{3}{4}{5}{6}", (char)data[2], (char)data[3], (char)data[4], (char)data[5], (char)data[6], (char)data[7], (char)data[8]);
            trouble.TroubleInfo = MachineControlProtocol.BytelistToHexString(data);;
            myBatis.TroubleLogSave("TroubleLogSave", trouble);

            return(trouble.TroubleCode);
        }
Exemple #5
0
        public string Parse(List <byte> Data)
        {
            try
            {
                //RunService RunSer = new RunService();
                //RGTPOSManager RGTPOSMgr = new RGTPOSManager();
                //TroubleLogService TroubleLogSer = new TroubleLogService();
                //RealTimeCUVDataService RealTimeCUVDataSer = new RealTimeCUVDataService();

                int i = 2;
                //温度
                for (int j = 0; j < Data.Count; j++)
                {
                    if (Data[j] == 0x0E)
                    {
                        i = j;
                        break;
                    }
                }
                float tcv = MachineControlProtocol.HexConverToFloat(Data[i + 2], Data[i + 3], Data[i + 4], Data[i + 5]);
                myBatis.UpdateLatestCUVPanelTemperature(tcv * 10);
                //LogService.Log(string.Format("React Panel Temp.:{0};", tcv * 10), LogType.Debug);
                //试剂余量
                for (int j = 0; j < Data.Count; j++)
                {
                    if (Data[j] == 0x2B)
                    {
                        i = j;
                        break;
                    }
                }
                int R1P = MachineControlProtocol.HexConverToDec(Data[i + 1], Data[i + 2]);
                int R1V = MachineControlProtocol.HexConverToDec(Data[i + 3], Data[i + 4]);
                R1P = R1P > 90 ? (R1P - 90) : R1P;
                UpdateLatestRgtVol(1, R1P, R1V);
                RgtWarning(1, R1P);
                int R2P = MachineControlProtocol.HexConverToDec(Data[i + 5], Data[i + 6]);
                int R2V = MachineControlProtocol.HexConverToDec(Data[i + 7], Data[i + 8]);
                UpdateLatestRgtVol(2, R2P, R2V);
                RgtWarning(2, R2P);
                //LogService.Log(string.Format("R1 Pos.:{0} R1 Vol:{1} R2 Pos.:{2} R2 Vol:{3}", R1P, R1V, R2P, R2V), LogType.Debug);
                //查找错误报头
                int erindex = 0;
                for (int j = 0; j < Data.Count(); j++)
                {
                    if (Data[j] == 0x1C)
                    {
                        erindex = j;
                        break;
                    }
                }
                int errcount = Data[erindex + 2] - 0x30;
                if (errcount > 0)
                {
                    for (int j = 0; j < errcount; j++)
                    {
                        int index = (erindex + 6) + j * 7;

                        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]);
                        if (t.TroubleCode == "E000415" || t.TroubleCode == "E000615")
                        {
                        }
                        else
                        {
                            t.TroubleType = TROUBLETYPE.ERR;
                            t.TroubleUnit = "设备";
                            t.TroubleInfo = null;
                            myBatis.TroubleLogSave("TroubleLogSave", t);
                        }
                        //LogService.Log("Err code:" + t.TroubleCode, LogType.Debug);
                    }
                }
            }
            catch
            {
                TroubleLog t = new TroubleLog();
                t.TroubleCode = @"0X25001";
                t.TroubleType = TROUBLETYPE.ERR;
                t.TroubleUnit = "设备";
                t.TroubleInfo = null;
                myBatis.TroubleLogSave("TroubleLogSave", t);
            }
            return(null);
        }
Exemple #6
0
        void RgtWarning(int d, int p)
        {
            float rgtwarncount  = myBatis.GetRgtWarnCount();
            float rgtleastcount = myBatis.GetRgtLeastCount();

            ReagentStateInfoR1R2 rgp = myBatis.GetReagentStateInfoByPos(d, p);
            ReagentSettingsInfo  rsi = myBatis.GetReagentSettingsInfoByPos(d, p);

            if (rgp != null)
            {
                AssayProjectParamInfo arp = myBatis.GetAssayProjectParamInfoByNameAndType("GetAssayProjectParamInfoByNameAndType", new AssayProjectInfo()
                {
                    ProjectName = rsi.ProjectName, SampleType = rsi.ReagentType
                });
                int c = 0;
                int v = System.Convert.ToInt32(rsi.ReagentContainer.Substring(0, rsi.ReagentContainer.IndexOf("ml"))) * (rgp.ValidPercent - 2) / 100 * 1000;

                switch (d)
                {
                case 1:
                    c = arp.Reagent1VolSettings == 0 ? 0 : v / arp.Reagent1VolSettings;
                    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 = "试剂位" + p + "项目" + rgp.Assay + "试剂1由于余量不足开始启用其多试剂位" + mrgt.Position;//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 = MyResources.Instance.FindResource("Parse0839").ToString() + p + MyResources.Instance.FindResource("Parse0832").ToString() + rgp.Assay + MyResources.Instance.FindResource("Parse08312").ToString();//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 = MyResources.Instance.FindResource("Parse0839").ToString() + p + MyResources.Instance.FindResource("Parse0832").ToString() + rgp.Assay + MyResources.Instance.FindResource("Parse08313").ToString();// string.Format("试剂位{0}项目{1}试剂1由于余量不足. ", p, rgp.Assay);
                        //            TroubleLogSer.Save(trouble);
                        //        }
                        //    }
                        //}
                        //else
                        //{
                        //if (RunSer.IsLockRgtEnable() == true)
                        //{
                        rsi.Locked = true;
                        myBatis.UpdateLockState("R1", rsi);

                        TroubleLog trouble = new TroubleLog();
                        trouble.TroubleCode = @"0000773";
                        trouble.TroubleType = TROUBLETYPE.WARN;
                        trouble.TroubleUnit = "试剂";
                        trouble.TroubleInfo = "试剂位" + p + "项目" + rgp.ProjectName + "余量不足将锁定其对应的工作表";    //string.Format("试剂位{0}项目{1}试剂1由于余量不足将锁定其对应的工作表. ", p, rgp.Assay);
                        myBatis.TroubleLogSave("TroubleLogSave", trouble);
                        //}
                        //else
                        //{
                        //    TroubleLog trouble = new TroubleLog();
                        //    trouble.TroubleCode = @"0000773";
                        //    trouble.TroubleType = TROUBLETYPE.ERR;
                        //    trouble.TroubleUnit = "试剂";
                        //    trouble.TroubleInfo = MyResources.Instance.FindResource("Parse0839").ToString() + p + MyResources.Instance.FindResource("Parse0832").ToString() + rgp.Assay + MyResources.Instance.FindResource("Parse08315").ToString();// 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 = "试剂位" + p + "项目" + rgp.ProjectName + "试剂1即将耗尽";    // string.Format("试剂位{0}项目{1}:试剂1余量即将耗尽. ", p, rgp.Assay);
                        myBatis.TroubleLogSave("TroubleLogSave", trouble);
                        return;
                    }
                    break;

                case 2:
                    c = arp.Reagent2VolSettings == 0 ? 0 : v / arp.Reagent2VolSettings;
                    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 = MyResources.Instance.FindResource("Parse0839").ToString() + p + MyResources.Instance.FindResource("Parse0832").ToString() + rgp.Assay + MyResources.Instance.FindResource("Parse08317").ToString() + mrgt.Position;// 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 = MyResources.Instance.FindResource("Parse0839").ToString() + p + MyResources.Instance.FindResource("Parse0832").ToString() + rgp.Assay + MyResources.Instance.FindResource("Parse08318").ToString();// 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 = MyResources.Instance.FindResource("Parse0839").ToString() + p + MyResources.Instance.FindResource("Parse0832").ToString() + rgp.Assay + MyResources.Instance.FindResource("Parse08319").ToString();// string.Format("试剂位{0}项目{1}试剂2余量不足. ", p, rgp.Assay);
                        //            TroubleLogSer.Save(trouble);
                        //        }
                        //    }
                        //}
                        //else
                        //{
                        //if (RunSer.IsLockRgtEnable() == true)
                        //{
                        rsi.Locked = true;
                        myBatis.UpdateLockState("R2", rsi);

                        TroubleLog trouble = new TroubleLog();
                        trouble.TroubleCode = @"0000773";
                        trouble.TroubleType = TROUBLETYPE.WARN;
                        trouble.TroubleUnit = "试剂";
                        trouble.TroubleInfo = "试剂位" + p + "项目" + rgp.ProjectName + "试剂2余量不足将锁定其对应的工作表";    //string.Format("试剂位{0}项目{1}试剂2余量不足将锁定其对应的工作表. ", p, rgp.Assay);
                        myBatis.TroubleLogSave("TroubleLogSave", trouble);
                        //}
                        //else
                        //{
                        //    TroubleLog trouble = new TroubleLog();
                        //    trouble.TroubleCode = @"0000773";
                        //    trouble.TroubleType = TROUBLETYPE.ERR;
                        //    trouble.TroubleUnit = "试剂";
                        //    trouble.TroubleInfo = MyResources.Instance.FindResource("Parse0839").ToString() + p + MyResources.Instance.FindResource("Parse0832").ToString() + rgp.Assay + MyResources.Instance.FindResource("Parse08321").ToString();// 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 = "试剂位" + p + "项目" + rgp.ProjectName + "试剂2余量即将耗尽";    // string.Format("试剂位{0}项目{1}:试剂2余量即将耗尽. ", p, rgp.Assay);
                        myBatis.TroubleLogSave("TroubleLogSave", trouble);
                        return;
                    }
                    break;
                }
            }
        }
Exemple #7
0
        /// <summary>
        /// 根据条码解析数据
        /// </summary>
        /// <param name="barcode"></param>
        /// <param name="b1"></param>
        /// <returns></returns>
        ReagentSettingsInfo AnanlyeBarcode(string barcode, string b1)
        {
            string      code        = barcode.Substring(0, 3);
            ReagentItem reagentItem = mybatis.getReagentItemInfo(code);

            if (reagentItem == null)
            {
                TroubleLog t = new TroubleLog();
                t.TroubleCode = "7777772";
                t.TroubleType = TROUBLETYPE.ERR;
                t.TroubleUnit = @"试剂条码";
                t.TroubleInfo = "条码:" + b1 + "与封闭项目不匹配";
                mybatis.TroubleLogSave("TroubleLogSave", t);

                return(null);
            }

            ReagentSettingsInfo reagentSettingsInfo = new ReagentSettingsInfo();

            reagentSettingsInfo.ProjectName = reagentItem.ItemName;
            //1:S10ml  2:M 20ml  3:L 70ml  4:XL100m
            string RGTContainerType = null;
            string containertype    = barcode.Substring(3, 1);

            switch (containertype)
            {
            case "1":
                reagentSettingsInfo.ReagentContainer = "20ml";
                break;

            case "2":
                reagentSettingsInfo.ReagentContainer = "40ml";
                break;

            case "3":
                reagentSettingsInfo.ReagentContainer = "70ml";
                break;

            case "4":
                reagentSettingsInfo.ReagentContainer = "100ml";
                break;
            }
            if (string.IsNullOrEmpty(reagentSettingsInfo.ReagentContainer))
            {
                TroubleLog t = new TroubleLog();
                t.TroubleCode = "7777773";
                t.TroubleType = TROUBLETYPE.ERR;
                t.TroubleUnit = @"试剂条码";
                t.TroubleInfo = "条码:" + b1 + "容器类型系统不识别";
                mybatis.TroubleLogSave("TroubleLogSave", t);

                return(null);
            }

            //1:R1 2:R2 3:R3 4:R4  5:稀释液 6:清洗剂
            string reagenttype = barcode.Substring(4, 1);

            switch (reagenttype)
            {
            case "1": reagentSettingsInfo.AssayParamType = "R1"; break;

            case "2": reagentSettingsInfo.AssayParamType = "R2"; break;

            case "3": reagentSettingsInfo.AssayParamType = "R3"; break;

            case "4": reagentSettingsInfo.AssayParamType = "R4"; break;

            case "5": reagentSettingsInfo.AssayParamType = "Diluent"; break;
                //case "6": ReagentPosition.AssayPara = "R4"; break;
            }
            switch (this.Disk)
            {
            case 1:
                if (reagentSettingsInfo.AssayParamType == "R1" || reagentSettingsInfo.AssayParamType == "Diluent")
                {
                    reagentSettingsInfo.ReagentName = reagentItem.ItemName + "R1";
                    reagentSettingsInfo.ReagentVol  = reagentItem.R1Vol;
                }
                else
                {
                    TroubleLog t = new TroubleLog();
                    t.TroubleCode = "7777774";
                    t.TroubleType = TROUBLETYPE.ERR;
                    t.TroubleUnit = @"试剂条码";
                    t.TroubleInfo = "条码:" + b1 + "试剂类型R1识别失败";
                    mybatis.TroubleLogSave("TroubleLogSave", t);

                    return(null);
                }
                break;

            case 2:
                if (reagentSettingsInfo.AssayParamType == "R2")
                {
                    reagentSettingsInfo.ReagentName = reagentItem.ItemName + "R2";
                    reagentSettingsInfo.ReagentVol  = reagentItem.R2Vol;
                }
                else
                {
                    TroubleLog t = new TroubleLog();
                    t.TroubleCode = "7777775";
                    t.TroubleType = TROUBLETYPE.ERR;
                    t.TroubleUnit = @"试剂条码";
                    t.TroubleInfo = "条码:" + b1 + "试剂类型R2识别失败";
                    mybatis.TroubleLogSave("TroubleLogSave", t);

                    return(null);
                }
                break;
            }

            string batchnum = barcode.Substring(5, 6);
            //项目试剂类型
            string projectReagenttype = barcode.Substring(12, 1);

            switch (projectReagenttype)
            {
            case "1": reagentSettingsInfo.ReagentType = "血清"; break;

            case "2": reagentSettingsInfo.ReagentType = "尿液"; break;

            case "3": reagentSettingsInfo.ReagentType = "稀释液"; break;

            case "4": reagentSettingsInfo.ReagentType = "清洗剂"; break;
            }



            reagentSettingsInfo.BatchNum = batchnum;

            string str1    = batchnum.Substring(0, 2);
            int    str1int = 0;

            try
            {
                str1int = int.Parse(str1);
            }
            catch
            {
                return(null);
            }
            str1 = "20" + (str1int + 1).ToString() + batchnum.Substring(2);

            try
            {
                reagentSettingsInfo.ValidDate = DateTime.ParseExact(str1, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
            }
            catch
            {
                TroubleLog t = new TroubleLog();
                t.TroubleCode = "7777776";
                t.TroubleType = TROUBLETYPE.ERR;
                t.TroubleUnit = @"试剂条码";
                t.TroubleInfo = "条码:" + b1 + "识别失败";
                mybatis.TroubleLogSave("TroubleLogSave", t);

                return(null);
            }

            reagentSettingsInfo.Barcode = b1;

            mybatis.DeleteAssayProject(reagentItem.ItemName, reagentSettingsInfo.ReagentType);
            DoSaveAssayPorjectPara(reagentItem, reagentSettingsInfo.ReagentType);
            DoSaveAssayProjectInfo(reagentItem, reagentSettingsInfo.ReagentType);
            mybatis.SaveResultSets(reagentItem, reagentSettingsInfo.ReagentType);
            //测试序列
            mybatis.SaveProRunSequence(reagentItem.ItemName, reagentSettingsInfo.ReagentType);

            return(reagentSettingsInfo);
        }
Exemple #8
0
        public string Parse(List <byte> Data)
        {
            int i = 0;

            //温度
            for (int j = 0; j < Data.Count; j++)
            {
                if (Data[j] == 0x0E)
                {
                    i = j;
                    break;
                }
            }
            myBatis.UpdateLatestWaterState(Data[i + 1], Data[i + 2]);
            int inttemp = MachineControlProtocol.HexConverToDec(Data[i + 3], Data[i + 4], Data[i + 5]);

            myBatis.UpdateLatestCUVPanelTemperature(inttemp * 0.1f);
            //LogService.Log(string.Format("反应盘温度:{0};", tcv * 10), LogType.Debug);
            //试剂余量
            for (int j = 0; j < Data.Count; j++)
            {
                if (Data[j] == 0x2B)
                {
                    i = j;
                    break;
                }
            }
            int R1P = MachineControlProtocol.HexConverToDec(Data[i + 1], Data[i + 2]);
            int R1V = MachineControlProtocol.HexConverToDec(Data[i + 3], Data[i + 4]);

            UpdateLatestRgtVol(1, R1P, R1V);
            RgtWarning(1, R1P);
            int R2P = MachineControlProtocol.HexConverToDec(Data[i + 5], Data[i + 6]);
            int R2V = MachineControlProtocol.HexConverToDec(Data[i + 7], Data[i + 8]);

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

            for (int j = 0; j < Data.Count(); j++)
            {
                if (Data[j] == 0x1C)
                {
                    erindex = j;
                    break;
                }
            }
            if (erindex > 0)//发生设备故障
            {
                int errcount = Data[erindex + 2] - 0x30;
                for (int j = 0; j < errcount; j++)
                {
                    int index = (erindex + 3) + j * 10;

                    int    erwn   = MachineControlProtocol.HexConverToDec(Data[index], Data[index + 1], Data[index + 2]);
                    string ercode = string.Format("{0}{1}{2}{3}{4}{5}{6}", (char)Data[index + 3], (char)Data[index + 4], (char)Data[index + 5], (char)Data[index + 6], (char)Data[index + 7], (char)Data[index + 8], (char)Data[index + 9]);
                    if (ercode == "E000415" || ercode == "E000615")
                    {
                    }
                    else
                    {
                        TroubleLog t = new TroubleLog();
                        t.TroubleCode = ercode;
                        t.TroubleType = TROUBLETYPE.ERR;
                        t.TroubleUnit = "设备";
                        t.TroubleInfo = null;
                        myBatis.TroubleLogSave("TroubleLogSave", t);
                    }

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

            return(null);
        }
Exemple #9
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;
                }
            }
        }
Exemple #10
0
        public void ProcessWaterStateA(int state1, int state2)
        {
            //高位状态码
            int s1 = state1 - 0x30;

            //纯水槽低位浮球
            if ((s1 & 0x01) == 0x01)
            {
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.ERR;
                trouble.TroubleUnit = MachineReturnState.TroubleUnit1;
                trouble.TroubleCode = @"10001";
                trouble.TroubleInfo = MachineReturnState.RunService1;
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
            }

            //反应槽液位
            if ((s1 & 0x02) == 0x02)
            {
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.ERR;
                trouble.TroubleUnit = MachineReturnState.TroubleUnit1;
                trouble.TroubleCode = @"10002";
                trouble.TroubleInfo = MachineReturnState.RunService2;
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
            }

            //溢流罐液位报警
            if ((s1 & 0x04) == 0x04)
            {
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.ERR;
                trouble.TroubleUnit = MachineReturnState.TroubleUnit1;
                trouble.TroubleCode = @"10003";
                trouble.TroubleInfo = MachineReturnState.RunService3;
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
            }

            //真空罐液位报警
            if ((s1 & 0x08) == 0x08)
            {
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.ERR;
                trouble.TroubleUnit = MachineReturnState.TroubleUnit1;
                trouble.TroubleCode = @"10004";
                trouble.TroubleInfo = MachineReturnState.RunService4;
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
            }

            //低位状态码
            int s2 = state2 - 0x30;

            //恒温值有问题 OK
            if ((s2 & 0x01) == 0x01)
            {
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.WARN;
                trouble.TroubleUnit = MachineReturnState.TroubleUnit1;
                trouble.TroubleCode = @"10005";
                trouble.TroubleInfo = MachineReturnState.RunService5;
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
            }

            //恒温槽浮球错误
            if ((s2 & 0x04) == 0x04)
            {
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.ERR;
                trouble.TroubleUnit = MachineReturnState.TroubleUnit1;
                trouble.TroubleCode = @"10007";
                trouble.TroubleInfo = MachineReturnState.RunService6;
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
            }

            //纯水槽高位浮球
            if ((s2 & 0x08) == 0x08)
            {
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.ERR;
                trouble.TroubleUnit = MachineReturnState.TroubleUnit1;
                trouble.TroubleCode = @"10008";
                trouble.TroubleInfo = MachineReturnState.RunService7;
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
            }
        }
Exemple #11
0
        public string Parse(List <byte> data)
        {
            ISEItemSDTTable ISEItemSDTTable = new ISEItemSDTTableService().GetNewISEItemSDTTable();

            if (ISEItemSDTTable == null)
            {
                return(null);
            }

            int index = 5;

            ISEItemSDTTable.NaHighSampleValue = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.NaHighSampleBase = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.NaLowSampleValue = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.NaLowSampleBase = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.NaSlope = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.NaDilRate = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.KHighSampleValue = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.KHighSampleBase = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.KLowSampleValue = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.KLowSampleBase = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.KSlope = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.KDilRate = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.ClHighSampleValue = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.ClHighSampleBase = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.ClLowSampleValue = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.ClLowSampleBase = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.ClSlope = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.ClDilRate = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.HighThValue = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.HighThBase = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.LowThValue = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));
            index += 9;
            ISEItemSDTTable.LowThBase = MachineControlProtocol.HexConverToFloat(GetData(data, index, 9));

            int s = MachineControlProtocol.HexConverToDec(data[2], data[3]);

            switch (s)
            {
            case 01: ISEItemSDTTable.RunLog = MyResources.Instance.FindResource("ParseA901").ToString(); break;

            case 97: ISEItemSDTTable.RunLog = MyResources.Instance.FindResource("ParseA902").ToString(); break;

            case 94: ISEItemSDTTable.RunLog = MyResources.Instance.FindResource("ParseA903").ToString(); break;

            case 79: ISEItemSDTTable.RunLog = MyResources.Instance.FindResource("ParseA904").ToString(); break;

            case 78: ISEItemSDTTable.RunLog = MyResources.Instance.FindResource("ParseA905").ToString(); break;

            case 77: ISEItemSDTTable.RunLog = MyResources.Instance.FindResource("ParseA905").ToString(); break;

            case 76: ISEItemSDTTable.RunLog = MyResources.Instance.FindResource("ParseA905").ToString(); break;
            }
            new ISEItemSDTTableService().DeleteNewISEItemSDTTable();
            if (s == 1)
            {
                ISEItemSDTTable.State = "success";
                new ISEItemSDTTableService().Save(ISEItemSDTTable);
                new ISEItemSDTTableService().SetISEItemSDTTableUsing(ISEItemSDTTable);
            }

            TroubleLog isestatetrouble = new TroubleLog();

            isestatetrouble.TroubleCode = @"ISE00" + s.ToString("#00");
            isestatetrouble.TroubleUnit = @"ISE";
            if (s <= 50)
            {
                isestatetrouble.TroubleType = TROUBLETYPE.WARN;
            }
            else
            {
                isestatetrouble.TroubleType = TROUBLETYPE.ERR;
            }
            new TroubleLogService().Save(isestatetrouble);


            if (Math.Abs(ISEItemSDTTable.ClSlope) < 38 || Math.Abs(ISEItemSDTTable.ClSlope) > 65)
            {
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleCode = @"ISE0000";
                trouble.TroubleType = TROUBLETYPE.ERR;
                trouble.TroubleUnit = @"ISE";
                trouble.TroubleInfo = MyResources.Instance.FindResource("ParseA906").ToString();
                new TroubleLogService().Save(trouble);
            }

            return(null);
        }
Exemple #12
0
        public string Parse(List <byte> Data)
        {
            ISECalibratedResult ISECalibratedResult = new ISECalibratedResult();

            int sate = MachineControlProtocol.HexConverToDec(Data[2], Data[3]);

            TroubleLog isestatetrouble = new TroubleLog();

            isestatetrouble.TroubleCode = @"ISE00" + sate.ToString("#00");
            isestatetrouble.TroubleUnit = @"ISE";
            if (sate <= 50)
            {
                isestatetrouble.TroubleType = TROUBLETYPE.WARN;
            }
            else
            {
                isestatetrouble.TroubleType = TROUBLETYPE.ERR;
            }
            new TroubleLogService().Save(isestatetrouble);

            if (sate == 73)
            {
                ISEItemSDTTable ISEItemSDTTable = new ISEItemSDTTableService().GetNewISEItemSDTTable();
                if (ISEItemSDTTable != null)
                {
                    ISEItemSDTTable.RunLog = MyResources.Instance.FindResource("ParseA905").ToString();
                    ISEItemSDTTable.State  = "failed";
                    ISEItemSDTTable.IsUsed = false;
                    new ISEItemSDTTableService().DeleteNewISEItemSDTTable();
                    new ISEItemSDTTableService().Save(ISEItemSDTTable);
                }
            }

            ISECalibratedResult.ResultState = sate.ToString();

            int isecode = MachineControlProtocol.HexConverToDec(Data[4], Data[5], Data[6]);

            ISECalibratedResult.CalibratePosition = isecode.ToString();

            int index = 7;

            ISECalibratedResult.NaE = MachineControlProtocol.ConvertArrayToString(GetData(Data, index, 9));
            index += 9;
            ISECalibratedResult.NaF = MachineControlProtocol.ConvertArrayToString(GetData(Data, index, 9));
            index += 9;
            ISECalibratedResult.NaG = MachineControlProtocol.ConvertArrayToString(GetData(Data, index, 9));

            index += 9;
            ISECalibratedResult.KE = MachineControlProtocol.ConvertArrayToString(GetData(Data, index, 9));
            index += 9;
            ISECalibratedResult.KF = MachineControlProtocol.ConvertArrayToString(GetData(Data, index, 9));
            index += 9;
            ISECalibratedResult.KG = MachineControlProtocol.ConvertArrayToString(GetData(Data, index, 9));

            index += 9;
            ISECalibratedResult.ClE = MachineControlProtocol.ConvertArrayToString(GetData(Data, index, 9));
            index += 9;
            ISECalibratedResult.ClF = MachineControlProtocol.ConvertArrayToString(GetData(Data, index, 9));
            index += 9;
            ISECalibratedResult.ClG = MachineControlProtocol.ConvertArrayToString(GetData(Data, index, 9));

            index += 9;
            ISECalibratedResult.Th1H = MachineControlProtocol.ConvertArrayToString(GetData(Data, index, 9));
            index += 9;
            ISECalibratedResult.Th1I = MachineControlProtocol.ConvertArrayToString(GetData(Data, index, 9));

            index += 9;
            ISECalibratedResult.Th2H = MachineControlProtocol.ConvertArrayToString(GetData(Data, index, 9));
            index += 9;
            ISECalibratedResult.Th2I = MachineControlProtocol.ConvertArrayToString(GetData(Data, index, 9));

            ISECalibratedResult.CalibrateCode = new RunService().GetISECalibrateCode() - 1;

            new ISECalibratedResultService().Save(ISECalibratedResult);

            return(null);
        }
Exemple #13
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);
        }
Exemple #14
0
        public void ProcessWaterState(int state1, int state2)
        {
            //高位状态码
            int s1 = state1 - 0x30;

            //纯水槽低位浮球
            if ((s1 & 0x01) == 0x01)
            {
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.ERR;
                trouble.TroubleUnit = "设备";
                trouble.TroubleCode = @"10001";
                trouble.TroubleInfo = "纯水槽低位浮球状态异常";
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
            }

            //反应槽液位
            if ((s1 & 0x02) == 0x02)
            {
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.ERR;
                trouble.TroubleUnit = "设备";
                trouble.TroubleCode = @"10002";
                trouble.TroubleInfo = "反应槽液位状态异常";
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
            }

            //溢流罐液位报警
            if ((s1 & 0x04) == 0x04)
            {
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.ERR;
                trouble.TroubleUnit = "设备";
                trouble.TroubleCode = @"10003";
                trouble.TroubleInfo = "溢流罐液位状态异常";
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
            }

            //真空罐液位报警
            if ((s1 & 0x08) == 0x08)
            {
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.ERR;
                trouble.TroubleUnit = "设备";
                trouble.TroubleCode = @"10004";
                trouble.TroubleInfo = "真空罐液位状态异常";
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
            }

            //低位状态码
            int s2 = state2 - 0x30;

            //恒温值有问题 OK
            if ((s2 & 0x01) == 0x01)
            {
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.WARN;
                trouble.TroubleUnit = "设备";
                trouble.TroubleCode = @"10005";
                trouble.TroubleInfo = "恒温槽水温不在理想状态下";
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
            }

            //压力传感器有 OK
            if ((s2 & 0x02) == 0x02)
            {
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.WARN;
                trouble.TroubleUnit = "设备";
                trouble.TroubleCode = @"10006";
                trouble.TroubleInfo = "样本吸量器压力传感器状态异常";
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
            }

            //恒温槽浮球错误
            if ((s2 & 0x04) == 0x04)
            {
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.ERR;
                trouble.TroubleUnit = "设备";
                trouble.TroubleCode = @"10007";
                trouble.TroubleInfo = "恒温槽浮球状态异常";
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
            }

            //纯水槽高位浮球
            if ((s2 & 0x08) == 0x08)
            {
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.ERR;
                trouble.TroubleUnit = "设备";
                trouble.TroubleCode = @"10008";
                trouble.TroubleInfo = "纯水槽高位浮球状态异常";
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
            }
        }
Exemple #15
0
        public string Parse(List <byte> Data)
        {
            //LogService.Log("开始解析测试数据包--------------", LogType.Trace,"log083.lg");
            string machinestate = null;

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

            //空白值比色杯
            int blki = 0;

            for (int j = 0; j < Data.Count(); j++)
            {
                if (Data[j] == 0x2B)
                {
                    blki  = j;
                    blki += 8;
                    break;
                }
            }
            //比色表编号
            int BlkCUVNO = MachineControlProtocol.HexConverToDec(Data[blki + 1], Data[blki + 2], Data[blki + 3]);
            //测试编号
            int BlkWN = MachineControlProtocol.HexConverToDec(Data[2], Data[3], Data[4]);

            myBatis.SaveCuvNumber(BlkWN, BlkCUVNO);
            //LogService.Log(string.Format("比色杯:{0}空白值:{1}", BlkCUVNO, BlkWN), LogType.Debug);
            //生化数据包
            int i            = 2;
            int count        = 1;
            int PressErrorWn = 0;

            while (count <= 44)
            {
                //测试编号
                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) * RunConfigureUtility.LightSpan;
                }
                if (SWL > -0.000001 && SWL < 0.000001)
                {
                    SWL = 3.5f;
                }
                else
                {
                    SWL = (float)Math.Log10(10 / SWL) * RunConfigureUtility.LightSpan;
                }

                if (WN != 0 && PT != 0)
                {
                    SaveABS(WN, PT, PWL, SWL);
                }

                if (PT == 2)
                {
                    PressErrorWn = WN;
                }
                //R1,R2,SMP错误日志对照
                //if (PT == 1)1.10797185
                //{
                //    Pt1stWn = WN;
                //}
                //if (PT == 3)
                //{
                //    Pt3ndWn = WN;
                //}
                //if (PT == 26)
                //{
                //    Pt26thWn = WN;
                //}

                i = i + 17;

                //Console.WriteLine(string.Format("WN:{0}PT:{1}PWL:{2}SWL:{3}", WN, PT, PWL, SWL));
                //LogService.Log(string.Format("WN:{0}PT:{1}PWL:{2}SWL:{3}", WN, PT, PWL, SWL), LogType.Debug);

                count++;
            }

            //温度
            for (int j = 0; j < Data.Count; j++)
            {
                if (Data[j] == 0x0E)
                {
                    i = j;
                    break;
                }
            }
            myBatis.UpdateLatestWaterState(Data[i + 1], Data[i + 2]);
            ProcessWaterState(Data[i + 1], Data[i + 2]);
            //压力传感器有
            int s2 = Data[i + 2] - 0x30;

            if ((s2 & 0x02) == 0x02)
            {
                RunningErrors(PressErrorWn, "PE");
                RealTimeCUVDataInfo rt = new RealTimeCUVDataInfo();
                bool bExistRes         = new ResultService().GetResultBeExistFromRealTimeWorkNum(PressErrorWn, out rt);
                if (bExistRes)
                {
                    TroubleLog trouble = new TroubleLog();
                    trouble.TroubleCode = @"0000571";
                    trouble.TroubleType = TROUBLETYPE.ERR;
                    trouble.TroubleUnit = "设备";
                    trouble.TroubleInfo = "样本" + rt.SmpNo + "项目" + rt.Assay + "测试时检测到堵针" + "反应进程:" + rt.TC.ToString();// string.Format("样本{0}项目{1}测试时检测到堵针,反应进程{2}。", r.SMPNO, r.ItemName, r.TCNO);
                    myBatis.TroubleLogSave("TroubleLogSave", trouble);
                }
            }
            if (IsWaterExchangeEnable(Data[i + 1], Data[i + 2]) == false)
            {
                //标示设备液路有异常
                machinestate = "ME";
            }

            int inttemp = MachineControlProtocol.HexConverToDec(Data[i + 3], Data[i + 4], Data[i + 5]);

            myBatis.UpdateLatestCUVPanelTemperature(inttemp * 0.1f);

            //LogService.Log(string.Format("反应盘温度:{0};", tcv * 10), LogType.Debug);
            //试剂余量
            for (int j = 0; j < Data.Count; j++)
            {
                if (Data[j] == 0x2B)
                {
                    i = j;
                    break;
                }
            }
            int R1P = MachineControlProtocol.HexConverToDec(Data[i + 1], Data[i + 2]);
            int R1V = MachineControlProtocol.HexConverToDec(Data[i + 3], Data[i + 4]);

            //R1P = R1P > 45 ? (R1P - 45) : R1P;
            //UpdateLatestRgtVol(1, R1P, R1V);
            //修改试剂1余量和可测数量
            myBatis.UpdateReagentValidPercent(R1V, 1, R1P);
            RgtWarning(1, R1P);
            //LogService.Log(string.Format("R1位置:{0} R1体积:{1}", R1P, R1V), LogType.Trace, "log083.lg");
            int R2P = MachineControlProtocol.HexConverToDec(Data[i + 5], Data[i + 6]);
            int R2V = MachineControlProtocol.HexConverToDec(Data[i + 7], Data[i + 8]);

            //UpdateLatestRgtVol(2, R2P, R2V);
            //修改试剂2余量和可测数量
            myBatis.UpdateReagentValidPercent(R2V, 2, R2P);
            RgtWarning(2, R2P);
            //LogService.Log(string.Format("R2位置:{0} R2体积:{1}", R2P, R2V), LogType.Trace, "log083.lg");
            //查找错误报头
            int erindex = -1;

            for (int j = 0; j < Data.Count(); j++)
            {
                if (Data[j] == 0x1C)
                {
                    erindex = j;
                    break;
                }
            }
            if (erindex > 0)//发生设备故障
            {
                int errcount = Data[erindex + 2] - 0x30;
                for (int j = 0; j < errcount; j++)
                {
                    int index = (erindex + 3) + j * 10;

                    int    erwn   = MachineControlProtocol.HexConverToDec(Data[index], Data[index + 1], Data[index + 2]);
                    string ercode = string.Format("{0}{1}{2}{3}{4}{5}{6}", (char)Data[index + 3], (char)Data[index + 4], (char)Data[index + 5], (char)Data[index + 6], (char)Data[index + 7], (char)Data[index + 8], (char)Data[index + 9]);
                    if (ercode == "E000415" || ercode == "E000615" || ercode == "E000515")
                    {
                    }
                    else
                    {
                        TroubleLog t = new TroubleLog();
                        t.TroubleCode = ercode;
                        t.TroubleType = TROUBLETYPE.ERR;
                        t.TroubleUnit = "设备";
                        t.TroubleInfo = null;
                        myBatis.TroubleLogSave("TroubleLogSave", t);
                    }

                    RealTimeCUVDataInfo rt = new RealTimeCUVDataInfo();
                    bool   bExistRes       = new ResultService().GetResultBeExistFromRealTimeWorkNum(PressErrorWn, out rt);
                    string cmdname         = string.Format("{0}{1}", (char)Data[index + 3], (char)Data[index + 4]);
                    if (cmdname == "77" && Data[index + 5] == 0x30)//R1
                    {
                        RunningErrors(erwn, "R1");

                        if (bExistRes)
                        {
                            TroubleLog trouble = new TroubleLog();
                            trouble.TroubleCode = @"0000770";
                            trouble.TroubleType = TROUBLETYPE.ERR;
                            trouble.TroubleUnit = "设备";
                            trouble.TroubleInfo = "样本" + rt.SmpNo + "项目" + rt.Assay + "添加试剂1失败" + "反应进程:" + rt.TC.ToString();//string.Format("样本{0}项目{1}反应进程{2},添加试剂1失败. ", r.SMPNO, r.ItemName, r.TCNO);
                            myBatis.TroubleLogSave("TroubleLogSave", trouble);
                        }
                    }
                    if (cmdname == "77" && Data[index + 5] == 0x31)//R2
                    {
                        RunningErrors(erwn, "R2");

                        if (bExistRes)
                        {
                            TroubleLog trouble = new TroubleLog();
                            trouble.TroubleCode = @"0000771";
                            trouble.TroubleType = TROUBLETYPE.ERR;
                            trouble.TroubleUnit = "设备";
                            trouble.TroubleInfo = "样本" + rt.SmpNo + "项目" + rt.Assay + "添加试剂2失败" + "反应进程:" + rt.TC.ToString(); //string.Format("样本{0}项目{1}反应进程{2},添加试剂2失败. ", r.SMPNO, r.ItemName, r.TCNO);
                            myBatis.TroubleLogSave("TroubleLogSave", trouble);
                        }
                    }
                    if (cmdname == "57" && Data[index + 5] == 0x30)//SMP
                    {
                        RunningErrors(erwn, "SMP");

                        if (bExistRes)
                        {
                            TroubleLog trouble = new TroubleLog();
                            trouble.TroubleCode = @"0000570";
                            trouble.TroubleType = TROUBLETYPE.ERR;
                            trouble.TroubleUnit = "设备";
                            trouble.TroubleInfo = "样本" + rt.SmpNo + "项目" + rt.Assay + "添加样本失败" + "反应进程:" + rt.TC.ToString(); //string.Format("样本{0}项目{1}反应进程{2},添加样本失败. ", r.SMPNO, r.ItemName, r.TCNO);
                            myBatis.TroubleLogSave("TroubleLogSave", trouble);
                        }
                    }
                }
            }
            return(machinestate);
        }
Exemple #16
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;
                }
            }
        }
Exemple #17
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);
        }
Exemple #18
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);
        }
Exemple #19
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);
        }
Exemple #20
0
        RGTPosition AnanlyeBarcode(string barcode, string b1)
        {
            string      code        = barcode.Substring(0, 3);
            ReagentItem reagentItem = new ReagentItemService().GetReagentItem(code);

            if (reagentItem == null)
            {
                TroubleLog t = new TroubleLog();
                t.TroubleCode = "7777772";
                t.TroubleType = TROUBLETYPE.ERR;
                t.TroubleUnit = @"试剂条码";
                t.TroubleInfo = "条码:" + b1 + "与封闭项目不匹配";
                new TroubleLogService().Save(t);

                return(null);
            }

            RGTPosition reagentPosition = new RGTPosition();

            reagentPosition.Assay = reagentItem.ItemName;
            //1:S10ml  2:M 20ml  3:L 70ml  4:XL100m
            RGTContainerType RGTContainerType = null;
            string           containertype    = barcode.Substring(3, 1);

            switch (containertype)
            {
            case "1":
                RGTContainerType = this.GetRGTContainerType(20);
                break;

            case "2":
                RGTContainerType = this.GetRGTContainerType(40);
                break;

            case "3":
                RGTContainerType = this.GetRGTContainerType(70);
                break;

            case "4":
                RGTContainerType = this.GetRGTContainerType(100);
                break;
            }
            if (RGTContainerType == null)
            {
                TroubleLog t = new TroubleLog();
                t.TroubleCode = "7777773";
                t.TroubleType = TROUBLETYPE.ERR;
                t.TroubleUnit = @"试剂条码";
                t.TroubleInfo = "条码:" + b1 + "容器类型系统不识别";
                new TroubleLogService().Save(t);

                return(null);
            }
            else
            {
                reagentPosition.CType.Name = RGTContainerType.Name;
            }

            //1:R1 2:R2 3:R3 4:R4  5:稀释液 6:清洗剂
            string reagenttype = barcode.Substring(4, 1);

            switch (reagenttype)
            {
            case "1": reagentPosition.AssayPara = "R1"; break;

            case "2": reagentPosition.AssayPara = "R2"; break;

            case "3": reagentPosition.AssayPara = "R3"; break;

            case "4": reagentPosition.AssayPara = "R4"; break;

            case "5": reagentPosition.AssayPara = "Diluent"; break;
                //case "6": ReagentPosition.AssayPara = "R4"; break;
            }
            switch (this.Disk)
            {
            case 1:
                if (reagentPosition.AssayPara == "R1" || reagentPosition.AssayPara == "Diluent")
                {
                }
                else
                {
                    TroubleLog t = new TroubleLog();
                    t.TroubleCode = "7777774";
                    t.TroubleType = TROUBLETYPE.ERR;
                    t.TroubleUnit = @"试剂条码";
                    t.TroubleInfo = "条码:" + b1 + "试剂类型R1识别失败";
                    new TroubleLogService().Save(t);

                    return(null);
                }
                break;

            case 2:
                if (reagentPosition.AssayPara == "R2")
                {
                }
                else
                {
                    TroubleLog t = new TroubleLog();
                    t.TroubleCode = "7777775";
                    t.TroubleType = TROUBLETYPE.ERR;
                    t.TroubleUnit = @"试剂条码";
                    t.TroubleInfo = "条码:" + b1 + "试剂类型R2识别失败";
                    new TroubleLogService().Save(t);

                    return(null);
                }
                break;
            }

            string batchnum = barcode.Substring(5, 6);


            reagentPosition.RGTProductor.FactoryName = "上海华臣生物试剂有限公司";
            reagentPosition.RGTProductor.BatchNO     = batchnum;

            string str1    = batchnum.Substring(0, 2);
            int    str1int = 0;

            try
            {
                str1int = int.Parse(str1);
            }
            catch
            {
                return(null);
            }
            str1 = "20" + (str1int + 1).ToString() + batchnum.Substring(2);

            try
            {
                reagentPosition.RGTProductor.ExpireDay = DateTime.ParseExact(str1, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
            }
            catch
            {
                TroubleLog t = new TroubleLog();
                t.TroubleCode = "7777776";
                t.TroubleType = TROUBLETYPE.ERR;
                t.TroubleUnit = @"试剂条码";
                t.TroubleInfo = "条码:" + b1 + "识别失败";
                new TroubleLogService().Save(t);

                return(null);
            }

            reagentPosition.BarCode = b1;

            DoSaveAssayRunPara(reagentItem);
            DoSaveAssayValuePara(reagentItem);
            DoSaveResultSets(reagentItem);
            //测试序列
            DoSaveRunSQ(reagentItem);

            return(reagentPosition);
        }
Exemple #21
0
        void RgtWarning(int d, int p)
        {
            float rgtwarncount  = myBatis.GetRgtWarnCount();
            float rgtleastcount = myBatis.GetRgtLeastCount();

            ReagentStateInfoR1R2 rgp = myBatis.GetReagentStateInfoByPos(d, p);
            ReagentSettingsInfo  rsi = myBatis.GetReagentSettingsInfoByPos(d, p);

            if (rgp != null)
            {
                int c = 0;
                int v = System.Convert.ToInt32(rsi.ReagentContainer.Substring(0, rsi.ReagentContainer.IndexOf("ml"))) * rgp.ValidPercent / 100 * 1000;

                switch (d)
                {
                case 1:
                    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);
                        myBatis.TroubleLogSave("TroubleLogSave", trouble);

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

                case 2:
                    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);
                        myBatis.TroubleLogSave("TroubleLogSave", trouble);

                        return;
                    }
                    if (c < rgtwarncount)
                    {
                        TroubleLog trouble = new TroubleLog();
                        trouble.TroubleCode = @"0000775";
                        trouble.TroubleType = TROUBLETYPE.WARN;
                        trouble.TroubleUnit = "设备";
                        trouble.TroubleInfo = string.Format("试剂位{0}清洗剂即将耗尽. ", p);
                        myBatis.TroubleLogSave("TroubleLogSave", trouble);
                        return;
                    }
                    break;
                }
            }
        }
Exemple #22
0
        public void AnalyzeResult(SampleResultInfo r)
        {
            AssayProjectParamInfo A = myBatis.GetAssayProjectParamInfoByNameAndType("GetAssayProjectParamInfoByNameAndType", new AssayProjectInfo()
            {
                ProjectName = r.ProjectName, SampleType = r.SampleType
            });

            if (A == null)
            {
                return;
            }
            TimeCourseInfo T = myBatis.GetTimeCourse(r.TCNO, r.SampleCreateTime);

            if (T == null)
            {
                return;
            }
            SampleInfo S = myBatis.GetSample(r.SampleNum, r.SampleCreateTime);

            if (S == null)
            {
                return;
            }
            AssayProjectRangeParamInfo ARP = myBatis.GetRangeParamInfo(r.ProjectName, r.SampleType);

            if (ARP == null)
            {
                return;
            }
            ProjectRunSequenceInfo proRunSequence = myBatis.QueryProjectRunSequenceByProject(new AssayProjectInfo()
            {
                ProjectName = r.ProjectName, SampleType = r.SampleType
            });

            if (proRunSequence == null)
            {
                return;
            }
            //试剂吸光度判读,检测试剂是否正常
            string RgtAbsFlag = null;
            float  RgtAbs     = ABSProcess.GetReangentAbs(T, A);

            if (A.ReagentBlankMaximum > 0.000001 && A.ReagentBlankMaximum < RgtAbs)
            {
                RgtAbsFlag = "RgtAbsMax";
            }
            if (A.ReagentBlankMaximum > 0.000001 && A.ReagentBlankMinimum > RgtAbs)
            {
                RgtAbsFlag = "RgtAbsMin";
            }
            if (RgtAbsFlag != null)
            {
                if (string.IsNullOrEmpty(r.Remarks) || string.IsNullOrWhiteSpace(r.Remarks))
                {
                    r.Remarks = RgtAbsFlag;
                }
                else
                {
                    r.Remarks += "|" + RgtAbsFlag;
                }
                myBatis.UpdateNORResultRunLog(r);
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.WARN;
                trouble.TroubleUnit = @"试剂";
                trouble.TroubleCode = "000002";
                trouble.TroubleInfo = string.Format(@"{0}:{1}发生试剂吸光度越界,其反应进程:{2}。请检测试剂是否过期. ", r.SampleNum, r.ProjectName, r.TCNO);
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
            }


            //底物耗尽判断处理,
            string AbsLimFlag = null;
            float  AbsLimRef  = A.LimitValue;                  //(0--3.5)
            float  AbsLim     = ABSProcess.GetAbsLimAbs(T, A); //M2E abs

            if (A.AnalysisMethod == "速率A法" || A.AnalysisMethod == "速率B法")
            {
                if (A.ReactionDirection == "正反应")//正反应
                {
                    if (AbsLimRef > 0.000001 && AbsLimRef < AbsLim)
                    {
                        AbsLimFlag = "AbsLim";
                    }
                }
                if (A.ReactionDirection == "负反应")//负反应
                {
                    if (AbsLimRef > 0.000001 && AbsLimRef > AbsLim)
                    {
                        AbsLimFlag = "AbsLim";
                    }
                }
            }
            if (AbsLimFlag != null)
            {
                if (string.IsNullOrEmpty(r.Remarks) || string.IsNullOrWhiteSpace(r.Remarks))
                {
                    r.Remarks = AbsLimFlag;
                }
                else
                {
                    r.Remarks += "|" + AbsLimFlag;
                }
                myBatis.UpdateNORResultRunLog(r);

                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.ERR;
                trouble.TroubleUnit = @"样本";
                trouble.TroubleCode = "000003";
                trouble.TroubleInfo = string.Format(@"{0}:{1}发生底物耗尽,其反应进程:{2}", r.SampleNum, r.ProjectName, r.TCNO);
                myBatis.TroubleLogSave("TroubleLogSave", trouble);

                if (ARP.AutoRerun == true)
                {
                    //Schedule Schedule = new ScheduleService().GetSMPSchedule(r.SMPNO, r.ItemName) as Schedule;
                    TaskInfo task = myBatis.GetTask(r.ProjectName, r.SampleNum);
                    if (task == null)
                    {
                        task             = new TaskInfo();
                        task.SampleNum   = r.SampleNum;
                        task.ProjectName = r.ProjectName;
                        task.SampleType  = r.SampleType;
                        //Schedule.WorkType = S.IsEmergency == true ? WORKTYPE.E : WORKTYPE.N;
                        task.SampleDilute = "减量体积";
                        task.SendTimes    = 0;
                        task.FinishTimes  = 0;
                        task.InspectTimes = 1;
                        task.TaskState    = 0;
                        task.IsReRun      = true;
                        //Schedule.ReRun = "AbsLim";
                        if (r.ResultVolType != task.SampleDilute)//结果体积参数和计划体积参数不同才可以提交工作计划
                        {
                            //new ScheduleService().Save(Schedule);
                            myBatis.SaveTske(task);
                        }
                    }
                }
            }

            //技术 血清/尿液范围即线性范围判读
            float LineRefMin = 0.0f; //线性参考值
            float LineRefMax = 0.0f; //线性参考值

            switch (S.SampleType)
            {
            case "尿液":
            case "血清": LineRefMin = A.FirstSlope; LineRefMax = A.FirstSlopeHigh; break;
            }

            string LinFlag = null;

            try
            {
                float v = r.ConcResult;
                if (LineRefMax > 0.00001 && v > LineRefMax)
                {
                    LinFlag = "Lin.H";
                }
                if (LineRefMax > 0.00001 && v < LineRefMin)
                {
                    LinFlag = "Lin.L";
                }
            }
            catch
            {
            }
            if (LinFlag != null)
            {
                if (string.IsNullOrEmpty(r.Remarks) || string.IsNullOrWhiteSpace(r.Remarks))
                {
                    r.Remarks = LinFlag;
                }
                else
                {
                    r.Remarks += "|" + LinFlag;
                }
                myBatis.UpdateNORResultRunLog(r);
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.ERR;
                trouble.TroubleUnit = @"样本";
                trouble.TroubleCode = "00001";
                trouble.TroubleInfo = string.Format(@"{0}:{1}线性范围违规,其反应进程:{2}", r.SampleNum, r.ProjectName, r.TCNO);
                myBatis.TroubleLogSave("TroubleLogSave", trouble);

                if (ARP.AutoRerun == true)
                {
                    //Schedule Schedule = new ScheduleService().GetSMPSchedule(r.SMPNO, r.ItemName) as Schedule;
                    TaskInfo task = myBatis.GetTask(r.ProjectName, r.SampleNum);
                    if (task == null)
                    {
                        task             = new TaskInfo();
                        task.SampleNum   = r.SampleNum;
                        task.ProjectName = r.ProjectName;
                        task.SampleType  = r.SampleType;
                        //Schedule.WorkType = S.IsEmergency == true ? WORKTYPE.E : WORKTYPE.N;
                        switch (LinFlag)
                        {
                        case "Lin.L": task.SampleDilute = "增量体积"; break;

                        case "Lin.H": task.SampleDilute = "减量体积"; break;
                        }
                        task.SendTimes    = 0;
                        task.FinishTimes  = 0;
                        task.InspectTimes = 1;
                        task.TaskState    = 0;
                        task.IsReRun      = true;
                        //Schedule.ReRun = "AbsLim";
                        if (r.ResultVolType != task.SampleDilute)//结果体积参数和计划体积参数不同才可以提交工作计划
                        {
                            //new ScheduleService().Save(Schedule);
                            myBatis.SaveTske(task);
                        }
                    }
                }
            }

            //血清结果浓度临界判读,只对血清样本起作用。
            if (S.SampleType == "血清")
            {
                string PanicFlag = null;
                try
                {
                    float v = r.ConcResult;
                    if (A.SerumCriticalMaximum > 0.00001 && A.SerumCriticalMaximum < v)
                    {
                        PanicFlag = "Panic.H";
                    }
                    if (A.SerumCriticalMaximum > 0.00001 && A.SerumCriticalMinimum > v)
                    {
                        PanicFlag = "Panic.L";
                    }
                }
                catch
                {
                }
                if (PanicFlag != null)
                {
                    if (string.IsNullOrEmpty(r.Remarks) || string.IsNullOrWhiteSpace(r.Remarks))
                    {
                        r.Remarks = PanicFlag;
                    }
                    else
                    {
                        r.Remarks += "|" + PanicFlag;
                    }
                    myBatis.UpdateNORResultRunLog(r);

                    TroubleLog trouble = new TroubleLog();
                    trouble.TroubleType = TROUBLETYPE.ERR;
                    trouble.TroubleUnit = @"样本";
                    trouble.TroubleCode = "00001";
                    trouble.TroubleInfo = string.Format(@"{0}:{1}发生血清临界值违规,其反应进程:{2}", r.SampleNum, r.ProjectName, r.TCNO);
                    myBatis.TroubleLogSave("TroubleLogSave", trouble);

                    if (ARP.AutoRerun == true)
                    {
                        //Schedule Schedule = new ScheduleService().GetSMPSchedule(r.SMPNO, r.ItemName) as Schedule;
                        TaskInfo task = myBatis.GetTask(r.ProjectName, r.SampleNum);
                        if (task == null)
                        {
                            task             = new TaskInfo();
                            task.SampleNum   = r.SampleNum;
                            task.ProjectName = r.ProjectName;
                            task.SampleType  = r.SampleType;
                            //Schedule.WorkType = S.IsEmergency == true ? WORKTYPE.E : WORKTYPE.N;
                            switch (r.ResultVolType)
                            {
                            case VOLTYPE.IV: task.SampleDilute = "增量体积"; break;

                            case VOLTYPE.DV: task.SampleDilute = "减量体积"; break;

                            case VOLTYPE.NA: task.SampleDilute = "常规体积"; break;
                            }
                            task.SendTimes    = 0;
                            task.FinishTimes  = 0;
                            task.InspectTimes = 1;
                            task.TaskState    = 0;
                            task.IsReRun      = true;
                            //Schedule.ReRun = "AbsLim";
                            if (r.ResultVolType != task.SampleDilute)//结果体积参数和计划体积参数不同才可以提交工作计划
                            {
                                //new ScheduleService().Save(Schedule);
                                myBatis.SaveTske(task);
                            }
                        }
                    }
                }
            }

            //前驱界限,该值是个比例
            string ProzontLimitPanicFlag = null;
            float  ProzontLimit          = ABSProcess.GetProzontLimitValue(T, A, r.ResultVolType, S.SampleType);

            if (A.ProLowestBound > 0.000001)
            {
                if (ProzontLimit > A.ProLowestBound / 100)
                {
                    ProzontLimitPanicFlag = "P*";
                }
            }
            if (ProzontLimitPanicFlag != null)
            {
                if (string.IsNullOrEmpty(r.Remarks) || string.IsNullOrWhiteSpace(r.Remarks))
                {
                    r.Remarks = ProzontLimitPanicFlag;
                }
                else
                {
                    r.Remarks += "|" + ProzontLimitPanicFlag;
                }
                myBatis.UpdateNORResultRunLog(r);
                TroubleLog trouble = new TroubleLog();
                trouble.TroubleType = TROUBLETYPE.ERR;
                trouble.TroubleUnit = @"样本";
                trouble.TroubleCode = "00001";
                trouble.TroubleInfo = string.Format(@"{0}:{1}前驱界限违规!反应进程:{2}", r.SampleNum, r.ProjectName, r.TCNO);
                myBatis.TroubleLogSave("TroubleLogSave", trouble);
                if (ARP.AutoRerun == true)
                {
                    //Schedule Schedule = new ScheduleService().GetSMPSchedule(r.SMPNO, r.ItemName) as Schedule;
                    TaskInfo task = myBatis.GetTask(r.ProjectName, r.SampleNum);
                    if (task == null)
                    {
                        task             = new TaskInfo();
                        task.SampleNum   = r.SampleNum;
                        task.ProjectName = r.ProjectName;
                        task.SampleType  = r.SampleType;
                        //Schedule.WorkType = S.IsEmergency == true ? WORKTYPE.E : WORKTYPE.N;
                        task.SampleDilute = "减量体积";
                        task.SendTimes    = 0;
                        task.FinishTimes  = 0;
                        task.InspectTimes = 1;
                        task.TaskState    = 0;
                        task.IsReRun      = true;
                        //Schedule.ReRun = "AbsLim";
                        if (r.ResultVolType != task.SampleDilute)//结果体积参数和计划体积参数不同才可以提交工作计划
                        {
                            //new ScheduleService().Save(Schedule);
                            myBatis.SaveTske(task);
                        }
                    }
                }
            }
        }
Exemple #23
0
        public string Parse(List <byte> data)
        {
            bool HasError = false;
            bool HasWarn  = false;

            for (int i = 2; i < 86; i = i + 7)
            {
                int WaveIndex = System.Convert.ToInt32(RunConfigureUtility.WaveLengthList[data[i] - '0']);
                int OffSet    = MachineControlProtocol.HexConverToDec(data[i + 1], data[i + 2], data[i + 3]);
                int Gain      = MachineControlProtocol.HexConverToDec(data[i + 4], data[i + 5], data[i + 6]);

                if (Gain < 60)
                {
                    TroubleLog trouble = new TroubleLog();
                    trouble.TroubleType = TROUBLETYPE.ERR;
                    trouble.TroubleUnit = "光度计";
                    trouble.TroubleInfo = "波长" + WaveIndex + "增益" + Gain + "低于60,光度计不能正常工作";// string.Format(@"波长{0}增益值{1}低于60,光度计不能正常工作。", WaveIndex, Gain);
                    trouble.TroubleCode = "00001";
                    myBatis.TroubleLogSave("TroubleLogSave", trouble);

                    HasError = true;
                }

                OffSetGain offgain = myBatis.GetLatestOffSetGain(WaveIndex);
                if (offgain == null)
                {
                    offgain             = new OffSetGain();
                    offgain.WaveLength  = WaveIndex;
                    offgain.OffSet      = OffSet;
                    offgain.Gain        = Gain;
                    offgain.InspectTime = DateTime.Now;
                    if (WaveIndex == 795)
                    {
                        offgain.InspectTime = DateTime.Now;
                    }
                    myBatis.AddLatestOffSetGain(offgain);
                }
                else
                {
                    if (Math.Abs(Gain - offgain.Gain) >= 30)
                    {
                        TroubleLog trouble = new TroubleLog();
                        trouble.TroubleType = TROUBLETYPE.WARN;
                        trouble.TroubleUnit = "光度计";
                        trouble.TroubleInfo = "波长" + WaveIndex + "增益值波动幅度大于30";// string.Format(@"波长{0}增益值波动幅度{1},影响结果的准确性。", WaveIndex, Math.Abs(Gain - offgain.Gain));
                        trouble.TroubleCode = "00003";
                        myBatis.TroubleLogSave("TroubleLogSave", trouble);

                        HasWarn = true;
                    }
                    myBatis.DeleteOldOffSetGain(WaveIndex);
                    myBatis.AddOldOffSetGain(offgain);
                    offgain.OffSet = OffSet;
                    offgain.Gain   = Gain;
                    if (WaveIndex == 795)
                    {
                        offgain.InspectTime = DateTime.Now;
                    }
                    myBatis.DeleteNewOffSetGain(WaveIndex);
                    myBatis.AddLatestOffSetGain(offgain);
                }
            }

            if (HasError == true)
            {
                return("PhotometerWrong");
            }

            if (HasWarn == true)
            {
                return("PhotometerWarn");
            }

            return("PhotometerRight");
        }
Exemple #24
0
        /// <summary>
        /// 根据试剂条码信息获取对应的项目参数信息
        /// </summary>
        /// <param name="disk"></param>
        /// <param name="pos"></param>
        /// <param name="reagentBracode"></param>
        /// <returns></returns>
        public object GetRgBracodePara(int disk, string pos, string reagentBracode)
        {
            string b = Decode(reagentBracode);

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

                TroubleLog t = new TroubleLog();
                t.TroubleCode = "7777771";
                t.TroubleType = TROUBLETYPE.ERR;
                t.TroubleUnit = @"试剂条码";
                t.TroubleInfo = erinfo;
                //new ReagentState().TroubleLogSave().Save(t);
                mybatis.TroubleLogSave("TroubleLogSave", t);
                return("条码:" + reagentBracode + "不识别");
            }

            this.Disk     = disk;
            this.Position = pos;
            ReagentSettingsInfo newReagentSet = AnanlyeBarcode(b, reagentBracode);

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

            AssayProjectParamInfo a = mybatis.GetAssayProjectParamInfo(newReagentSet.ProjectName, newReagentSet.ReagentType) as AssayProjectParamInfo;

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

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

                    return("条码:" + reagentBracode + "装填失败");
                }
            }
            //检查该条码在试剂盘中是否存在
            ReagentSettingsInfo barrgtpos = mybatis.GetAssayALLReagentByBarcode(newReagentSet.Barcode);

            if (barrgtpos == null)
            {
                //newreagentPosition.AssayPara = "MR1";
            }
            else
            {
                this.RemoveOccupiedReagentInfo(barrgtpos);
                //newreagentPosition.AssayPara = barrgtpos.AssayPara;
            }
            ReagentSettingsInfo rgtpos = mybatis.GetAssayReagentByDisk(Disk, Position);

            if (rgtpos == null)
            {
            }
            else
            {
                this.RemoveOccupiedReagentInfo(rgtpos);
            }

            //List<CLItem> reagents = new RGTPOSManager().GetAssayALLReagent(newReagentSetInfo.Assay);
            //if (newReagentSetInfo.AssayPara == "R1")
            //{
            //    bool f1 = false;
            //    foreach (RGTPosition e in reagents)
            //    {
            //        if (e.AssayPara == "R1")
            //        {
            //            f1 = true;
            //            break;
            //        }
            //    }
            //    if (f1 == true)
            //    {
            //        newReagentSetInfo.AssayPara = "MR1";
            //    }
            //    else
            //    {
            //        newReagentSetInfo.AssayPara = "R1";
            //    }
            //}
            //if (newReagentSetInfo.AssayPara == "R2")
            //{
            //    bool f1 = false;
            //    foreach (RGTPosition e in reagents)
            //    {
            //        if (e.AssayPara == "R2")
            //        {
            //            f1 = true;
            //            break;
            //        }
            //    }
            //    if (f1 == true)
            //    {
            //        newReagentSetInfo.AssayPara = "MR2";
            //    }
            //    else
            //    {
            //        newReagentSetInfo.AssayPara = "R2";
            //    }
            //}

            //newReagentSetInfo.Disk = disk;
            newReagentSet.Pos = pos;

            //RGTPosition oldreagentPosition = new RGTPOSManager().Get(disk, pos);
            //if (oldreagentPosition != null)
            //{
            //    ReagentBarcode r = new ReagentBarcode();
            //    r.Barcode = oldreagentPosition.BarCode;
            //    r.ValidPercent = oldreagentPosition.ValidPercent;
            //    r.ExchangeDatetime = DateTime.Now;
            //    new ReagentBarcodeService().InsertReagentBarcode(r);
            //}

            ReagentBarcodeParam ReagentBarcode = mybatis.GetAllReagentBarParam(reagentBracode);

            if (ReagentBarcode == null)
            {
                if (disk == 1)
                {
                    newReagentSet.ValidPercent = 99;
                }
                else if (disk == 2)
                {
                    newReagentSet.ValidPercent2 = 99;
                }
            }
            else
            {
                if (disk == 1)
                {
                    newReagentSet.ValidPercent = ReagentBarcode.ValidPercent;
                }
                else if (disk == 2)
                {
                    newReagentSet.ValidPercent2 = ReagentBarcode.ValidPercent;
                }
            }

            mybatis.SaveReagentSettingInfo(disk, newReagentSet);
            new Task(new Action(() => { this.SaveOrUpReagentStateR1R2Info(newReagentSet); })).Start();

            TroubleLog t1 = new TroubleLog();

            t1.TroubleCode = "7777772";
            t1.TroubleType = TROUBLETYPE.WARN;
            t1.TroubleUnit = @"试剂条码";
            t1.TroubleInfo = "条码:" + reagentBracode + "加载成功";;
            mybatis.TroubleLogSave("TroubleLogSave", t1);

            return(null);
        }