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; }
}
}
}