RS232.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO.Ports;
  6. namespace Aitex.Core.RT.Communication
  7. {
  8. public class RS232
  9. {
  10. public string ErrorString { get; set; }
  11. public string PortName { get { return m_Port.PortName; } }
  12. protected SerialPort m_Port = new SerialPort();
  13. public RS232(string name, int baudRate, int dataBits, Parity parity = Parity.None, StopBits stopBits = StopBits.One)
  14. {
  15. m_Port.PortName = name;
  16. m_Port.BaudRate = baudRate;
  17. m_Port.DataBits = dataBits;
  18. m_Port.Parity = parity;
  19. m_Port.StopBits = stopBits;
  20. m_Port.RtsEnable = false;
  21. m_Port.DtrEnable = false;
  22. m_Port.ReadTimeout = 2000;
  23. m_Port.WriteTimeout = 1000;
  24. m_Port.NewLine = "\r\n";
  25. m_Port.Handshake = Handshake.None;
  26. }
  27. ~RS232()
  28. {
  29. Close();
  30. }
  31. public bool Open()
  32. {
  33. if (m_Port.IsOpen)
  34. {
  35. ErrorString = m_Port.PortName + " already opened";
  36. return false;
  37. }
  38. try
  39. {
  40. m_Port.Open();
  41. m_Port.DiscardInBuffer();
  42. m_Port.DiscardOutBuffer();
  43. }
  44. catch (Exception e)
  45. {
  46. ErrorString = m_Port.PortName + " 端口无法打开,请检查配置文件端口号的设置。" + e.Message;
  47. return false;
  48. }
  49. ErrorString = m_Port.PortName + "opened successfully";
  50. return true;
  51. }
  52. public bool IsOpen()
  53. {
  54. return m_Port.IsOpen;
  55. }
  56. public bool Close()
  57. {
  58. if (m_Port.IsOpen)
  59. {
  60. try
  61. {
  62. m_Port.Close();
  63. }
  64. catch (Exception e)
  65. {
  66. ErrorString = m_Port.PortName + " 端口无法关闭。" + e.Message;
  67. return false;
  68. }
  69. }
  70. ErrorString = m_Port.PortName + "Closed Successfully";
  71. return true;
  72. }
  73. public void WriteBytes(byte[] bytes)
  74. {
  75. try
  76. {
  77. m_Port.Write(bytes, 0, bytes.Length);
  78. }
  79. catch (Exception e)
  80. {
  81. ErrorString = m_Port.PortName + " write error :" + e.Message;
  82. throw (e);
  83. }
  84. }
  85. public void ClearPortBuffer()
  86. {
  87. m_Port.DiscardInBuffer();
  88. m_Port.DiscardOutBuffer();
  89. }
  90. public bool ReadByte(ref byte value)
  91. {
  92. bool ret = true;
  93. value = 0;
  94. try
  95. {
  96. value = (byte)m_Port.ReadByte();
  97. }
  98. catch (TimeoutException)
  99. {
  100. ret = false;
  101. }
  102. catch (Exception e)
  103. {
  104. ErrorString = m_Port.PortName + " read error :" + e.Message;
  105. throw (e);
  106. }
  107. return ret;
  108. }
  109. }
  110. }