【实例简介】
	有些下位机通过串口显示交互信息(可能是一次性,可能开机自动触发),上位机需要从中查找指定定关键字。这个时候就需要有一个能够实时接收并显示,并能够实时“等待”某个关键字,TerminalWaiter就是为此而来。
【实例截图】
	 
 
	
	【核心代码】
	
	
   private void button1_Click(object sender, EventArgs e)
	        {
	            if (string.IsNullOrEmpty(textBox1.Text))
	            {
	                richTextBox1.AppendText("Textbox content can not be null!\r\n");
	                textBox1.Focus();
	                return;
	            }
	            Thread thd = new Thread(new ThreadStart(Test));
	            thd.Start();
	 
	        }
	 
	        private void Test()
	        {
	            IsStoppingDataReceive = true;
	            bool rst = COMWaitStr(textBox1.Text, (int)(numericUpDown1.Value * 1000));
	            IsStoppingDataReceive = false;
	            Console.WriteLine("rst: "   rst);
	        }
	 
	 public bool COMWaitStr(string WaitStr, int ms_TimeOut)
	        {
	            MyLib.COMMFunc.AppendText(richTextBox1, "\r\nWAIT "   WaitStr   " ...\r\n\r\n");
	            int i = 0;
	            while (i < ms_TimeOut / 200)
	            {
	                string Readrst = "";
	                if (CHKComPortRead(WaitStr, out Readrst)) return true;
	                Thread.Sleep(100);
	                i  ;
	            }
	            MyLib.COMMFunc.AppendText(richTextBox1, "\r\nWAIT "   WaitStr   " TimeOut="   ms_TimeOut   " ms\r\n\r\n");
	            return false;
	        }
	 
	   internal bool CHKComPortRead(string CHKStr,out string Readrst )
	        {
	            Readrst = ""; string temp = "";
	            if (!EMoudleInstance.CHKComPortOpen()) return false;
	            while (true)
	            {
	                int i = 0;
	                int n = 0;
	                while ((n = EMoudleInstance.ComPort.BytesToRead) == 0)
	                {
	                    Thread.Sleep(50);
	                    i  ;
	                    if (i >= 3) break;
	                }
	                if ((n = EMoudleInstance.ComPort.BytesToRead) == 0) break;
	                byte[] buf = new byte[n];
	                EMoudleInstance.ComPort.Read(buf, 0, n);
	                temp = Encoding.ASCII.GetString(buf);                
	                MyLib.COMMFunc.AppendText(richTextBox1, temp);
	                Readrst  = temp;
	                if (temp.Contains(CHKStr))
	                {
	                    MyLib.COMMFunc.AppendText(richTextBox1, "\r\nWAIT "   CHKStr   " OK\r\n\r\n");
	                    return true;
	                }
	            }
	            if (Readrst.Contains(CHKStr))
	            {
	                MyLib.COMMFunc.AppendText(richTextBox1, "\r\nWAIT "   CHKStr   " OK\r\n\r\n");
	                return true;
	            }else
	            {             
	                return false;
	            }
	          
	        }
	
                             
                        
网友评论
我要评论