16,472
社区成员
发帖
与我相关
我的任务
分享
if(m_Comm.GetPortOpen())
m_Comm.SetPortOpen(FALSE);
/************************************************************************/
/* 这个地方有个bug;“当端口打开时操作无效” */
/************************************************************************/
m_Comm.SetCommPort(5); //选择com1
if( !m_Comm.GetPortOpen())
m_Comm.SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port");
m_Comm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位
m_Comm.SetOutBufferSize(512);
m_Comm.SetInBufferSize(1024);
m_Comm.SetInputMode(1); //1:表示以二进制方式检取数据
m_Comm.SetRThreshold(1);
CString CommName;
HANDLE h_comm;
bool ValidPort;
int PortNo;
UpdateData(true);
PortNo = 5;
//该部分用API实现对串口号有效性的检测
CommName.Format("COM%d", PortNo);
h_comm = CreateFile(CommName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
if(h_comm == INVALID_HANDLE_VALUE)
{
ValidPort = false;
}
else
{
ValidPort = true;
}
CloseHandle(h_comm);
if(!ValidPort)
{
// m_TextVisualCommSituation.Format("视觉串口:无效或被占用.请重新选择串口.");
MessageBox("该串口无效或被占用");
UpdateData(false);
return;
}
我觉得呢你在你贴的代码前先添加这段代码吧,这段程序我已经帮你改好了。就是直接检测你的com5是否被占用了。
这个是通过直接调用windows api完成的。如果有错,那就会直接弹个MessageBox出来告诉你你所选的com5就是有问题的啦。 m_Comm.SetCommPort(5); //选择com1
这句话之前,看看错误会不会出现