/// <summary> /// 写入激光波数到仪器 /// </summary> /// <param name="waveNum"></param> /// <returns></returns> public override bool?SetLaserWavelength(double curPeak, double targetPeak, ref double curLaser) { double?curLwn = GetLaserWavelength(); if (!curLwn.HasValue) { return(null); } curLaser = 10000 / (double)curLwn * curPeak / targetPeak; double write = 10000 / curLaser; OpusCMD334.OpusCommand command = new OpusCMD334.OpusCommand(); if (!command.Command("SendCommand(0, {UNI='xwn=" + write.ToString() + "@\"' })")) { ErrorString = command.ErrorDesc; return(null); } bool?result = null; //重启仪器 System.Windows.Application.Current.Dispatcher.Invoke(new Action(() => { new WebBrowser().Navigate("http://" + IpAddress + "/config/resetpage.htm?Sub=RESET+INSTRUMENT"); Thread.Sleep(3000); //等待仪器重启 ProcessWaitDialog waitDialog = new ProcessWaitDialog((ProcessWaitDialog.SetProcessAndMsgDeletage callBack) => { int i = 0; string str = ""; while (true) { i++; for (int j = 0; j <= i % 6; j++) { str += "."; } callBack("Please Wait", int.MaxValue, int.MaxValue, "Reset Instrument Now" + str, false); var html = DownloadWebPage("http://" + IpAddress + "/config/report.htm"); if (!string.IsNullOrEmpty(html)) { break; } System.Threading.Thread.Sleep(500); str = ""; } return(true); }); if (Application.Current.Windows.Count > 1) { waitDialog.Owner = Application.Current.Windows[Application.Current.Windows.Count - 2]; } else { waitDialog.Owner = System.Windows.Application.Current.MainWindow; } result = waitDialog.ShowDialog() == true; })); return(result); }
/// <summary> /// 扫描背景 /// </summary> private void btnBackground_Click(object sender, RoutedEventArgs e) { try { if (Common.CommonMethod.QuestionMsgBox("请确认背景测量标样放置到测量台上") == false) { return; } if (!Directory.Exists(SettingData.settingData.runing_para.savePath)) { throw new Exception("找不到文件保存路径:" + SettingData.settingData.runing_para.savePath + ", 请在系统设置里面重新指定"); } string backFile = Path.Combine(SettingData.settingData.runing_para.savePath, "Background", DateTime.Now.ToString("yyyy-MM-dd")); if (!Directory.Exists(backFile)) { Directory.CreateDirectory(backFile); } backFile = Path.Combine(backFile, "Background" + DateTime.Now.ToString("yyyy-MM-dd HH_mm_ss") + ".spc"); //创建扫描任务并显示扫描等待窗口,开始扫描 curScanTaskInfo = new ScanTaskInfo(SettingData.settingData.runing_para.scanPara, true, backFile); MainWindow mainWnd = App.Current.MainWindow as MainWindow; ProcessWaitDialog waitDlg = new ProcessWaitDialog(ScanSampleTask, "取消背景扫描"); waitDlg.Owner = App.Current.MainWindow; if (waitDlg.ShowDialog() == false) { mainWnd.BackgroundScaned = false; Common.CommonMethod.ErrorMsgBox(curScanTaskInfo.ErrorString); } else { mainWnd.BackgroundScaned = true; } } catch (Exception ex) { Common.CommonMethod.ErrorMsgBox(ex.Message); } }
/// <summary> /// 重新分析光谱 /// </summary> private void btnReIdentify_Click(object sender, RoutedEventArgs e) { ModelSelector modelDlg = new ModelSelector(); modelDlg.Owner = App.Current.MainWindow; if (modelDlg.ShowDialog() == true) { //获得当前选择的模型 curModel = modelDlg.GetSelectedModel(); //获取需要重新分析的光谱 reIdentifyItems = listFiles.GetSelectedItems(); if (reIdentifyItems.Count > 0) { //调用等待窗口 Common.ProcessWaitDialog waitdlg = new ProcessWaitDialog(ProcessTask, null); waitdlg.Owner = App.Current.MainWindow; if (waitdlg.ShowDialog() == false) { Common.CommonMethod.ErrorMsgBox(ErrorString); } } } }
private string ScanSpectrum(bool isBackground) { if (isBackground && !(bool)VspecInstrument.IsIntegratingSphere) { if (Common.CommonMethod.QuestionMsgBox("请确认背景测量标样放置到测量台上") == false) { return(null); } } Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog(); dlg.Filter = "仪器光谱(*.SPC)|*.SPC"; dlg.Title = "保存光谱文件"; if (dlg.ShowDialog() == true) { //创建扫描任务并显示扫描等待窗口,开始扫描 curScanTaskInfo = new ScanTaskInfo(curScanPara, isBackground, dlg.FileName); ProcessWaitDialog waitDlg = new ProcessWaitDialog(ScanSampleTask, "取消扫描"); waitDlg.Owner = App.Current.MainWindow; // bool successed = (bool) waitDlg.ShowDialog(); if (isBackground) { MainWindow mainWnd = App.Current.MainWindow as MainWindow; mainWnd.BackgroundScaned = curScanTaskInfo.scanSuccessed; } if (!curScanTaskInfo.scanSuccessed) { Common.CommonMethod.ErrorMsgBox(curScanTaskInfo.ErrorString); return(null); } else { if (isBackground) { backFile = dlg.FileName; } if (File.Exists(backFile) && !isBackground) { Ai.Hong.CommonLibrary.SpecFileFormatDouble sampleData1 = new Ai.Hong.CommonLibrary.SpecFileFormatDouble(); Ai.Hong.CommonLibrary.SpecFileFormatDouble sampleData2 = new Ai.Hong.CommonLibrary.SpecFileFormatDouble(); if (sampleData1.ReadFile(backFile) == false) { MessageBox.Show("读取光谱错误:" + backFile + " " + sampleData1.ErrorString); return(null); } if (sampleData2.ReadFile(dlg.FileName) == false) { MessageBox.Show("读取光谱错误:" + dlg.FileName + " " + sampleData2.ErrorString); return(null); } if (sampleData1.YDatas.Length != sampleData2.YDatas.Length) { MessageBox.Show("样品和背景不一致,请重新扫描背景!"); return(null); } //计算样品1和样品2比值,得到100%线 for (int index = 0; index < sampleData1.Parameter.dataCount; index++) { if (sampleData2.YDatas[index] == 0) { sampleData2.YDatas[index] = 1; } else { sampleData2.YDatas[index] = Math.Abs(sampleData2.YDatas[index] / sampleData1.YDatas[index]); } } float[] trData = new float[sampleData2.YDatas.Length]; for (int index = 0; index < trData.Length; index++) { trData[index] = (float)Math.Log10(1 / sampleData2.YDatas[index]); } Ai.Hong.CommonLibrary.SPCFile.SaveFile(dlg.FileName, trData, sampleData2.Parameter); } return(dlg.FileName); } } else { return(null); } }
private void btnDetect_Click(object sender, RoutedEventArgs e) { try { if (btnDetect.Text == "新增样品") { SetDrugInfoCtrlEnable(true); btnDetect.Text = "开始检定"; /* * DrugInfo newdrug = new DrugInfo(); * newdrug.licenseCode = "国药准字H20030863"; * newdrug.identOperator = drugInfo.identOperator; * newdrug.scanType = drugInfo.scanType; * newdrug.licenseType = drugInfo.licenseType; * newdrug.identThresold = drugInfo.identThresold; * newdrug.validMonth = drugInfo.validMonth; * newdrug.sampleNumber = drugInfo.sampleNumber; * newdrug.batchNumber = drugInfo.batchNumber; * newdrug.productTime = drugInfo.productTime; * * if (curAnalyteModel != null) * newdrug.identThresold = curAnalyteModel.thresold; */ DrugInfo newdrug = null; if (drugInfo != null) { newdrug = drugInfo.Clone(); } else { newdrug = new DrugInfo(); newdrug.licenseCode = "国药准字"; newdrug.productTime = new DateTime(2008, 1, 1); newdrug.identUnit = SettingData.settingData.runing_para.unitName; newdrug.validMonth = 48; newdrug.identThresold = 0.97; if (SettingData.settingData.dictionary.scanTypes.Count > 0) { newdrug.scanType = SettingData.settingData.dictionary.scanTypes[0]; } if (SettingData.settingData.dictionary.operators.Count > 0) { newdrug.scanType = SettingData.settingData.dictionary.operators[0]; } if (SettingData.settingData.dictionary.licenseTypes.Count > 0) { newdrug.scanType = SettingData.settingData.dictionary.licenseTypes[0]; } if (SettingData.settingData.dictionary.forms.Count > 0) { newdrug.scanType = SettingData.settingData.dictionary.forms[0]; } } drugInfo = newdrug; gridDrugInfo.DataContext = drugInfo; } else { //检查信息是否有填充 for (int i = 0; i < CtrlToFields.Length; i++) { if (CtrlToFields[i].displayName != "备注" && (CtrlToFields[i].ctrlElement is TextBox || CtrlToFields[i].ctrlElement is ComboBox)) { bool isempty = false; if (CtrlToFields[i].ctrlElement is TextBox) { isempty = CommonMethod.IsEmpty((CtrlToFields[i].ctrlElement as TextBox).Text); } else if (CtrlToFields[i].ctrlElement is ComboBox) { isempty = CommonMethod.IsEmpty((CtrlToFields[i].ctrlElement as ComboBox).Text); } if (isempty) { CtrlToFields[i].ctrlElement.Focus(); throw new Exception("请输入:" + CtrlToFields[i].displayName); } } } if (drugInfo.productTime > DateTime.Now || (DateTime.Now - drugInfo.productTime).Days > 360 * 20) { txtProductTime.Focus(); throw new Exception("请输入正确的生产日期"); } if (drugInfo.validMonth <= 0) { txtValidMonth.Focus(); throw new Exception("请输入正确的有效期"); } if (drugInfo.identThresold <= 0) { txtIdentThresold.Focus(); throw new Exception("请输入正确的阈值"); } if (checkNotAnalyze.IsChecked != true && curAnalyteModel == null) { throw new Exception("请选择分析模型"); } string sampleFile = null; //使用模拟方式,从文件中调入光谱 if (SettingData.settingData.runing_para.isSimulator) { Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); dlg.Filter = "光谱文件|*.spc"; dlg.Multiselect = false; if (dlg.ShowDialog() == true) { sampleFile = dlg.FileName; } } else { if (!System.IO.Directory.Exists(SettingData.settingData.runing_para.savePath)) { throw new Exception("找不到文件保存路径:" + SettingData.settingData.runing_para.savePath + ", 请在系统设置里面重新指定"); } /* * //样品编号_通用名_商品名_剂型_规格_厂商_批号_生产日期_有效期_测量方式_仪器编号_检测单位_检测时间 * sampleFile = MaxString(drugInfo.sampleNumber, 10) + "_" + drugInfo.chemicalName + "_" + drugInfo.commercialName + "_" + * drugInfo.form + "_" + drugInfo.specification + "_" + MaxString(drugInfo.productUnit, 10) + "_" + * MaxString(drugInfo.batchNumber, 10) + "_" + drugInfo.productTime.ToString("yyyyMMdd") + "_" + drugInfo.validMonth + * "_" + drugInfo.scanType + "_" + drugInfo.identInstrumentID + "_" + MaxString(drugInfo.identUnit, 10) + * "_" + drugInfo.identTime.ToString("yyyyMMddHHmmss") + ".SPC"; */ sampleFile = MaxString(drugInfo.sampleNumber, 10) + "_" + drugInfo.chemicalName + "_" + MaxString(drugInfo.productUnit, 10) + "_" + drugInfo.licenseCode + "_" + drugInfo.identTime.ToString("yyyyMMddHHmmss"); sampleFile = Common.CommonMethod.GetValidFilename(sampleFile, ""); sampleFile = sampleFile.Replace('.', '-') + ".SPC"; string pathstr = GetFileSavePath(); if (pathstr == null) { throw new Exception("不能创建目录:" + pathstr); } sampleFile = System.IO.Path.Combine(pathstr, sampleFile); //创建扫描任务并显示扫描等待窗口,开始扫描 curScanTaskInfo = new ScanTaskInfo(SettingData.settingData.runing_para.scanPara, false, sampleFile); ProcessWaitDialog waitDlg = new ProcessWaitDialog(ScanSampleTask, "取消样品扫描"); waitDlg.Owner = App.Current.MainWindow; if (waitDlg.ShowDialog() == false) { throw new Exception(curScanTaskInfo.ErrorString); } } if (checkNotAnalyze.IsChecked != true) { //用相关系数法分析光谱 drugInfo.identValue = DrugAnalyte.CorCoeffAnalyte(curAnalyteModel, sampleFile); //保留小数点后5位 drugInfo.identValue = Math.Round(drugInfo.identValue, 5); if (drugInfo.identValue < 0) { throw new Exception(DrugAnalyte.ErrorString); } //填写检测信息 drugInfo.filename = sampleFile; drugInfo.identTime = DateTime.Now; drugInfo.identUnit = SettingData.settingData.runing_para.unitName; drugInfo.identInstrumentID = SettingData.settingData.runing_para.serialNo; //listSampleFiles.InitDisplayData(drugInfo); drugInfo.isChecked = true; // 显示光谱图像 drugInfo.identResult = drugInfo.identValue < curAnalyteModel.thresold ? EnumIdentResult.FAULT : EnumIdentResult.OK; drugInfo.identModel = curAnalyteModel.licenseCode; drugInfo.identMethod = EnumIdentifyMethod.Correlation; //保存检测结果 Common.CommonMethod.WriteDrugInfo(drugInfo); } else { //填写检测信息 drugInfo.filename = sampleFile; drugInfo.identTime = DateTime.Now; drugInfo.identUnit = SettingData.settingData.runing_para.unitName; drugInfo.identInstrumentID = SettingData.settingData.runing_para.serialNo; //listSampleFiles.InitDisplayData(drugInfo); drugInfo.isChecked = true; // 显示光谱图像 drugInfo.identValue = 0; drugInfo.identResult = EnumIdentResult.UNKNOWN; drugInfo.identModel = null; drugInfo.identMethod = EnumIdentifyMethod.Correlation; } //加入到结果列表 //读取光谱数据 if (drugInfo.fileData == null) { drugInfo.fileData = new Ai.Hong.CommonLibrary.SpecFileFormatDouble(); drugInfo.fileData.ReadFile(drugInfo.filename); drugInfo.color = Ai.Hong.CommonLibrary.spectrumDisplayInfo.GetDisplayColor(resultDatas.Count); } resultDatas.Add(drugInfo); listSampleFiles.SelectItem(drugInfo); //准备输入新的药品信息 SetDrugInfoCtrlEnable(false); btnDetect.Text = "新增样品"; } } catch (Exception ex) { CommonMethod.ErrorMsgBox(ex.Message); } }