Weigher.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. using Microsoft.Win32;
  2. using System;
  3. using System.IO;
  4. using System.IO.Ports;
  5. using System.Runtime.InteropServices;
  6. using System.Threading;
  7. using System.Windows.Forms;
  8. namespace UAS_MES
  9. {
  10. public partial class Weigher : Form
  11. {
  12. [DllImport("user32.dll")]
  13. public static extern bool ReleaseCapture();
  14. [DllImport("user32.dll")]
  15. public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
  16. public const int WM_SYSCOMMAND = 0x0112;
  17. public const int SC_MOVE = 0xF010;
  18. public const int HTCAPTION = 0x0002;
  19. string LastData = "";
  20. //实例化一个串口
  21. SerialPort serialPort1 = new SerialPort();
  22. Thread thread;
  23. bool getData;
  24. public Weigher()
  25. {
  26. InitializeComponent();
  27. CheckForIllegalCrossThreadCalls = false;
  28. GetComList();
  29. }
  30. private void Weigher_Load(object sender, EventArgs e)
  31. {
  32. this.headBar1.MouseDown += new MouseEventHandler(headBar_MouseDown);
  33. }
  34. private void GetSeriadlData_Click(object sender, EventArgs e)
  35. {
  36. getData = true;
  37. thread = new Thread(getSerialData);
  38. thread.Start();
  39. }
  40. private void StopGetSeriadlData_Click(object sender, EventArgs e)
  41. {
  42. getData = false;
  43. Thread.Sleep(1000);
  44. serialPort1.Close();
  45. }
  46. //开始接受串口数据
  47. private void getSerialData()
  48. {
  49. if (!serialPort1.IsOpen)
  50. {
  51. serialPort1.PortName = this.comboBox1.Text;
  52. serialPort1.BaudRate = int.Parse(BaudRate.Text);
  53. serialPort1.Open();
  54. DataFlush.Text = "开始接受数据\n";
  55. while (getData)
  56. {
  57. try { ShowData(serialPort1.ReadLine() + "\n"); }
  58. catch (IOException ex) { MessageBox.Show(ex.Message); }
  59. }
  60. }
  61. else
  62. {
  63. MessageBox.Show("请勿重复打开端口", "警告");
  64. }
  65. }
  66. // 获取串口列表
  67. private void GetComList()
  68. {
  69. RegistryKey keyCom = Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm");
  70. if (keyCom != null)
  71. {
  72. string[] sSubKeys = keyCom.GetValueNames();
  73. //获取串口的名称
  74. //for (int i = 0; i < sSubKeys.Length; i++)
  75. //{
  76. // string sValue = (string)(sSubKeys[i]);
  77. // comboBox1.Items.Add(sValue);
  78. // comboBox1.SelectedIndex = i;
  79. //}
  80. //获取串口号
  81. for (int i = 0; i < sSubKeys.Length; i++)
  82. {
  83. string sValue = (string)keyCom.GetValue(sSubKeys[i]);
  84. comboBox1.Items.Add(sValue);
  85. comboBox1.SelectedIndex = i;
  86. }
  87. }
  88. }
  89. private void headBar_MouseDown(object sender, MouseEventArgs e)
  90. {
  91. ReleaseCapture();
  92. SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
  93. }
  94. private void ShowData(string Data)
  95. {
  96. //判断数据是否稳定,将稳定值展示到称量结果
  97. if (Data.Substring(0, 1) == "S")
  98. {
  99. WeigherData.Text = Data;
  100. }
  101. //判断数据和上一条是否相等
  102. if (!(LastData == Data))
  103. {
  104. DataFlush.AppendText(Data);
  105. }
  106. LastData = Data;
  107. }
  108. private void Weigher_FormClosing(object sender, FormClosingEventArgs e)
  109. {
  110. if (serialPort1.IsOpen)
  111. {
  112. MessageBoxButtons messButton = MessageBoxButtons.YesNo;
  113. string logout_confirm = MessageBox.Show(this.ParentForm, "端口尚未关闭,仍要关闭窗口?", "警告!", messButton).ToString();
  114. if (!(logout_confirm == "Yes"))
  115. {
  116. e.Cancel = true;
  117. }
  118. }
  119. }
  120. private void enterTextBox2_Enter(object sender, EventArgs e)
  121. {
  122. Console.Write("saomiao");
  123. }
  124. private void enterTextBox2_KeyDown(object sender, KeyEventArgs e)
  125. {
  126. if (serialPort1.IsOpen)
  127. {
  128. if (e.KeyValue == 13)
  129. {
  130. enterTextBox2.AppendText(LastData);
  131. }
  132. }
  133. }
  134. private void CleanDataFlush_Click(object sender, EventArgs e)
  135. {
  136. DataFlush.Clear();
  137. }
  138. private void textBox5_TextChanged(object sender, EventArgs e)
  139. {
  140. }
  141. private void BaudRate_TextChanged(object sender, EventArgs e)
  142. {
  143. }
  144. private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
  145. {
  146. }
  147. }
  148. }