RainwormPower.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. /// 蚯蚓直流程控电源控制类
  12. /// [使用计算机串口COM4通信]
  13. /// </summary>
  14. class RainwormPower:MySerial
  15. {
  16. SerialPort serial = null;
  17. public enum State { ON, OFF };
  18. public RainwormPower()
  19. {
  20. serial = new SerialPort();
  21. serial.PortName = "COM4"; //使用计算机串口COM4通信
  22. serial.BaudRate = 9600;
  23. serial.DataBits = 8;
  24. serial.StopBits = StopBits.One;//停止位设置为com_stop的值
  25. serial.Parity = Parity.None;//获取奇偶校验选项的值
  26. serial.ReadTimeout = 1000; //读取等待时间1000
  27. serial.RtsEnable = true;
  28. if (!serial.IsOpen)
  29. {
  30. serial.Open();
  31. }
  32. }
  33. public override void portClose()
  34. {
  35. serial.Close();
  36. }
  37. /// <summary>
  38. /// 电源控制与查询读写
  39. /// </summary>
  40. /// <param name="data">询问命令</param>
  41. /// <param name="delay">延时mS</param>
  42. /// <returns>返回数据byte[]</returns>
  43. public byte[] powerWriteRead(byte[] data,int delay=100)
  44. {
  45. if (data == null)
  46. return null;
  47. //先读空
  48. if (serial.BytesToRead > 0)
  49. serial.DiscardInBuffer();
  50. byte[] crc = crc16(data);
  51. byte[] newarray = new byte[data.Length + 2];
  52. Array.Copy(data, newarray, data.Length);
  53. newarray[data.Length] = crc[0];
  54. newarray[data.Length + 1] = crc[1];
  55. serial.Write(newarray, 0, newarray.Length);
  56. Thread.Sleep(delay);
  57. if (serial.BytesToRead > 0)
  58. {
  59. byte[] dat = new byte[serial.BytesToRead];
  60. serial.Read(dat, 0, dat.Length);
  61. return dat;
  62. }
  63. else
  64. {
  65. return null;
  66. }
  67. }
  68. /// <summary>
  69. /// 电源输出ON/OFF
  70. /// </summary>
  71. /// <param name="st">输出状态ON/OFF</param>
  72. public void powerOnoff(State st)
  73. {
  74. byte[] byOn = { 0x00, 0x10, 0x10, 0x04, 0x00, 0x01, 0x02, 0x00, 0x01 };
  75. byte[] byOFF = { 0x00, 0x10, 0x10, 0x04, 0x00, 0x01, 0x02, 0x00, 0x00 };
  76. if (st==State.ON)
  77. {
  78. powerWriteRead(byOn);
  79. }
  80. else
  81. {
  82. powerWriteRead(byOFF);
  83. }
  84. }
  85. /// <summary>
  86. /// 电源输出电压与限流电流设置
  87. /// </summary>
  88. /// <param name="volt">电压值</param>
  89. /// <param name="curr">电流值</param>
  90. public void powerSetting(double volt,double curr)
  91. {
  92. int vt, ct;
  93. byte[] byVolt = { 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00 };
  94. byte[] byCurr = { 0x00, 0x10, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x00 };
  95. vt = (int) (volt * 100);
  96. byVolt[7] = (byte)((vt & 0xFF00)>>8);
  97. byVolt[8] = (byte)(vt & 0x00FF);
  98. ct = (int)(curr * 100);
  99. byCurr[7] = (byte)((ct & 0xFF00) >> 8);
  100. byCurr[8] = (byte)(ct & 0x00FF);
  101. powerWriteRead(byCurr);
  102. powerWriteRead(byVolt);
  103. }
  104. }
  105. }