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); }
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; } } }
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); }
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; } } }
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); }
void DoSaveAssayRunPara(ReagentItem ReagentItem) { //加载测试参数 AssayRunPara a = new AssayRunPara(); a.Name = ReagentItem.ItemName; a.FullName = ReagentItem.LongName; //分析方法 a.AnalyzeMethod = ReagentItem.AnalyzeMethod; //第一测试点S a.FirstPointS = ReagentItem.FirstPointS; //第一测试点E a.FirstPointE = ReagentItem.FirstPointE; //第二测试点S a.SecondPointS = ReagentItem.SecondPointS; //第二测试点E a.SecondPointE = ReagentItem.SecondPointE; //主波长 a.MainWaveLength = ReagentItem.MainWaveLength; //次波长 a.SubWaveLength = ReagentItem.SubWaveLength; //测试次数 a.DoCount = ReagentItem.DoCount; //质控间隔 a.QCSpace = ReagentItem.QCSpace; //定标次数 a.SDTCount = ReagentItem.SDTCount; //试剂1体积 a.R1Vol = ReagentItem.R1Vol; //试剂2体积 a.R2Vol = ReagentItem.R2Vol; //样本反应体积 a.SerumIncreaseVol.VolPre = ReagentItem.IncreaseVol; a.SerumIncreaseVol.VolAft = 0; a.SerumIncreaseVol.VolDil = 0; a.SerumNormalVol.VolPre = ReagentItem.NormalVol; a.SerumNormalVol.VolAft = 0; a.SerumNormalVol.VolDil = 0; a.SerumDecreaseVol.VolPre = ReagentItem.DecreaseVol; a.SerumDecreaseVol.VolAft = 0; a.SerumDecreaseVol.VolDil = 0; a.UrineIncreaseVol.VolPre = ReagentItem.IncreaseVol; a.UrineIncreaseVol.VolAft = 0; a.UrineIncreaseVol.VolDil = 0; a.UrineNormalVol.VolPre = ReagentItem.NormalVol; a.UrineNormalVol.VolAft = 0; a.UrineNormalVol.VolDil = 0; a.UrineDecreaseVol.VolPre = ReagentItem.DecreaseVol; a.UrineDecreaseVol.VolAft = 0; a.UrineDecreaseVol.VolDil = 0; a.SDTVol.VolPre = ReagentItem.SDTVol; a.SDTVol.VolAft = 0; a.SDTVol.VolDil = 0; //反应方向 a.ReacteDirect = ReagentItem.ReacteDirect; //搅拌强度 a.Stiring1Force = ReagentItem.Stiring1Force; a.Stiring2Force = ReagentItem.Stiring2Force; //显示顺序 int m = new RGTPOSManager().GetReagentMode(); AssayRunPara a1 = new AssayRunParaService().Get(ReagentItem.ItemName) as AssayRunPara; if (a1 != null && a1.DisplaySQ <= 0) { new AssayRunParaService().Delete(a1.DisplaySQ); } a1 = new AssayRunParaService().Get(ReagentItem.ItemName) as AssayRunPara; if (a1 == null) { for (int i = 1; i <= 120; i++) { AssayRunPara e = new AssayRunParaService().Get(i) as AssayRunPara; if (e == null) { if (m == 3) { List <int> itemnumbers = new RGTPOSManager().GetReagentNumbers(); bool isflag = false; foreach (int ie in itemnumbers) { if (ie == i) { isflag = true; } } if (isflag == true) { continue; } else { a.DisplaySQ = i; break; } } if (m == 2) { a.DisplaySQ = i; break; } } } } else { a.DisplaySQ = a1.DisplaySQ; } new AssayRunParaService().Delete(ReagentItem.ItemName); new AssayRunParaService().Delete(a.DisplaySQ); new AssayRunParaService().Save(a); }
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); }