VC 运用MSComm控件串口通信

来源:互联网 发布:手机推荐 知乎 2017 编辑:程序博客网 时间:2024/05/18 03:32

      在VC++的平台下,串口通信一般存在两种形式:1.直接通过API函数设计通信的参数等,这种方式的好处在于与实际的结合比较的灵活,缺点是编码的工作量比较大,要了解通信的各个环节的话就必须弄懂每个API函数的具体意思。2.使用VC++提供的串行通信控件MSComm,这种方法编码简单易懂,但是不够灵活。

       本文就主要介绍第二种方法。

       首先,选择菜单-->添加到工程-->选择Component and Controls Gallery文件夹-->选定Registered ActiveX Controls文件夹,选定Microsoft Communications Control, version 6.0控件,然后将该控件从工具箱拖到对话框里面。

       其次,设置MSComm控件的属性,下面主要介绍MSComm的几个属性: 

       m_Comm.SetCommPort(1);//设定的串口号,1表示选择的串口号是1 
       m_Comm.SetInBufferSize(1024);//设置接受缓冲区的大小

       m_Comm.SetOutBufferSize(1024);//设置发送缓冲区的大小

       m_Comm.SetInputMode(1);  //0是以文本的形式取出数据,1是以2进制的形式取出数据

       m_Comm.GetInput();//先预读缓冲区以清除残留数据

       m_Comm.SetSettings("9600,N,8,1"); //波特率9600,无校验,8个数据位,1个停止位  
       m_Comm.SetInputLen(0);  //设置当前接收区数据长度为0, 设置成从缓冲区读取全部内容
       m_Comm.SetRThreshold(1);//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件

       if( !m_Comm.GetPortOpen())
       {
            m_Comm.SetPortOpen(TRUE);//打开串口 
       }

      最后在OnComm事件里面添加接受数据的具体代码,下面是本人在曾经在项目中的一段代码,仅供参考:

       VARIANT Rec_Data;  
      char Rec_Data_Array[2048];
      if (m_Comm.GetCommEvent() == 2) //事件值为2表示接收缓冲区内有字符
     {
           Rec_Data = m_Comm.GetInput();//从缓冲区取出数据
           int Data_Len = Rec_Data.parray->rgsabound->cElements; //取出一维的数据个数
           memcpy(Rec_Data_Array, (char*) Rec_Data.parray->pvData, Data_Len); //拷贝出数据
           Rec_Data_Array[Data_Len] = NULL;
  
           CString str1;
           CString str2;
           for(int i = 0; i<Data_Len ; i++)
           {
                 str2.Format("%02x",Rec_Data_Array[i]);//16进制的形式接受数据
                 str1 = str2.Right(2);//取右边两位数据(注释:一般来说是不用取右边两位数据的,但是项目中实际测试还是要取右边2位数

                                                  据才能得到真正的结果,这行代码仅供参考,可以不要)

                 this->m_receive = this->m_receive +  str1;//m_receive就为接受的数据
           }
      
     } 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 天猫评价被判定为广告怎么办 天猫一个订单用卷分单退货怎么办 天猫对已付款成功后自动退款怎么办 拼多多新人红包减价卖家怎么办 魔力宝贝手机版注册人数已满怎么办 买家投诉虚假签收淘宝卖家该怎么办 手机淘宝商家老打骚扰电话怎么办 手机上查询详单忘记服务密码怎么办 淘宝上的东西买过就找不到了怎么办 刚刚开的淘宝企业店没有流量怎么办 有图片怎么在淘宝找不到商品怎么办 白色高跟鞋鞋面磨脏了怎么办弄干净 我跟鞋后跟磨烂的脚怎么办? 内衣买回来有一股刺鼻的味道怎么办 裁剪袖子开口偏了1公分怎么办 对于这乱扔垃圾不听劝者该怎么办 感觉被南通蒲公英店铺骗了怎么办 6个月宝宝吃米粉不吃奶怎么办 十个月的宝宝不吃辅食怎么办 5个月宝宝拉肚子有泡沫怎么办 生完孩子后皮肤暗黄怎么办 开服装店批发服装的吊牌怎么办 天虹的鞋一天就坏了怎么办 车被钥匙划了露底漆了怎么办 数控铣z轴回不了参考点怎么办 白色衣服被黑色衣服染了怎么办 夏天出汗衣服粘身上都是毛毛怎么办 支付宝租的手机坏了怎么办 新买的衣服布料扎人怎么办 洗衣服的时候卫生纸沾裤子上怎么办 洗衣服给白衣服染上色了怎么办 不小心喝了游泳池的水怎么办 铁水中硅的含量高了怎么办 视频拍摄单人变双人是怎么办的 四季青进来的货比淘宝还贵怎么办 淘宝还没收货价格买贵了怎么办 在微信上赌博庄跑了怎么办 微信赌博输了10000多怎么办 欠了信用卡说来来家里调查怎么办 没用过的超市购物卡丢了怎么办 体验服抢号成功手机号填错了怎么办