日期:2014-05-17  浏览次数:20916 次

【C#】串口通信方面。
如题,一个界面有许多按钮,通过点击按钮向单片机发送命令,然后得到单片机返回命令。
比如我发送的是加电开关,返回电压、电流等。然后通过解析将数据显示在同页面的其他textBox(不要不断刷新,大概一两秒一次)。
问题来了,接受的数据是一个BYTE的形式来的,我需要的命令是FD开头,AA结尾,13位的一段Byte。
怎么能让单片机传送过来的数据按照这个形式保存进来,因为单片机发送的命令是断断续续的,这次没传完,下次接着传,我判断第一位是FD,然后拼接后12的方法也不行,同时只能显示两个TextBox,多了的话就数据就卡住不动。这个原因是什么,是没解析对数据还是什么。。
求人啊

------解决方案--------------------
每次数据到达后,加上之前接收的包进行数据的完整性判断,再做处理。

至于你的卡是因为没有合理的利用线程和异步。

------解决方案--------------------
 BitArray bit = new BitArray(16);//0-15
            string ac = Units.ConvertString(MIO.ToString(), 10, 2);
            for (int i = 0; i < ac.Length; i++)
            {
                bit[15 - i] = ac.Substring(ac.Length - 1 - i, 1) == "1" ? true : false;
            }
            chbADk.Checked = bit[15];//
            chbAF.Checked = bit[14];//
希望对你有帮助
------解决方案--------------------
为什么要延时500ms?
如果要延时,应该在数据处理结束了,再延时

           string ret = string.Empty;
           data = null;

           try
           {

               bool bGet = false;
               string received =string.Empty;
               int nTimeout = 0;
               do
               {
                   received += m_Serial.ReadExisting();


                   if (received.IndexOf("\x03") >= 0)//这个地方要换成你的结束符
                   {
                           bGet = true;
                           //你的数据处理......
                   }
                   
              &nbs