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\r\n"; //注意:命令MCH末尾要跟着\r\n不然串口不回數據,至於為什么,各位開腦洞吧
  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與各種數據類型間的相互轉換)

 

棒棒噠~~么么噠

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM