PortSettings.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.IO.Ports;
  9. namespace MOTINOVA_Motor_Factory_Set
  10. {
  11. public partial class PortSettings : Form
  12. {
  13. #region 串口相关变量
  14. private bool Listening = false;// 侦听串口是否是接收数据标志位
  15. public static string m_strDataBits = "8";
  16. public static string m_strStopBits = "1";
  17. public static string m_strCheckBits = "None";
  18. public static string m_strBaudrate = "115200";
  19. public bool g_blnIsOpen = false;
  20. #endregion
  21. public PortSettings()
  22. {
  23. InitializeComponent();
  24. }
  25. private void PortSettings_Load(object sender, EventArgs e)
  26. {
  27. #region 端口刷新
  28. string[] ports = SerialPort.GetPortNames();
  29. Array.Sort(ports);
  30. comboBox_ComIndex.Items.AddRange(ports);
  31. comboBox_ComIndex.SelectedIndex = comboBox_ComIndex.Items.Count > 0 ? 0 : -1;
  32. #endregion
  33. }
  34. #region 打开或关闭串口
  35. private void button_ComOpen_Click(object sender, EventArgs e)
  36. {
  37. try
  38. {
  39. if (!serialPort1.IsOpen)
  40. {
  41. serialPort1.PortName = comboBox_ComIndex.Text;
  42. serialPort1.BaudRate = int.Parse(m_strBaudrate);
  43. serialPort1.Parity = (Parity)Enum.Parse(typeof(Parity), m_strCheckBits);
  44. serialPort1.DataBits = Int32.Parse(m_strDataBits);
  45. serialPort1.StopBits = (StopBits)Enum.Parse(typeof(StopBits), (m_strStopBits == "1.5") ? "3" : m_strStopBits);
  46. serialPort1.Open();
  47. comboBox_ComIndex.Enabled = false;
  48. button_ComOpen.Text = "断开";
  49. g_blnIsOpen = true;
  50. }
  51. else
  52. {
  53. while (Listening) Application.DoEvents();
  54. //打开时点击,则关闭串口
  55. serialPort1.Close();
  56. comboBox_ComIndex.Enabled = true;
  57. button_ComOpen.Text = "连接";
  58. g_blnIsOpen = false;
  59. }
  60. }
  61. catch (System.Exception ex)
  62. {
  63. MessageBox.Show(ex.Message);
  64. return;
  65. }
  66. this.Hide();
  67. }
  68. #endregion
  69. #region 串口数据接收
  70. private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
  71. {
  72. try
  73. {
  74. Listening = true;
  75. int n = serialPort1.BytesToRead;
  76. byte[] buf = new byte[n];//将一次串口事件中接收到的数据暂存于buf中(注:对于超过8个字节的数据,C#的
  77. //串口接收事件将按每次处理8个字节的方式多次处理
  78. serialPort1.Read(buf, 0, n);//将接收到的数据读入buf
  79. this.Invoke((EventHandler)delegate
  80. {
  81. });
  82. ImportForm.buffer.AddRange(buf);//将读取的数据放入buffer中
  83. CheckForm.buffer.AddRange(buf);
  84. }
  85. catch (Exception ex)
  86. {
  87. MessageBox.Show(ex.Message);
  88. return;
  89. }
  90. finally
  91. {
  92. Listening = false;
  93. }
  94. }
  95. #endregion
  96. }
  97. }