BaseModel.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.IO;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Windows.Forms;
  8. using Tps_LQ_Transmitter.com;
  9. namespace Tps_LQ_Transmitter.models
  10. {
  11. /// <summary>
  12. /// 测试模板,对测试模板的基础类别
  13. /// </summary>
  14. public class BaseModel
  15. {
  16. /// <summary>
  17. /// 测试模板名称,测试指标配置表中的模板名称源自这个参数
  18. /// </summary>
  19. public string TemplateName { get; protected set; }
  20. public bool IsRuning { get; set; }
  21. public bool IsPassed { get; protected set; }
  22. public DateTime FinishedTime { get; protected set; }
  23. /// <summary>
  24. /// 这个测试项对应的显示界面,也可能是一个界面有多个测试项共用,取决于顶层的控制
  25. /// </summary>
  26. public UserControl UC { get; set; }
  27. /// <summary>
  28. /// 主程序
  29. /// </summary>
  30. public MainTps tps { get; set; }
  31. public virtual bool Run(TestNode parameters)
  32. {
  33. return false;
  34. }
  35. /// <summary>
  36. /// 开始测试
  37. /// </summary>
  38. /// <returns></returns>
  39. public virtual bool Start(TestNode parameters)
  40. {
  41. IsRuning = true;
  42. IsPassed = false;
  43. bool ok = Run(parameters);
  44. IsRuning = false;
  45. FinishedTime = DateTime.Now;
  46. return ok;
  47. // return true;
  48. }
  49. /// <summary>
  50. /// 停止测试
  51. /// </summary>
  52. /// <returns></returns>
  53. public virtual bool Stop()
  54. {
  55. IsRuning = false;
  56. return true;
  57. }
  58. public event DltShowMsg MessageEvent;
  59. protected void ShowMessage(MsgType msgType, string msg)
  60. {
  61. if (MessageEvent != null)
  62. {
  63. MessageEvent(msgType, msg);
  64. }
  65. if (msgType == MsgType.Error)
  66. {
  67. MessageBox.Show(msg);
  68. }
  69. }
  70. public void OpenExcel(string sheetname, out Spire.Xls.Workbook workbook, out Spire.Xls.Worksheet sheet)
  71. {
  72. Spire.Xls.Worksheet sheet1 = null;
  73. string productname;
  74. if (tps.Product.Contains('-'))
  75. {
  76. productname = tps.Product.Split('-')[0];
  77. }
  78. else
  79. {
  80. productname = tps.Product;
  81. }
  82. string ModelFile = "./发射机/" + productname + "/模板/" + tps.TestProject + "模板.xlsx";
  83. string subPath = "./发射机/" + productname + "/测试数据/" + tps.TestProject +"/";
  84. if (false == System.IO.Directory.Exists(subPath))
  85. {
  86. System.IO.Directory.CreateDirectory(subPath);
  87. }
  88. workbook = new Spire.Xls.Workbook();
  89. string FileName = subPath + tps.Serial + ".xlsx";
  90. if (File.Exists(FileName))
  91. {
  92. workbook.LoadFromFile(FileName);
  93. ShowMessage(MsgType.Info, string.Format("打开文件路径:{0}", FileName));
  94. sheet1 = workbook.Worksheets[sheetname];
  95. }
  96. else if (File.Exists(ModelFile))
  97. {
  98. workbook.LoadFromFile(ModelFile);
  99. ShowMessage(MsgType.Info, string.Format("打开文件路径:{0}", ModelFile));
  100. sheet1 = workbook.Worksheets["测试信息"];
  101. sheet1.Range["A2"].Value2 = tps.Serial;//序列号
  102. sheet1.Range["B2"].Value2 = tps.Tester;//检验员
  103. sheet1.Range["C2"].Value2 = DateTime.Now.Date.ToString();//日期
  104. sheet1.Range["D2"].Value2 = tps.Temperature;//温度
  105. sheet1.Range["E2"].Value2 = tps.Humidity;//湿度
  106. sheet1 = workbook.Worksheets[sheetname];
  107. }
  108. if (!File.Exists(ModelFile))
  109. {
  110. sheet1 = null;
  111. }
  112. sheet = sheet1;
  113. }
  114. public void WriteExcelData(Spire.Xls.Worksheet sheet, int row, int channel, string name, string lower, string upper, string val, string result)
  115. {
  116. int column = (channel - 1) * 6;
  117. sheet.Range[row + 2, 1 + column].Value2 = name;
  118. sheet.Range[row + 2, 2 + column].Value2 = lower;
  119. sheet.Range[row + 2, 3 + column].Value2 = upper;
  120. sheet.Range[row + 2, 4 + column].Value = val;
  121. sheet.Range[row + 2, 5 + column].Value2 = result;
  122. }
  123. public void SaveExcel(Spire.Xls.Workbook workbook)
  124. {
  125. string productname;
  126. if (tps.Product.Contains('-'))
  127. {
  128. productname = tps.Product.Split('-')[0];
  129. }
  130. else
  131. {
  132. productname = tps.Product;
  133. }
  134. string subPath = "./发射机/" + productname + "/测试数据 /" + tps.TestProject + "/";
  135. ShowMessage(MsgType.Info, string.Format("保存文件路径:{0}", subPath));
  136. string FileName = subPath + tps.Serial + ".xlsx";
  137. workbook.CalculateAllValue();
  138. workbook.SaveToFile(FileName);
  139. }
  140. #region 串口配置表
  141. /// <summary>
  142. /// 获取串口配置表
  143. /// </summary>
  144. /// <returns></returns>
  145. public MatchComPara LoadComWorkBook()
  146. {
  147. MatchComPara pars = new MatchComPara();
  148. string FileName = Path.Combine(Bundle.bundle.BundleDir, "config\\串口控制.xlsx");
  149. if (!File.Exists(FileName))
  150. {
  151. ShowMessage(MsgType.Error, "找不到串口控制.xlsx");
  152. return null;
  153. }
  154. Spire.Xls.Workbook workbook = new Spire.Xls.Workbook();
  155. workbook.LoadFromFile(FileName);
  156. //获取第一个工作表sheet1
  157. Spire.Xls.Worksheet sheet = workbook.Worksheets[0];
  158. int num = 0;
  159. int blankRows = 0;
  160. while (num++ < 200)
  161. {
  162. //索引从1开始
  163. string col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
  164. col1 = col1.Trim();
  165. if (string.IsNullOrEmpty(col1))
  166. {
  167. blankRows++;
  168. if (blankRows > 5)
  169. {
  170. //连续5个空行以上则退出
  171. break;
  172. }
  173. }
  174. else
  175. {
  176. blankRows = 0;
  177. }
  178. if (col1.Equals("序号"))
  179. {
  180. List<ComMatchParameter> ComTable = ReadParameters(sheet, num);
  181. foreach (var item in ComTable)
  182. {
  183. if (pars.ComParameters.ContainsKey(item.SN))
  184. {
  185. ShowMessage(MsgType.Error, string.Format("串口控制:{0} 存在同名参数:{1},无法重复添加参数", sheet.Name, item.SN));
  186. continue;
  187. }
  188. pars.ComParameters.Add(item.SN, item);
  189. }
  190. }
  191. }
  192. return pars;
  193. }
  194. public class MatchComPara
  195. {
  196. public Dictionary<string, ComMatchParameter> ComParameters;
  197. public MatchComPara()
  198. {
  199. ComParameters = new Dictionary<string, ComMatchParameter>();
  200. }
  201. public string GetComPort(string name)
  202. {
  203. if (string.IsNullOrEmpty(name))
  204. return null;
  205. if (this.ComParameters.ContainsKey(name) == false)
  206. return null;
  207. string val1 = this.ComParameters[name].ComPort.Trim();
  208. return val1;
  209. }
  210. public string GetThirdByte(string name)
  211. {
  212. string val1 = this.ComParameters[name].ThirdByte.Trim();
  213. return val1;
  214. }
  215. public string GetFourthByte(string name)
  216. {
  217. string val2 = this.ComParameters[name].FourthByte.Trim();
  218. return val2;
  219. }
  220. public string Getfreqpoint(string name)
  221. {
  222. string val2 = this.ComParameters[name].freqpoint.Trim();
  223. return val2;
  224. }
  225. }
  226. List<ComMatchParameter> ReadParameters(Spire.Xls.Worksheet sheet, int rowIndex)
  227. {
  228. List<ComMatchParameter> ModulationTable = new List<ComMatchParameter>();
  229. string col1 = sheet.Range[rowIndex, 1].Value2 != null ? sheet.Range[rowIndex, 1].Value2.ToString() : "";
  230. string col2 = sheet.Range[rowIndex, 2].Value2 != null ? sheet.Range[rowIndex, 2].Value2.ToString() : "";
  231. string col3 = sheet.Range[rowIndex, 3].Value2 != null ? sheet.Range[rowIndex, 3].Value2.ToString() : "";
  232. string col4 = sheet.Range[rowIndex, 4].Value2 != null ? sheet.Range[rowIndex, 4].Value2.ToString() : "";
  233. string col5 = sheet.Range[rowIndex, 5].Value2 != null ? sheet.Range[rowIndex, 5].Value2.ToString() : "";
  234. if (!(col1 == "序号" && col2 == "串口号" && col3 == "第3个字节" && col4 == "第4个字节" && col5 == "频点(MHz)"))
  235. {
  236. ShowMessage(MsgType.Error, "'串口控制'行首标题位置和格式不正确");
  237. return ModulationTable;
  238. }
  239. int num = rowIndex;
  240. //默认最多30行
  241. while (num++ < rowIndex + 100)
  242. {
  243. col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
  244. col2 = sheet.Range[num, 2].Value2 != null ? sheet.Range[num, 2].Value2.ToString() : "";
  245. col3 = sheet.Range[num, 3].Value2 != null ? sheet.Range[num, 3].Value2.ToString() : "";
  246. col4 = sheet.Range[num, 4].Value2 != null ? sheet.Range[num, 4].Value2.ToString() : "";
  247. col5 = sheet.Range[num, 5].Value2 != null ? sheet.Range[num, 5].Value2.ToString() : "";
  248. if (string.IsNullOrEmpty(col1))
  249. {
  250. break;
  251. }
  252. ComMatchParameter ObjModulation = new ComMatchParameter();
  253. ObjModulation.SN = col1;
  254. ObjModulation.ComPort = col2;
  255. ObjModulation.ThirdByte = col3;
  256. ObjModulation.FourthByte = col4;
  257. ObjModulation.freqpoint = col5;
  258. ModulationTable.Add(ObjModulation);
  259. }
  260. return ModulationTable;
  261. }
  262. /// <summary>
  263. /// 串口控制4个对应项
  264. /// </summary>
  265. public class ComMatchParameter
  266. {
  267. /// <summary>
  268. /// 序号
  269. /// </summary>
  270. public string SN { get; set; }
  271. /// <summary>
  272. /// 串口号
  273. /// </summary>
  274. public string ComPort { get; set; }
  275. /// <summary>
  276. /// 第3个字节
  277. /// </summary>
  278. public string ThirdByte { get; set; }
  279. /// <summary>
  280. /// 第4个字节
  281. /// </summary>
  282. public string FourthByte { get; set; }
  283. /// <summary>
  284. /// 频点
  285. /// </summary>
  286. public string freqpoint { get; set; }
  287. }
  288. #endregion
  289. public class DataType
  290. {
  291. /// <summary>
  292. /// 测试名称
  293. /// </summary>
  294. public string Test_name { set; get; }
  295. /// <summary>
  296. /// 指标下限
  297. /// </summary>
  298. public double Lower { set; get; }
  299. /// <summary>
  300. /// 指标上限
  301. /// </summary>
  302. public double Upper { set; get; }
  303. /// <summary>
  304. /// 测试值
  305. /// </summary>
  306. public double TestVal { set; get; }
  307. /// <summary>
  308. /// 判断结果
  309. /// </summary>
  310. public string Result { set; get; }
  311. }
  312. }
  313. }