BaseModel.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  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. }
  66. public void OpenExcel(string sheetname, out Spire.Xls.Workbook workbook, out Spire.Xls.Worksheet sheet)
  67. {
  68. Spire.Xls.Worksheet sheet1 = null;
  69. string productname;
  70. if (tps.Product.Contains('-'))
  71. {
  72. productname = tps.Product.Split('-')[0];
  73. }
  74. else
  75. {
  76. productname = tps.Product;
  77. }
  78. string ModelFile = "F:/发射机/" + productname + "/模板/" + tps.TestProject + "模板.xlsx";
  79. string subPath = "F:/发射机/" + productname + "/测试数据/" + tps.TestProject +"/";
  80. if (false == System.IO.Directory.Exists(subPath))
  81. {
  82. System.IO.Directory.CreateDirectory(subPath);
  83. }
  84. workbook = new Spire.Xls.Workbook();
  85. string FileName = subPath + tps.Serial + ".xlsx";
  86. if (File.Exists(FileName))
  87. {
  88. workbook.LoadFromFile(FileName);
  89. sheet1 = workbook.Worksheets[sheetname];
  90. }
  91. else if (File.Exists(ModelFile))
  92. {
  93. workbook.LoadFromFile(ModelFile);
  94. sheet1 = workbook.Worksheets["测试信息"];
  95. sheet1.Range["A2"].Value2 = tps.Serial;//序列号
  96. sheet1.Range["B2"].Value2 = tps.Tester;//检验员
  97. sheet1.Range["C2"].Value2 = DateTime.Now.Date.ToString();//日期
  98. sheet1.Range["D2"].Value2 = tps.Temperature;//温度
  99. sheet1.Range["E2"].Value2 = tps.Humidity;//湿度
  100. sheet1 = workbook.Worksheets[sheetname];
  101. }
  102. if (!File.Exists(ModelFile))
  103. {
  104. sheet1 = null;
  105. }
  106. sheet = sheet1;
  107. }
  108. public void WriteExcelData(Spire.Xls.Worksheet sheet, int row, int channel, string name, string lower, string upper, string val, string result)
  109. {
  110. int column = (channel - 1) * 6;
  111. sheet.Range[row + 2, 1 + column].Value2 = name;
  112. sheet.Range[row + 2, 2 + column].Value2 = lower;
  113. sheet.Range[row + 2, 3 + column].Value2 = upper;
  114. sheet.Range[row + 2, 4 + column].Value = val;
  115. sheet.Range[row + 2, 5 + column].Value2 = result;
  116. }
  117. public void SaveExcel(Spire.Xls.Workbook workbook)
  118. {
  119. string productname;
  120. if (tps.Product.Contains('-'))
  121. {
  122. productname = tps.Product.Split('-')[0];
  123. }
  124. else
  125. {
  126. productname = tps.Product;
  127. }
  128. string subPath = "F:/发射机/" + productname + "/测试数据 /" + tps.TestProject + "/";
  129. string FileName = subPath + tps.Serial + ".xlsx";
  130. workbook.CalculateAllValue();
  131. workbook.SaveToFile(FileName);
  132. }
  133. #region 串口配置表
  134. /// <summary>
  135. /// 获取串口配置表
  136. /// </summary>
  137. /// <returns></returns>
  138. public MatchComPara LoadComWorkBook()
  139. {
  140. MatchComPara pars = new MatchComPara();
  141. string FileName = Path.Combine(Bundle.bundle.BundleDir, "config\\串口控制.xlsx");
  142. if (!File.Exists(FileName))
  143. {
  144. ShowMessage(MsgType.Error, "找不到串口控制.xlsx");
  145. return null;
  146. }
  147. Spire.Xls.Workbook workbook = new Spire.Xls.Workbook();
  148. workbook.LoadFromFile(FileName);
  149. //获取第一个工作表sheet1
  150. Spire.Xls.Worksheet sheet = workbook.Worksheets[0];
  151. int num = 0;
  152. int blankRows = 0;
  153. while (num++ < 200)
  154. {
  155. //索引从1开始
  156. string col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
  157. col1 = col1.Trim();
  158. if (string.IsNullOrEmpty(col1))
  159. {
  160. blankRows++;
  161. if (blankRows > 5)
  162. {
  163. //连续5个空行以上则退出
  164. break;
  165. }
  166. }
  167. else
  168. {
  169. blankRows = 0;
  170. }
  171. if (col1.Equals("序号"))
  172. {
  173. List<ComMatchParameter> ComTable = ReadParameters(sheet, num);
  174. foreach (var item in ComTable)
  175. {
  176. if (pars.ComParameters.ContainsKey(item.SN))
  177. {
  178. ShowMessage(MsgType.Error, string.Format("串口控制:{0} 存在同名参数:{1},无法重复添加参数", sheet.Name, item.SN));
  179. continue;
  180. }
  181. pars.ComParameters.Add(item.SN, item);
  182. }
  183. }
  184. }
  185. return pars;
  186. }
  187. public class MatchComPara
  188. {
  189. public Dictionary<string, ComMatchParameter> ComParameters;
  190. public MatchComPara()
  191. {
  192. ComParameters = new Dictionary<string, ComMatchParameter>();
  193. }
  194. public string GetComPort(string name)
  195. {
  196. if (string.IsNullOrEmpty(name))
  197. return null;
  198. if (this.ComParameters.ContainsKey(name) == false)
  199. return null;
  200. string val1 = this.ComParameters[name].ComPort.Trim();
  201. return val1;
  202. }
  203. public string GetThirdByte(string name)
  204. {
  205. string val1 = this.ComParameters[name].ThirdByte.Trim();
  206. return val1;
  207. }
  208. public string GetFourthByte(string name)
  209. {
  210. string val2 = this.ComParameters[name].FourthByte.Trim();
  211. return val2;
  212. }
  213. public string Getfreqpoint(string name)
  214. {
  215. string val2 = this.ComParameters[name].freqpoint.Trim();
  216. return val2;
  217. }
  218. }
  219. List<ComMatchParameter> ReadParameters(Spire.Xls.Worksheet sheet, int rowIndex)
  220. {
  221. List<ComMatchParameter> ModulationTable = new List<ComMatchParameter>();
  222. string col1 = sheet.Range[rowIndex, 1].Value2 != null ? sheet.Range[rowIndex, 1].Value2.ToString() : "";
  223. string col2 = sheet.Range[rowIndex, 2].Value2 != null ? sheet.Range[rowIndex, 2].Value2.ToString() : "";
  224. string col3 = sheet.Range[rowIndex, 3].Value2 != null ? sheet.Range[rowIndex, 3].Value2.ToString() : "";
  225. string col4 = sheet.Range[rowIndex, 4].Value2 != null ? sheet.Range[rowIndex, 4].Value2.ToString() : "";
  226. string col5 = sheet.Range[rowIndex, 5].Value2 != null ? sheet.Range[rowIndex, 5].Value2.ToString() : "";
  227. if (!(col1 == "序号" && col2 == "串口号" && col3 == "第3个字节" && col4 == "第4个字节" && col5 == "频点(MHz)"))
  228. {
  229. ShowMessage(MsgType.Error, "'串口控制'行首标题位置和格式不正确");
  230. return ModulationTable;
  231. }
  232. int num = rowIndex;
  233. //默认最多30行
  234. while (num++ < rowIndex + 100)
  235. {
  236. col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
  237. col2 = sheet.Range[num, 2].Value2 != null ? sheet.Range[num, 2].Value2.ToString() : "";
  238. col3 = sheet.Range[num, 3].Value2 != null ? sheet.Range[num, 3].Value2.ToString() : "";
  239. col4 = sheet.Range[num, 4].Value2 != null ? sheet.Range[num, 4].Value2.ToString() : "";
  240. col5 = sheet.Range[num, 5].Value2 != null ? sheet.Range[num, 5].Value2.ToString() : "";
  241. if (string.IsNullOrEmpty(col1))
  242. {
  243. break;
  244. }
  245. ComMatchParameter ObjModulation = new ComMatchParameter();
  246. ObjModulation.SN = col1;
  247. ObjModulation.ComPort = col2;
  248. ObjModulation.ThirdByte = col3;
  249. ObjModulation.FourthByte = col4;
  250. ObjModulation.freqpoint = col5;
  251. ModulationTable.Add(ObjModulation);
  252. }
  253. return ModulationTable;
  254. }
  255. /// <summary>
  256. /// 串口控制4个对应项
  257. /// </summary>
  258. public class ComMatchParameter
  259. {
  260. /// <summary>
  261. /// 序号
  262. /// </summary>
  263. public string SN { get; set; }
  264. /// <summary>
  265. /// 串口号
  266. /// </summary>
  267. public string ComPort { get; set; }
  268. /// <summary>
  269. /// 第3个字节
  270. /// </summary>
  271. public string ThirdByte { get; set; }
  272. /// <summary>
  273. /// 第4个字节
  274. /// </summary>
  275. public string FourthByte { get; set; }
  276. /// <summary>
  277. /// 频点
  278. /// </summary>
  279. public string freqpoint { get; set; }
  280. }
  281. #endregion
  282. public class DataType
  283. {
  284. /// <summary>
  285. /// 测试名称
  286. /// </summary>
  287. public string Test_name { set; get; }
  288. /// <summary>
  289. /// 指标下限
  290. /// </summary>
  291. public double Lower { set; get; }
  292. /// <summary>
  293. /// 指标上限
  294. /// </summary>
  295. public double Upper { set; get; }
  296. /// <summary>
  297. /// 测试值
  298. /// </summary>
  299. public double TestVal { set; get; }
  300. /// <summary>
  301. /// 判断结果
  302. /// </summary>
  303. public string Result { set; get; }
  304. }
  305. }
  306. }