using System; using System.Collections.Generic; using System.Linq; using System.IO; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Tps_LQ_Transmitter.com; namespace Tps_LQ_Transmitter.models { /// /// 测试模板,对测试模板的基础类别 /// public class BaseModel { /// /// 测试模板名称,测试指标配置表中的模板名称源自这个参数 /// public string TemplateName { get; protected set; } public bool IsRuning { get; set; } public bool IsPassed { get; protected set; } public DateTime FinishedTime { get; protected set; } /// /// 这个测试项对应的显示界面,也可能是一个界面有多个测试项共用,取决于顶层的控制 /// public UserControl UC { get; set; } /// /// 主程序 /// public MainTps tps { get; set; } public virtual bool Run(TestNode parameters) { return false; } /// /// 开始测试 /// /// public virtual bool Start(TestNode parameters) { IsRuning = true; IsPassed = false; bool ok = Run(parameters); IsRuning = false; FinishedTime = DateTime.Now; return ok; // return true; } /// /// 停止测试 /// /// public virtual bool Stop() { IsRuning = false; return true; } public event DltShowMsg MessageEvent; protected void ShowMessage(MsgType msgType, string msg) { if (MessageEvent != null) { MessageEvent(msgType, msg); } if (msgType == MsgType.Error) { MessageBox.Show(msg); } } public void OpenExcel(string sheetname, out Spire.Xls.Workbook workbook, out Spire.Xls.Worksheet sheet) { Spire.Xls.Worksheet sheet1 = null; string productname; if (tps.Product.Contains('-')) { productname = tps.Product.Split('-')[0]; } else { productname = tps.Product; } string ModelFile = "./发射机/" + productname + "/模板/" + tps.TestProject + "模板.xlsx"; string subPath = "./发射机/" + productname + "/测试数据/" + tps.TestProject +"/"; if (false == System.IO.Directory.Exists(subPath)) { System.IO.Directory.CreateDirectory(subPath); } workbook = new Spire.Xls.Workbook(); string FileName = subPath + tps.Serial + ".xlsx"; if (File.Exists(FileName)) { workbook.LoadFromFile(FileName); ShowMessage(MsgType.Info, string.Format("打开文件路径:{0}", FileName)); sheet1 = workbook.Worksheets[sheetname]; } else if (File.Exists(ModelFile)) { workbook.LoadFromFile(ModelFile); ShowMessage(MsgType.Info, string.Format("打开文件路径:{0}", ModelFile)); sheet1 = workbook.Worksheets["测试信息"]; sheet1.Range["A2"].Value2 = tps.Serial;//序列号 sheet1.Range["B2"].Value2 = tps.Tester;//检验员 sheet1.Range["C2"].Value2 = DateTime.Now.Date.ToString();//日期 sheet1.Range["D2"].Value2 = tps.Temperature;//温度 sheet1.Range["E2"].Value2 = tps.Humidity;//湿度 sheet1 = workbook.Worksheets[sheetname]; } if (!File.Exists(ModelFile)) { sheet1 = null; } sheet = sheet1; } public void WriteExcelData(Spire.Xls.Worksheet sheet, int row, int channel, string name, string lower, string upper, string val, string result) { int column = (channel - 1) * 6; sheet.Range[row + 2, 1 + column].Value2 = name; sheet.Range[row + 2, 2 + column].Value2 = lower; sheet.Range[row + 2, 3 + column].Value2 = upper; sheet.Range[row + 2, 4 + column].Value = val; sheet.Range[row + 2, 5 + column].Value2 = result; } public void SaveExcel(Spire.Xls.Workbook workbook) { string productname; if (tps.Product.Contains('-')) { productname = tps.Product.Split('-')[0]; } else { productname = tps.Product; } string subPath = "./发射机/" + productname + "/测试数据 /" + tps.TestProject + "/"; ShowMessage(MsgType.Info, string.Format("保存文件路径:{0}", subPath)); string FileName = subPath + tps.Serial + ".xlsx"; workbook.CalculateAllValue(); workbook.SaveToFile(FileName); } #region 串口配置表 /// /// 获取串口配置表 /// /// public MatchComPara LoadComWorkBook() { MatchComPara pars = new MatchComPara(); string FileName = Path.Combine(Bundle.bundle.BundleDir, "config\\串口控制.xlsx"); if (!File.Exists(FileName)) { ShowMessage(MsgType.Error, "找不到串口控制.xlsx"); return null; } Spire.Xls.Workbook workbook = new Spire.Xls.Workbook(); workbook.LoadFromFile(FileName); //获取第一个工作表sheet1 Spire.Xls.Worksheet sheet = workbook.Worksheets[0]; int num = 0; int blankRows = 0; while (num++ < 200) { //索引从1开始 string col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : ""; col1 = col1.Trim(); if (string.IsNullOrEmpty(col1)) { blankRows++; if (blankRows > 5) { //连续5个空行以上则退出 break; } } else { blankRows = 0; } if (col1.Equals("序号")) { List ComTable = ReadParameters(sheet, num); foreach (var item in ComTable) { if (pars.ComParameters.ContainsKey(item.SN)) { ShowMessage(MsgType.Error, string.Format("串口控制:{0} 存在同名参数:{1},无法重复添加参数", sheet.Name, item.SN)); continue; } pars.ComParameters.Add(item.SN, item); } } } return pars; } public class MatchComPara { public Dictionary ComParameters; public MatchComPara() { ComParameters = new Dictionary(); } public string GetComPort(string name) { if (string.IsNullOrEmpty(name)) return null; if (this.ComParameters.ContainsKey(name) == false) return null; string val1 = this.ComParameters[name].ComPort.Trim(); return val1; } public string GetThirdByte(string name) { string val1 = this.ComParameters[name].ThirdByte.Trim(); return val1; } public string GetFourthByte(string name) { string val2 = this.ComParameters[name].FourthByte.Trim(); return val2; } public string Getfreqpoint(string name) { string val2 = this.ComParameters[name].freqpoint.Trim(); return val2; } } List ReadParameters(Spire.Xls.Worksheet sheet, int rowIndex) { List ModulationTable = new List(); string col1 = sheet.Range[rowIndex, 1].Value2 != null ? sheet.Range[rowIndex, 1].Value2.ToString() : ""; string col2 = sheet.Range[rowIndex, 2].Value2 != null ? sheet.Range[rowIndex, 2].Value2.ToString() : ""; string col3 = sheet.Range[rowIndex, 3].Value2 != null ? sheet.Range[rowIndex, 3].Value2.ToString() : ""; string col4 = sheet.Range[rowIndex, 4].Value2 != null ? sheet.Range[rowIndex, 4].Value2.ToString() : ""; string col5 = sheet.Range[rowIndex, 5].Value2 != null ? sheet.Range[rowIndex, 5].Value2.ToString() : ""; if (!(col1 == "序号" && col2 == "串口号" && col3 == "第3个字节" && col4 == "第4个字节" && col5 == "频点(MHz)")) { ShowMessage(MsgType.Error, "'串口控制'行首标题位置和格式不正确"); return ModulationTable; } int num = rowIndex; //默认最多30行 while (num++ < rowIndex + 100) { col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : ""; col2 = sheet.Range[num, 2].Value2 != null ? sheet.Range[num, 2].Value2.ToString() : ""; col3 = sheet.Range[num, 3].Value2 != null ? sheet.Range[num, 3].Value2.ToString() : ""; col4 = sheet.Range[num, 4].Value2 != null ? sheet.Range[num, 4].Value2.ToString() : ""; col5 = sheet.Range[num, 5].Value2 != null ? sheet.Range[num, 5].Value2.ToString() : ""; if (string.IsNullOrEmpty(col1)) { break; } ComMatchParameter ObjModulation = new ComMatchParameter(); ObjModulation.SN = col1; ObjModulation.ComPort = col2; ObjModulation.ThirdByte = col3; ObjModulation.FourthByte = col4; ObjModulation.freqpoint = col5; ModulationTable.Add(ObjModulation); } return ModulationTable; } /// /// 串口控制4个对应项 /// public class ComMatchParameter { /// /// 序号 /// public string SN { get; set; } /// /// 串口号 /// public string ComPort { get; set; } /// /// 第3个字节 /// public string ThirdByte { get; set; } /// /// 第4个字节 /// public string FourthByte { get; set; } /// /// 频点 /// public string freqpoint { get; set; } } #endregion public class DataType { /// /// 测试名称 /// public string Test_name { set; get; } /// /// 指标下限 /// public double Lower { set; get; } /// /// 指标上限 /// public double Upper { set; get; } /// /// 测试值 /// public double TestVal { set; get; } /// /// 判断结果 /// public string Result { set; get; } } } }