BaseModel.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  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. /// <summary>
  134. /// 获取串口配置表
  135. /// </summary>
  136. /// <returns></returns>
  137. public MatchComPara LoadComWorkBook()
  138. {
  139. MatchComPara pars = new MatchComPara();
  140. string FileName = Path.Combine(Bundle.bundle.BundleDir, "config\\串口控制.xlsx");
  141. if (!File.Exists(FileName))
  142. {
  143. ShowMessage(MsgType.Error, "找不到串口控制.xlsx");
  144. return null;
  145. }
  146. Spire.Xls.Workbook workbook = new Spire.Xls.Workbook();
  147. workbook.LoadFromFile(FileName);
  148. //获取第一个工作表sheet1
  149. Spire.Xls.Worksheet sheet = workbook.Worksheets[0];
  150. int num = 0;
  151. int blankRows = 0;
  152. while (num++ < 200)
  153. {
  154. //索引从1开始
  155. string col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
  156. col1 = col1.Trim();
  157. if (string.IsNullOrEmpty(col1))
  158. {
  159. blankRows++;
  160. if (blankRows > 5)
  161. {
  162. //连续5个空行以上则退出
  163. break;
  164. }
  165. }
  166. else
  167. {
  168. blankRows = 0;
  169. }
  170. if (col1.Equals("序号"))
  171. {
  172. List<ComMatchParameter> ComTable = ReadParameters(sheet, num);
  173. foreach (var item in ComTable)
  174. {
  175. if (pars.ComParameters.ContainsKey(item.SN))
  176. {
  177. ShowMessage(MsgType.Error, string.Format("串口控制:{0} 存在同名参数:{1},无法重复添加参数", sheet.Name, item.SN));
  178. continue;
  179. }
  180. pars.ComParameters.Add(item.SN, item);
  181. }
  182. }
  183. }
  184. return pars;
  185. }
  186. public class MatchComPara
  187. {
  188. public Dictionary<string, ComMatchParameter> ComParameters;
  189. public MatchComPara()
  190. {
  191. ComParameters = new Dictionary<string, ComMatchParameter>();
  192. }
  193. public string GetComPort(string name)
  194. {
  195. if (string.IsNullOrEmpty(name))
  196. return null;
  197. if (this.ComParameters.ContainsKey(name) == false)
  198. return null;
  199. string val1 = this.ComParameters[name].ComPort.Trim();
  200. return val1;
  201. }
  202. public string GetThirdByte(string name)
  203. {
  204. string val1 = this.ComParameters[name].ThirdByte.Trim();
  205. return val1;
  206. }
  207. public string GetFourthByte(string name)
  208. {
  209. string val2 = this.ComParameters[name].FourthByte.Trim();
  210. return val2;
  211. }
  212. public string Getfreqpoint(string name)
  213. {
  214. string val2 = this.ComParameters[name].freqpoint.Trim();
  215. return val2;
  216. }
  217. }
  218. List<ComMatchParameter> ReadParameters(Spire.Xls.Worksheet sheet, int rowIndex)
  219. {
  220. List<ComMatchParameter> ModulationTable = new List<ComMatchParameter>();
  221. string col1 = sheet.Range[rowIndex, 1].Value2 != null ? sheet.Range[rowIndex, 1].Value2.ToString() : "";
  222. string col2 = sheet.Range[rowIndex, 2].Value2 != null ? sheet.Range[rowIndex, 2].Value2.ToString() : "";
  223. string col3 = sheet.Range[rowIndex, 3].Value2 != null ? sheet.Range[rowIndex, 3].Value2.ToString() : "";
  224. string col4 = sheet.Range[rowIndex, 4].Value2 != null ? sheet.Range[rowIndex, 4].Value2.ToString() : "";
  225. string col5 = sheet.Range[rowIndex, 5].Value2 != null ? sheet.Range[rowIndex, 5].Value2.ToString() : "";
  226. if (!(col1 == "序号" && col2 == "串口号" && col3 == "第3个字节" && col4 == "第4个字节" && col5 == "频点(MHz)"))
  227. {
  228. ShowMessage(MsgType.Error, "'串口控制'行首标题位置和格式不正确");
  229. return ModulationTable;
  230. }
  231. int num = rowIndex;
  232. //默认最多30行
  233. while (num++ < rowIndex + 100)
  234. {
  235. col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
  236. col2 = sheet.Range[num, 2].Value2 != null ? sheet.Range[num, 2].Value2.ToString() : "";
  237. col3 = sheet.Range[num, 3].Value2 != null ? sheet.Range[num, 3].Value2.ToString() : "";
  238. col4 = sheet.Range[num, 4].Value2 != null ? sheet.Range[num, 4].Value2.ToString() : "";
  239. col5 = sheet.Range[num, 5].Value2 != null ? sheet.Range[num, 5].Value2.ToString() : "";
  240. if (string.IsNullOrEmpty(col1))
  241. {
  242. break;
  243. }
  244. ComMatchParameter ObjModulation = new ComMatchParameter();
  245. ObjModulation.SN = col1;
  246. ObjModulation.ComPort = col2;
  247. ObjModulation.ThirdByte = col3;
  248. ObjModulation.FourthByte = col4;
  249. ObjModulation.freqpoint = col5;
  250. ModulationTable.Add(ObjModulation);
  251. }
  252. return ModulationTable;
  253. }
  254. /// <summary>
  255. /// 串口控制4个对应项
  256. /// </summary>
  257. public class ComMatchParameter
  258. {
  259. /// <summary>
  260. /// 序号
  261. /// </summary>
  262. public string SN { get; set; }
  263. /// <summary>
  264. /// 串口号
  265. /// </summary>
  266. public string ComPort { get; set; }
  267. /// <summary>
  268. /// 第3个字节
  269. /// </summary>
  270. public string ThirdByte { get; set; }
  271. /// <summary>
  272. /// 第4个字节
  273. /// </summary>
  274. public string FourthByte { get; set; }
  275. /// <summary>
  276. /// 频点
  277. /// </summary>
  278. public string freqpoint { get; set; }
  279. }
  280. public class DataType
  281. {
  282. /// <summary>
  283. /// 测试名称
  284. /// </summary>
  285. public string Test_name { set; get; }
  286. /// <summary>
  287. /// 指标下限
  288. /// </summary>
  289. public double Lower { set; get; }
  290. /// <summary>
  291. /// 指标上限
  292. /// </summary>
  293. public double Upper { set; get; }
  294. /// <summary>
  295. /// 测试值
  296. /// </summary>
  297. public double TestVal { set; get; }
  298. /// <summary>
  299. /// 判断结果
  300. /// </summary>
  301. public string Result { set; get; }
  302. }
  303. }
  304. }