1. 背景
用VS2010 MFC,读取照度计的值,时间仓促没有做CRC校验。照度计是RS485通讯。
2. 代码
HANDLE xxxDlg::OpenCOM(LPCTSTR COM)
{
//打开串口
HANDLE hCom;
hCom = CreateFile(COM,
GENERIC_READ|GENERIC_WRITE,
0,//独占方式
NULL,
OPEN_EXISTING,//打开而不是创建
0,//同步方式打开
NULL);
if ((HANDLE)-1 == hCom)
{
//AfxMessageBox("打开COM失败");
return NULL;
}
else
{
//AfxMessageBox("打开COM成功");
return hCom;
}
}
/*配置照度计串口*/
void xxxDlg::ComCfg(HANDLE hCom)
{
SetupComm(hCom,1024,1024); //设置输入输出缓冲区的大小都为1024
COMMTIMEOUTS TimeOuts;
TimeOuts.ReadIntervalTimeout = 1000;
/*设定读超时*/
TimeOuts.ReadTotalTimeoutMultiplier = 500;//时间系数
TimeOuts.ReadTotalTimeoutConstant = 5000; //时间常量
/*设定写超时*/
TimeOuts.WriteTotalTimeoutMultiplier = 500;
TimeOuts.WriteTotalTimeoutConstant = 2000;
SetCommTimeouts(hCom, &TimeOuts);
DCB dcb;
GetCommState(hCom, &dcb); //获得COM口的设备控制块,从而获得相关参数
dcb.Baud