SerialConfig.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Windows.Forms;
  8. namespace Tps_LQ_Transmitter.Common
  9. {
  10. /// <summary>
  11. /// 串口控制4个对应项
  12. /// </summary>
  13. public class ComMatchParameter
  14. {
  15. /// <summary>
  16. /// 序号
  17. /// </summary>
  18. public string SN { get; set; }
  19. /// <summary>
  20. /// 串口号
  21. /// </summary>
  22. public string ComPort { get; set; }
  23. /// <summary>
  24. /// 第3个字节
  25. /// </summary>
  26. public string ThirdByte { get; set; }
  27. /// <summary>
  28. /// 第4个字节
  29. /// </summary>
  30. public string FourthByte { get; set; }
  31. /// <summary>
  32. /// 频点
  33. /// </summary>
  34. public string freqpoint { get; set; }
  35. }
  36. public class MatchComPara
  37. {
  38. public Dictionary<string, ComMatchParameter> ComParameters;
  39. public MatchComPara()
  40. {
  41. ComParameters = new Dictionary<string, ComMatchParameter>();
  42. }
  43. public string GetComPort(string name)
  44. {
  45. if (string.IsNullOrEmpty(name))
  46. return null;
  47. if (this.ComParameters.ContainsKey(name) == false)
  48. return null;
  49. string val1 = this.ComParameters[name].ComPort.Trim();
  50. return val1;
  51. }
  52. public string GetThirdByte(string name)
  53. {
  54. string val1 = this.ComParameters[name].ThirdByte.Trim();
  55. return val1;
  56. }
  57. public string GetFourthByte(string name)
  58. {
  59. string val2 = this.ComParameters[name].FourthByte.Trim();
  60. return val2;
  61. }
  62. public string Getfreqpoint(string name)
  63. {
  64. string val2 = this.ComParameters[name].freqpoint.Trim();
  65. return val2;
  66. }
  67. }
  68. public class SerialConfig
  69. {
  70. #region 串口配置表
  71. /// <summary>
  72. /// 获取串口配置表
  73. /// </summary>
  74. /// <returns></returns>
  75. public MatchComPara LoadComWorkBook()
  76. {
  77. MatchComPara pars = new MatchComPara();
  78. string FileName = Path.Combine(Bundle.bundle.BundleDir, "config\\串口控制.xlsx");
  79. if (!File.Exists(FileName))
  80. {
  81. ShowMessage( "找不到串口控制.xlsx");
  82. return null;
  83. }
  84. Spire.Xls.Workbook workbook = new Spire.Xls.Workbook();
  85. workbook.LoadFromFile(FileName);
  86. //获取第一个工作表sheet1
  87. Spire.Xls.Worksheet sheet = workbook.Worksheets[0];
  88. int num = 0;
  89. int blankRows = 0;
  90. while (num++ < 200)
  91. {
  92. //索引从1开始
  93. string col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
  94. col1 = col1.Trim();
  95. if (string.IsNullOrEmpty(col1))
  96. {
  97. blankRows++;
  98. if (blankRows > 5)
  99. {
  100. //连续5个空行以上则退出
  101. break;
  102. }
  103. }
  104. else
  105. {
  106. blankRows = 0;
  107. }
  108. if (col1.Equals("序号"))
  109. {
  110. List<ComMatchParameter> ComTable = ReadParameters(sheet, num);
  111. foreach (var item in ComTable)
  112. {
  113. if (pars.ComParameters.ContainsKey(item.SN))
  114. {
  115. ShowMessage( string.Format("串口控制:{0} 存在同名参数:{1},无法重复添加参数", sheet.Name, item.SN));
  116. continue;
  117. }
  118. pars.ComParameters.Add(item.SN, item);
  119. }
  120. }
  121. }
  122. return pars;
  123. }
  124. protected void ShowMessage(string msg)
  125. {
  126. MessageBox.Show(msg);
  127. }
  128. List<ComMatchParameter> ReadParameters(Spire.Xls.Worksheet sheet, int rowIndex)
  129. {
  130. List<ComMatchParameter> ModulationTable = new List<ComMatchParameter>();
  131. string col1 = sheet.Range[rowIndex, 1].Value2 != null ? sheet.Range[rowIndex, 1].Value2.ToString() : "";
  132. string col2 = sheet.Range[rowIndex, 2].Value2 != null ? sheet.Range[rowIndex, 2].Value2.ToString() : "";
  133. string col3 = sheet.Range[rowIndex, 3].Value2 != null ? sheet.Range[rowIndex, 3].Value2.ToString() : "";
  134. string col4 = sheet.Range[rowIndex, 4].Value2 != null ? sheet.Range[rowIndex, 4].Value2.ToString() : "";
  135. string col5 = sheet.Range[rowIndex, 5].Value2 != null ? sheet.Range[rowIndex, 5].Value2.ToString() : "";
  136. if (!(col1 == "序号" && col2 == "串口号" && col3 == "第3个字节" && col4 == "第4个字节" && col5 == "频点(MHz)"))
  137. {
  138. ShowMessage( "'串口控制'行首标题位置和格式不正确");
  139. return ModulationTable;
  140. }
  141. int num = rowIndex;
  142. //默认最多30行
  143. while (num++ < rowIndex + 100)
  144. {
  145. col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : "";
  146. col2 = sheet.Range[num, 2].Value2 != null ? sheet.Range[num, 2].Value2.ToString() : "";
  147. col3 = sheet.Range[num, 3].Value2 != null ? sheet.Range[num, 3].Value2.ToString() : "";
  148. col4 = sheet.Range[num, 4].Value2 != null ? sheet.Range[num, 4].Value2.ToString() : "";
  149. col5 = sheet.Range[num, 5].Value2 != null ? sheet.Range[num, 5].Value2.ToString() : "";
  150. if (string.IsNullOrEmpty(col1))
  151. {
  152. break;
  153. }
  154. ComMatchParameter ObjModulation = new ComMatchParameter();
  155. ObjModulation.SN = col1;
  156. ObjModulation.ComPort = col2;
  157. ObjModulation.ThirdByte = col3;
  158. ObjModulation.FourthByte = col4;
  159. ObjModulation.freqpoint = col5;
  160. ModulationTable.Add(ObjModulation);
  161. }
  162. return ModulationTable;
  163. }
  164. #endregion
  165. }
  166. }