zoukankan      html  css  js  c++  java
  • BCB 串口控件的使用 TComm

    昨天工作用到了串口通信,MMP的,昨天懵逼了一下午,今天终于整通了,身为菜鸟,大师们是不懂这些心痛的。

    进入主题:使用BCB提供的控件TComm编程方便且简单,TComm位于System分类里面。   / /备注(网友说这种方式可以用,当要求高的时候还是不够用的。)

    1、窗口拖入一个TComm控件

    2、属性框参数设置。

         / /备注(常需设置的参数:CommName串口名 、BaudRate波特率、ByteSize、Parity校验、ReadIntervalTimeout读串口时两字符时间间隔)

    3、接收数据并处理

      BCB提供了 OnReceiveData()自动接收来自串口的数据

    //备注(typedef void* Pointer;//标准定义的
    void __fastcall cm1ReceiveData(TObject *Sender, Pointer Buffer,  // Buffer存放着读取的数据
              WORD BufferLength); //Bufferlength 存放着 读取的数据的长度

    4、发送数据  

      用串口对象调用写数据函数

    function TComm.WriteCommData( pDataToWrite: PChar; dwSizeofDataToWrite: Word ): Boolean; // 参数一:发送的数据;参数二:发送的数据的长度
    

    5、具体使用串口

    TComm * cm1;
    //1、打开串口
    try { cm1->StartComm(); //函数会让程序挂掉,不知道为什么 try catch可规避,不影响使用 CM1PortOpenSucccessFlag=true; } catch(...) { m_step = -1; //Application->MessageBoxA("OK","串口打开失败",MB_OK|MB_SYSTEMMODAL); }

    //2、发送的数据
      char * cmd;
      cmd="MCH "; //注意:命令MCH末尾要跟着 不然串口不回数据,至于为什么,各位开脑洞吧
      bool rtn = cm1->WriteCommData(cmd,strlen(cmd)); //注意:第二个参数如果按照函数定义那样用sizeof函数是有问题的,sizeof求的是所占空间,而不是字符个数

    //3、睡眠等待Sleep(500);
        发送数据后,接着要使用cm1ReceiveData串口返回的数据,需要等待一些时间。如果不等待,一直不等的 writeCommData将会出错。

    //4、接收函数(自动接收)
    void __fastcall TparaForm::cm1ReceiveData(TObject *Sender, Pointer Buffer,
          WORD BufferLength)
    {
      char recvData[100];
      unsigned char revBuffer[100];
      memset(recvData, 0, 100);
      //AnsiString str;
      for(int i=0; i<BufferLength; i++, ((BYTE *)Buffer)++)
      {
        revBuffer[i] = *(BYTE *)Buffer ;
        recvData[i] = revBuffer[i];
      }
    //得到char* 的recvData接收数据之后,根据需要使用,下面是个例子
        m_readData=recvData; //成员变量
        m_readDataLength=BufferLength;
    }

    //5、使用完,关闭串口
    cm1->StopComm();

    工作小助攻:AccessPort串口监视软件 易学易用

    参考链接:http://www.myexception.cn/h/530898.html(串口各项参数解释)

            https://bbs.csdn.net/topics/310121049(串口监视工具)

            https://blog.csdn.net/Tercel99/article/details/46690921(这个详细)

            http://ascii.911cha.com/(Ascii值对照表)

            http://www.cnblogs.com/azbane/p/8710064.html(AnsiString与各种数据类型间的相互转换)

    棒棒哒~~么么哒

  • 相关阅读:
    1022.游船出租
    1021.统计字符
    1020.最小长方形
    1017.还是畅通工程
    1019.简单计算器
    1015.还是A+B
    1014.排名
    1013.开门人和关门人
    1011.最大连续子序列
    1009.二叉搜索树
  • 原文地址:https://www.cnblogs.com/azbane/p/8710362.html
Copyright © 2011-2022 走看看