日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

协议rs485协议,串口通讯(转发)

發(fā)布時(shí)間:2023/12/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 协议rs485协议,串口通讯(转发) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
上位機(jī)和下位機(jī)通信的問題,使用的協(xié)議rs485協(xié)議.

  題目是用VC++讓上位機(jī)和下位機(jī)進(jìn)行通信.

??????? 接在電腦上的rs232口,使用了232和485的轉(zhuǎn)換器,發(fā)送相應(yīng)的數(shù)據(jù)格式,然后上位機(jī)接受相應(yīng)的格式。

??????? 原代碼如下:

?????? // TODO: Add your control notification handler code here
?char buff[200];
?CString str;
?GetDlgItem(IDC_EDI_BUF) -> GetWindowText(str);
?sprintf(buff,"%s",(LPCSTR)str);
?//MessageBox(buff);

?//然后打開串口,開始通信
?HANDLE hCom;??//createFile函數(shù)返回的句柄
?//打開的是端口一
?hCom = CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,
??0, NULL,OPEN_EXISTING, 0, NULL);
?if(hCom == NULL)
?{
??MessageBox("打開端口一時(shí)出現(xiàn)了錯(cuò)誤");
?}


?//設(shè)置讀寫緩沖區(qū)的緩沖大小

?//改變端口的設(shè)備控制塊
?/*DCB dcb;
?GetCommState(hCom,&dcb);
?dcb.BaudRate = CBR_9600;
?dcb.ByteSize=8;//數(shù)據(jù)位8位

?dcb.Parity = NOPARITY;?//有校驗(yàn)
?
?dcb.StopBits=ONESTOPBIT; //一個(gè)停止位
?if(false==SetCommState(hCom,&dcb))
?{
??MessageBox("配置端口時(shí)出現(xiàn)了錯(cuò)誤");
?}*/

?DCB dcb;
?GetCommState(hCom,&dcb);
?dcb.BaudRate = CBR_9600;
?dcb.ByteSize = 8;
?dcb.Parity = NOPARITY;
?dcb.StopBits = ONESTOPBIT;
?
?dcb.fBinary = TRUE;
?dcb.fParity = TRUE;
?dcb.fOutxDsrFlow = false;
?dcb.fDtrControl = DTR_CONTROL_DISABLE;
?dcb.fOutxCtsFlow = false;
?
?//#ifdef LPR_DOHERELARGE
?// dcb.fRtsControl = RTS_CONTROL_ENABLE;
?//#else
?dcb.fRtsControl = RTS_CONTROL_DISABLE;
?//#endif
?
/*?dcb.fInX = false;
?dcb.fOutX = false;
?dcb.XonChar = ASCII_XON;
?dcb.XoffChar = ASCII_XOFF;
?dcb.XonLim = 100;
?dcb.XoffLim = 100;*/

?if(false==SetCommState(hCom,&dcb))
?{
??MessageBox("配置端口時(shí)出現(xiàn)了錯(cuò)誤");
?}
?
?//設(shè)置讀寫操作,將緩沖里面的數(shù)據(jù)寫入到串口里面
?BOOL isWrite = false;
?DWORD length = 100;


?COMSTAT ComStat;
?DWORD dwErrorFlags;
?ClearCommError(hCom,&dwErrorFlags,&ComStat);

?isWrite = WriteFile(hCom,buff,length,&length,NULL);
?
?if(isWrite == false)
?{
??MessageBox("寫入數(shù)據(jù)時(shí)出現(xiàn)了錯(cuò)誤");
??
?}
?//寫完數(shù)據(jù)然后從緩沖里面讀取數(shù)據(jù)
?//過一段時(shí)間才讀取緩沖里面的數(shù)據(jù)
?::Sleep(100);
?//讀取緩沖里面的數(shù)據(jù)
?BOOL isRead = false;
?char readbuf[100];
?DWORD?? bReadStatus;
?
?memset(readbuf,0,sizeof(readbuf));
?isRead = ::ReadFile(hCom,readbuf,100,&bReadStatus,NULL);
?//MessageBox(readbuf);
?GetDlgItem(IDC_RECV_BUFF) -> SetWindowText(readbuf);
?CloseHandle(hCom);

總結(jié)

以上是生活随笔為你收集整理的协议rs485协议,串口通讯(转发)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。