PcmControl.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO.Ports;
  7. using System.Threading;
  8. namespace Tps_LQ_Transmitter.com
  9. {
  10. /// <summary>
  11. /// PCM控制与数据发送类
  12. /// </summary>
  13. class PcmControl:MySerial
  14. {
  15. SerialPort serial = null;
  16. public PcmControl()
  17. {
  18. serial = new SerialPort();
  19. serial.PortName = "COM5"; //DIO控制板与JSY模块都是RS485通信共用计算机的串口COM6
  20. serial.BaudRate = 115200;
  21. serial.DataBits = 8;
  22. serial.StopBits = StopBits.One;//停止位设置为com_stop的值
  23. serial.Parity = Parity.None;//获取奇偶校验选项的值
  24. serial.ReadTimeout = 1000; //读取等待时间1000
  25. serial.RtsEnable = true;
  26. if (!serial.IsOpen)
  27. {
  28. serial.Open();
  29. }
  30. }
  31. public override void portClose()
  32. {
  33. serial.Close();
  34. }
  35. /// <summary>
  36. /// PCM读写方法
  37. /// </summary>
  38. /// <param name="data">数据</param>
  39. /// <param name="delay">延时</param>
  40. /// <returns></returns>
  41. public byte[] WriteRead(byte[] data, int delay = 50)
  42. {
  43. if (data == null)
  44. return null;
  45. //先读空
  46. if (serial.BytesToRead > 0)
  47. serial.DiscardInBuffer();
  48. byte[] crc = crc16(data);
  49. byte[] newarray = new byte[data.Length + 2];
  50. Array.Copy(data, newarray, data.Length);
  51. newarray[data.Length] = crc[0];
  52. newarray[data.Length + 1] = crc[1];
  53. serial.Write(data, 0, data.Length);
  54. Thread.Sleep(delay);
  55. if (serial.BytesToRead > 0)
  56. {
  57. byte[] dat = new byte[serial.BytesToRead];
  58. serial.Read(dat, 0, dat.Length);
  59. return dat;
  60. }
  61. else
  62. {
  63. return null;
  64. }
  65. }
  66. /// <summary>
  67. /// PCM设置命令发送
  68. /// </summary>
  69. /// <param name="mode">"UART"/"HDLC"</param>
  70. /// <param name="choice">"ODD"/"EVEN"/"NONE"/"FALL"/"RISE"</param>
  71. /// <param name="baudrate">波特率</param>
  72. /// <returns>结果</returns>
  73. public bool Setting(string mode,string choice,int baudrate )
  74. {
  75. int u = 0;
  76. if (mode=="UART")
  77. {
  78. u = u | 0x01;
  79. }
  80. else if (mode == "HDLC")
  81. {
  82. u = u | 0x41;
  83. }
  84. if (choice == "ODD")//奇校验
  85. {
  86. u = u | 0x02;
  87. }
  88. else if (choice == "EVEN")//偶校验
  89. {
  90. u = u | 0x04;
  91. }
  92. else if (choice == "NONE")//无校验
  93. {
  94. u = u | 0x00;
  95. }
  96. else if (choice == "FALL")//下降沿
  97. {
  98. u = u | 0x08;
  99. }
  100. else if (choice == "RISE")//上升沿
  101. {
  102. u = u | 0x00;
  103. }
  104. int d =((50000000 / baudrate) + 2);
  105. bool bolrd = false;
  106. byte[] byst = { 0xF0, 0x0F, 0x02, 0x00, 0x00, 0x03, 0x00, 0xDB, 0x01 };
  107. byst[8] = (byte)u;
  108. byst[6] = (byte)((d & 0x0000ff00) >> 8);
  109. byst[7] = (byte)(d & 0x000000ff);
  110. byte[] byrd = WriteRead(byst);
  111. if (byrd.Length>= byst.Length)
  112. {
  113. bolrd = true;
  114. }
  115. return bolrd;
  116. }
  117. public bool UartSendSetting()
  118. {
  119. bool bolrd = false;
  120. byte[] byst = { 0xF0, 0x0F, 0x02, 0x00, 0x00, 0x03, 0x00, 0xDB, 0x01 };
  121. byte[] byrd = new byte[10];
  122. byte[] byrdx = { 0xF0, 0x0F, 0x02, 0x00, 0x00, 0x03, 0x00, 0xDB, 0x01 ,0x24};
  123. byrd=WriteRead(byst);
  124. if (byrd.Length >= 10)
  125. {
  126. bolrd = true;
  127. for (int i = 0; i < byrdx.Length; i++)
  128. {
  129. if (byrd[i] != byrdx[i])
  130. bolrd = false;
  131. }
  132. }
  133. return bolrd;
  134. }
  135. public bool HdlcSendSetting()
  136. {
  137. bool bolrd = false;
  138. byte[] byst = { 0xF0, 0x0F, 0x02, 0x00, 0x00, 0x03, 0x00, 0x0D, 0x41 };
  139. byte[] byrd = new byte[10];
  140. byte[] byrdx = { 0xF0, 0x0F, 0x02, 0x00, 0x00, 0x03, 0x00, 0x0D, 0x41, 0xB2 };
  141. byrd = WriteRead(byst);
  142. if (byrd.Length >= 10)
  143. {
  144. bolrd = true;
  145. for (int i = 0; i < byrdx.Length; i++)
  146. {
  147. if (byrd[i] != byrdx[i])
  148. bolrd = false;
  149. }
  150. }
  151. return bolrd;
  152. }
  153. public bool DataSend(byte[] data)
  154. {
  155. bool bolrd = false;
  156. if (data!=null && data.Length>0)
  157. {
  158. byte[] sd = new byte[data.Length + 6];
  159. sd[0] = 0xF0;
  160. sd[1] = 0x0F;
  161. sd[2] = 0x03;
  162. sd[3] = 0x00;
  163. sd[4] = 0x00;
  164. sd[5] = (byte)data.Length;
  165. for (int i = 0; i < data.Length; i++)
  166. {
  167. sd[6 + i] = data[i];
  168. }
  169. byte[] byrd = WriteRead(sd);
  170. if (byrd.Length >= sd.Length)
  171. {
  172. bolrd = true;
  173. }
  174. }
  175. return bolrd;
  176. }
  177. }
  178. }