C++从串口接收数据怎么实现?
从串口接收数据后自动归档(远程发来的数据)各位大侠给个思路,大概要用到些什么技术?可以举点例子说明一下吗?
[解决办法]
C#里是有这种接口类
C++你GOOGLE找找看吧
[解决办法]
boost.asio似乎有串口
[解决办法]
HANDLE file = CreateFile("COM1", ....)
然后看这个http://msdn.microsoft.com/en-us/library/aa363196(v=VS.85).aspx搞清楚怎么设串口参数,还有超时乱七八糟的
然后ReadFile(file, ...) WriteFile(file, ...)
[解决办法]
[解决办法]
打开串口CREATEFILE()
楼主看看
DWORD dwThreadID;
if(hFTTPCom != INVALID_HANDLE_VALUE)//串口已经被打开,不能再次打开
{
return FALSE;
}
CString strCom;
strCom.Format(_T("\\\\.\\%s"), pComm);//add by xiaolin.
//hFTTPCom = ::CreateFile(pComm,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL );
hFTTPCom = ::CreateFile(strCom,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL );//modified by xiaolin.
if(hFTTPCom==INVALID_HANDLE_VALUE)
{
//AfxMessageBox(_T("COM1 open fail!"));
return FALSE;
}
//AfxMessageBox(_T("COM1 open SUCCESS!"));
ASSERT(hFTTPCom!=INVALID_HANDLE_VALUE); //检测打开串口操作是否成功
SetCommMask(hFTTPCom, EV_RXCHAR|EV_TXEMPTY );//设置事件驱动的类型
SetupComm( hFTTPCom, 1024,512) ; //设置输入、输出缓冲区的大小
PurgeComm( hFTTPCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ); //清干净输入、输出缓冲区
COMMTIMEOUTS CommTimeOuts ; //定义超时结构,并填写该结构
CommTimeOuts.ReadIntervalTimeout = -1;
CommTimeOuts.ReadTotalTimeoutConstant = -1;
CommTimeOuts.ReadTotalTimeoutMultiplier = -1;
CommTimeOuts.WriteTotalTimeoutConstant = -1;
CommTimeOuts.WriteTotalTimeoutMultiplier = -1;
SetCommTimeouts( hFTTPCom, &CommTimeOuts ) ;//设置读写操作所允许的超时
DCB dcb ; // 定义数据控制块结构
GetCommState(hFTTPCom, &dcb ); //读串口原来的参数设置
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.BaudRate = CBR_115200;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT ;
dcb.fBinary = TRUE ;
dcb.fParity = FALSE;
SetCommState(hFTTPCom, &dcb ) ; //串口参数配置
hMutexComTx = CreateMutex(NULL,FALSE,NULL);
memset(&olWrite,0,sizeof(OVERLAPPED));
olWrite.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
hCommWatchThread = ::CreateThread( (LPSECURITY_ATTRIBUTES) NULL, //安全属性
0,//初始化线程栈的大小,缺省为与主线程大小相同
(LPTHREAD_START_ROUTINE)CommWatchProc, //线程的全局函数
hSendWnd, //此处传入了主框架的句柄
0, &dwThreadID );
ASSERT(hCommWatchThread!=NULL);
SetThreadPriority(hFTTPOLLThread,THREAD_PRIORITY_HIGHEST);
hMainWnd = hSendWnd;
return TRUE;
[解决办法]
VC实现串口通信例程
[解决办法]
就是通过API读取!
[解决办法]
cat /dev/ttyS0