各位論壇大神,我們是OUC的本科生,近期我們的SRDP國創專案結題,遇到了點困難,想求助論壇里的各位。
我們的專案是做一個海上航行GPS“飛點”的濾波處理軟體,我所負責的部分是COM口傳輸這一塊,我現在是用VC++的API函式方法編碼...不過小弟是菜鳥一個,只好在知網上參考了一個相關的串口通信程式,真正編碼的時候還是有點不懂,主要是已知的都是關于串口的程式,中間需要進行資料讀取、資料存盤和濾波后的資料傳輸(傳輸到電腦上其他軟體,如HYPACK),呃...確實不太會,目前就編了這些,求大神們指點一二~~~
//#include "com.h"
//#include "common.h"
//#include "Debug.h"
#include <windows.h>
#include <process.h>
int main()
{
HANDLE m_hCom; char sPort[15] = "COM1";
if (m_hCom = CreateFile(sPort, GENERIC_READ | GENERIC_WRITE 0, NULL, OPEN_EXISTING | CREATE_NEW, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL) = (HANDLE) - 1)
return(FALSE);
DCB dcb; //串行通信設備控制塊結構
BOOL bRetVal;
GetCommState(m_hCom, &dcb);
dcb.BaudRate = 9600;//波特率
dcb.ByteSize = 8;//埠當前使用的資料位
dcb.Parity = NOPARITY;//奇偶校驗是否允許
dcb.StopBits = ONESTOPBIT; //停止位數
dcbfOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fOutxCtsFlow = FALSE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
dcb.fInX = dcb.fOutX = FALSE;
dcb.fBinary = TRUE; dcb.fParity = TRUE;
fRetVal = SetCommState(m_hCom, &dcb);
if (bRetVal)//發送一個RTS信號
EscapeCommFunction(m_hCom, SETDTR);
else
CloseHandle(m_hCom);
SetupComm(m_hCom, 4096, 4096);
PurgeComm(m_hCom,
PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
COMMTIMEOUTS CommTimeOuts; //設定超時
CommTimeOuts.ReadIntervalTimeout =
0xFFFFFFFF;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 1000;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 1000;
SetCommTimeouts(m_hCom, &CommTimeOuts);
BYTE binbuff[100]; //放置讀入的資料
COMSTAT cs;
DWORD nBytesRead, dwEvent, dwError;
if (!SetCommMask(m_hCom, EV_RXCHAR))
return(FALSE);
while (bConnected)
{
if (WaitCommEvent(m_hCom, &dwEvent, NULL)) //等待事件的發生
{
ClearCommError(m_hCom, &dwError, &cs);
if ((dwEvent&EV_RXCHAR) && cs.cbInQue)
{
if (!ReadFile(m_hCom, binbuff, cs.cbInQue,
&nBytesRead, NULL)
ProcessCommError(GetLastError()); //用戶撰寫的處理錯誤的函式
}
else{
if (nByteRead)
ProcessBytes(inbuff, nBytesRead);
}//用戶撰寫的對接收的資料的處理
else
ProcessCommError(GetLastError());
}
}
PurgeComm(m_hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
SetCommMask(m_hCom, 0);
if (bConnected) CloseHandle(m_hCom);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/133341.html
標籤:網絡通信
