設備與單片機串口通信程序,寫了兩個線程SendThread 和ReadThread,單擊發(fā)送按鈕發(fā)送線程發(fā)送一組命令數(shù)據(jù)到單片機,單片機再返回一組數(shù)據(jù),讀線程把數(shù)據(jù)顯示在編輯框里。求解怎么才能設置單擊一次按鈕,實現(xiàn)比如1分鐘內(nèi)發(fā)送600次數(shù)據(jù),接收600次呢。
創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供鄯善網(wǎng)站建設、鄯善做網(wǎng)站、鄯善網(wǎng)站設計、鄯善網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、鄯善企業(yè)網(wǎng)站模板建站服務,10余年鄯善做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。
C/C++ code?
LONG OnSendComm(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
return TRUE;
}
BYTE ConvertHexChar(BYTE ch)
{
if((ch='0')(ch='9'))
return ch-0x30;
else if((ch='A')(ch='F'))
return ch-'A'+10;
else if((ch='a')(ch='f'))
return ch-'a'+10;
else
return -1;}
DWORD WINAPI SendThread (PVOID pArg) {
HWND hwndSText;
DWORD cBytes;
WCHAR szText[TEXTSIZE];
WCHAR szText1[TEXTSIZE];
WCHAR szText2[TEXTSIZE];
WCHAR szTextt[TEXTSIZE];
WCHAR szTexto[TEXTSIZE];
char szAnsi[TEXTSIZE];
size_t siz;
BYTE tmpByte=0x00;
int strLen=sizeof(szAnsi)-1;
BYTE cmd[TEXTSIZE];
byte cmd1,cmd2;
memset(cmd,'\0',sizeof(cmd));
hwndSText = GetDlgItem (hwnd, ID_SENDTEXT);
for(int i=0;i599;i++){ //發(fā)送600次 每次間隔100ms
Sleep(100);
if(WaitForSingleObject(g_hSendEvent,-1)==WAIT_OBJECT_0)
{
// 獲得發(fā)送內(nèi)容并轉(zhuǎn)換成asci碼
GetWindowText (hwndSText, szText, dim(szText));
swscanf(szText,L"%[^ ]",szText1);
swscanf(szText,L"%*s%s",szText2);
byte cmd1=wcstol(szText1,NULL,16);
limit=wcstol(szText2,NULL,10);
byte cmd2=0x68+0xA1+0x04+cmd1;
wsprintf(szTexto,L"%02X",cmd2);
wsprintf(szTextt,L"68 a1 04 %s %s",szText1,szTexto);
wcstombs_s (siz, szAnsi, sizeof (szAnsi), szTextt, _TRUNCATE);
for(int i=0,j=0;i64,jstrLen;i++,j++)
{
if(szAnsi[j]==' ')
++j;
tmpByte=szAnsi[j];
cmd[i]=ConvertHexChar(tmpByte)4;
if(szAnsi[++j]==' ')
++j;
tmpByte=szAnsi[j];
cmd[i]=cmd[i]+(ConvertHexChar(tmpByte)0xF);
}
你可以這樣操作:
Form1.BeginInvoke(Sub()
'一些操作
End Sub)
這樣主線程就會放下手里的事情并執(zhí)行Sub里的操作了
不知道你是不是用51單片機往串口發(fā)數(shù)據(jù),是的話那是因為51的sbuf最多存放8個字節(jié),所以你發(fā)12個字節(jié)會分成兩次發(fā)完。還有在接收的時候最好定義好通信協(xié)議,比如加一個偵頭,一個偵尾,通過這兩個字節(jié)的內(nèi)容來接收數(shù)據(jù)。
老兄,提問還是給點懸賞分嘛,不要吝嗇哪點分,知識是無價的,你給得越多,回答你的人才會越多。
上面的代碼看不出問題,如果初始化串口控件時已經(jīng)注冊了AxMSComm1_OnComm,有數(shù)據(jù)接收應該能觸發(fā),至于為什么沒有觸發(fā),要看看你的接收方是否已經(jīng)收到你的發(fā)出指令,是否已經(jīng)有響應數(shù)據(jù)回發(fā)。
建議分開調(diào)試,用一個通用的串口助手,如格西烽火串口助手之類的,分別調(diào)試你的上位機和下位機。格西烽火串口助手能輕松的定制如你上面的發(fā)送數(shù)據(jù)。
分享名稱:vb.net串口定時發(fā)送的簡單介紹
本文來源:http://sd-ha.com/article48/hdhghp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、網(wǎng)站排名、面包屑導航、定制開發(fā)、網(wǎng)站維護、品牌網(wǎng)站設計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)