BCB 串口控件的使用 TComm
昨天工作用到了串口通信,MMP的,昨天懵逼了一下午,今天終于整通了,身為菜鳥(niǎo),大師們是不懂這些心痛的。
進(jìn)入主題:使用BCB提供的控件TComm編程方便且簡(jiǎn)單,TComm位于System分類(lèi)里面。?? / /備注(網(wǎng)友說(shuō)這種方式可以用,當(dāng)要求高的時(shí)候還是不夠用的。)
1、窗口拖入一個(gè)TComm控件
2、屬性框參數(shù)設(shè)置。
/ /備注(常需設(shè)置的參數(shù):CommName串口名 、BaudRate波特率、ByteSize、Parity校驗(yàn)、ReadIntervalTimeout讀串口時(shí)兩字符時(shí)間間隔)
3、接收數(shù)據(jù)并處理
BCB提供了 OnReceiveData()自動(dòng)接收來(lái)自串口的數(shù)據(jù)
//備注(typedef void* Pointer;//標(biāo)準(zhǔn)定義的void __fastcall cm1ReceiveData(TObject *Sender, Pointer Buffer, // Buffer存放著讀取的數(shù)據(jù)WORD BufferLength); //Bufferlength 存放著 讀取的數(shù)據(jù)的長(zhǎng)度
4、發(fā)送數(shù)據(jù)
用串口對(duì)象調(diào)用寫(xiě)數(shù)據(jù)函數(shù)
function?TComm.WriteCommData(?pDataToWrite:?PChar;?dwSizeofDataToWrite:?Word?):?Boolean; // 參數(shù)一:發(fā)送的數(shù)據(jù);參數(shù)二:發(fā)送的數(shù)據(jù)的長(zhǎng)度5、具體使用串口
TComm * cm1; //1、打開(kāi)串口try{cm1->StartComm(); //函數(shù)會(huì)讓程序掛掉,不知道為什么 try catch可規(guī)避,不影響使用 CM1PortOpenSucccessFlag=true;}catch(...){m_step = -1;//Application->MessageBoxA("OK","串口打開(kāi)失敗",MB_OK|MB_SYSTEMMODAL);}
//2、發(fā)送的數(shù)據(jù)
? char * cmd;
? cmd="MCH\r\n"; //注意:命令MCH末尾要跟著\r\n不然串口不回?cái)?shù)據(jù),至于為什么,各位開(kāi)腦洞吧
? bool rtn = cm1->WriteCommData(cmd,strlen(cmd)); //注意:第二個(gè)參數(shù)如果按照函數(shù)定義那樣用sizeof函數(shù)是有問(wèn)題的,sizeof求的是所占空間,而不是字符個(gè)數(shù)
//3、睡眠等待Sleep(500);
發(fā)送數(shù)據(jù)后,接著要使用cm1ReceiveData串口返回的數(shù)據(jù),需要等待一些時(shí)間。如果不等待,一直不等的 writeCommData將會(huì)出錯(cuò)。
//4、接收函數(shù)(自動(dòng)接收)
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接收數(shù)據(jù)之后,根據(jù)需要使用,下面是個(gè)例子
??? m_readData=recvData; //成員變量
??? m_readDataLength=BufferLength;
}
//5、使用完,關(guān)閉串口
cm1->StopComm();
?
?
?
工作小助攻:AccessPort串口監(jiān)視軟件 易學(xué)易用
參考鏈接:http://www.myexception.cn/h/530898.html(串口各項(xiàng)參數(shù)解釋)
?? https://bbs.csdn.net/topics/310121049(串口監(jiān)視工具)
? ?https://blog.csdn.net/Tercel99/article/details/46690921(這個(gè)詳細(xì))
? ? http://ascii.911cha.com/(Ascii值對(duì)照表)
? ? http://www.cnblogs.com/azbane/p/8710064.html(AnsiString與各種數(shù)據(jù)類(lèi)型間的相互轉(zhuǎn)換)
?
棒棒噠~~么么噠
?
轉(zhuǎn)載于:https://www.cnblogs.com/azbane/p/8710362.html
總結(jié)
以上是生活随笔為你收集整理的BCB 串口控件的使用 TComm的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 解决 Let’s Encrypt SSL
- 下一篇: 刷OJ时输入输出与字符串