搜索
bottom↓
回复: 5

C#如何实现串口自动接收数据

[复制链接]

出0入0汤圆

发表于 2011-8-11 13:35:11 | 显示全部楼层 |阅读模式
各位大神,C#如何实现串口自动接收数据?请尽量写得详细点,先谢谢了!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-8-11 13:36:44 | 显示全部楼层
看“缓冲区满”能否作为一个event?

出0入0汤圆

 楼主| 发表于 2011-8-15 17:11:14 | 显示全部楼层
解决了,serialport控件有个DataReceived事件!

出50入0汤圆

发表于 2011-8-15 17:40:30 | 显示全部楼层
在中断中接收加入到缓冲区,在定时进行处理。
  
      private void serialPort_强电_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            // if (timer1.Enabled)
            CommReading_强电 = true;
            while (serialPort_强电.BytesToRead > 0)
            {
                //apps.BASE.Queue_同步.IN((byte)serialPort_同步.ReadByte());

                byte d = (byte)(serialPort_强电.ReadByte() & 0x000000ff);
                // lock(COM_同步_Data)
                {
                    COM_强电_Data.Enqueue(d);
                }
                // Application.DoEvents();
            }
            CommReading_强电 = false;
        }

private void 强电接收()
        {
            string recs = "";
            // bool h = false;
            //byte Hbyte = 0x00;
            if (CommReading_强电) return;
           // lock (COM_强电_Data)
            {


                while (COM_强电_Data.Count > 0)
                //while(apps.BASE.Queue_同步.HaveData())
                {
                    while (CommReading_强电)
                    {
                        Application.DoEvents();
                    }

                    COM_强电_LastD = COM_强电_ReadD;

                    COM_强电_ReadD = Convert.ToByte(COM_强电_Data.Dequeue());
                    //COM_同步_ReadD = apps.BASE.Queue_同步.OUT();
                    recs += COM_同步_ReadD.ToString("X2");



                    if (COM_强电_ReadD == 0xAA)
                    {
                        COMRecData_i强电 = 0;

                        //h = true;
                        COM_强电_Recing = true;
                        continue;
                    }

                    if (COMRecData_i强电 > 100) COMRecData_i强电 = 0;
                        if (COM_强电_ReadD == 0xBB)
                        {
                            //COMRecData_强电[COMRecData_i强电] = 0xBB;
                            //收到强
                            if ((COMRecData_强电[0]==0x01)&&(COMRecData_强电[1]==0xFE)) //开机
                            {
                                LOG_强电("收到:强电开启应答");
                            }

                            if ((COMRecData_强电[0] == 0x02) && (COMRecData_强电[1] == 0xFD)) //关机
                            {
                                
                                LOG_强电("收到:强电关闭应答,退出程序");
                                apps.Form_main.自动关机 = true;
                                apps.Form_main.Close();
                            }



                            COM_同步_Recing = false;
                            continue;
                        }
              

                    if (COM_强电_Recing)   //有数据头!
                    {
                        COMRecData_强电[COMRecData_i强电] = COM_强电_ReadD;//| (byte)(COM_同步_ReadD & 0x0f));
                        COMRecData_i强电++;

                        /* if (h)
                           {
                               Hbyte = (byte)((COM_同步_ReadD << 4));// & 0xf0);
                               h = false;
                           }
                           else
                           {
                               COMRecData_同步[COMRecData_i同步] = (byte)(Hbyte | (COM_同步_ReadD & 0x0f));
                               COMRecData_i同步++;
                               h = true;
                           }*/
                    }
                }
            }

        }

出0入0汤圆

发表于 2011-9-5 14:20:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-16 23:55:12 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 20:32

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表