检测串口是否掉线的思路

思路记录下,免得忘记

设置spFlag =false;

在SendCmd时,spFlag=false;触发IsRec();

在Received事件中,spFlag=true;

实测:收不到数据是可以报错的。PC条件不够,没法测试接收到数据后是否正常,通过模拟点击一个按钮,设置spFlag=true后,没有触发MessagBox

 1 public partial class Form1 : Form
 2     {
 3         private bool spFlag = false;
 4         SerialPort sp = null;
 5         private long startTime = 0;
 6         public Form1()
 7         {
 8             InitializeComponent();
 9             sp = new SerialPort();
10             sp.PortName = "COM1";
11             if (sp.IsOpen)
12             {
13                 sp.Close();
14             }
15             sp.Open();
16 
17             sp.DataReceived += sp_DataReceived;
18         }
19 
20         
21 
22         private void button1_Click(object sender, EventArgs e)
23         {
24             SendCmd();
25         }
26         private void SendCmd()
27         {
28             spFlag = false;
29             sp.Write("aaaaaa");
30             startTime = System.DateTime.Now.Ticks;
31             Thread recThread = new Thread(new ThreadStart(IsRec));
32             recThread.IsBackground = true;
33             recThread.Start();
34         }
35 
36         void IsRec()
37         {
38             while ((System.DateTime.Now.Ticks - startTime) < 10000000*5)
39             {
40                 if (spFlag)
41                 {
42                     break;
43                 }
44             }
45             if(!spFlag)
46                 MessageBox.Show("接收超时,串口可能掉线,");
47         }
48         void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
49         {
50             spFlag = true;
51         }
52 
53         private void button2_Click(object sender, EventArgs e)
54         {
55             this.spFlag = true;
56         }
57     }

猜你喜欢

转载自www.cnblogs.com/czicy/p/9187940.html