port already open 怎么解决,求救!
再问下 port already open 怎么解决?说明:这框我没写的,而自己写 的 打开串口失败则弹出AfxMessageBox("cannot open serial port")框框的,但是失败时没弹出!却弹出port already open这个框框,这到底是why呢?郁闷。。。 在线等。。。。 怎么没人看的? 懒得理你,乱改帖子! 明白,谢谢LS,再问下 port already open 怎么解决? 貌似在调试串口程序吧?
port already open
?
try
{
Comm.Open()
}
catch(CException &e)
{
}
//
问奇怪的问题最好先贴代码 回【5楼】 xukaiming
是在调串口的,第一次写的串口程序,就头疼了。。。
void CSCOMMTESTDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData+=strtemp; //加入接收编辑框对应字符串
}
}
}
void CSCOMMTESTDlg::OnOpenportbutton()
{
// TODO: Add your control notification handler code here
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(3); //选择com3
if( !m_ctrlComm.GetPortOpen())
{
m_ctrlComm.SetPortOpen(TRUE);//打开串口
AfxMessageBox("open serial port");
}
else
AfxMessageBox("cannot open serial port");
m_ctrlComm.SetSettings("4800,n,8,1"); //波特率4800,无校验,8个数据位,1个停止位
m_ctrlComm.SetInputMode(1);// 以二进制方式检取数据
m_ctrlComm.SetRThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm.GetInput(); //先预读缓冲区以清除残留数据
}
看看有问题不?再声明下用的是USB转的串口的!! 弹出port already open这个框框
是因为MSComm控件可以捕获错误8013,自己弹出的。端口已经打开。 但是还是通信不了啊。? 哦,你说的这个意思啊。
com3是系统他用的,你不能使用。 一般分配给 Modem
http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_475366.JPG
(原文件名:com3.JPG) 不是的,我详细检查过了,com3是USB转的串口来的,是不是VC程序有问题啊?一直都通信不了。。 仔细看了一下,你等会。我帮你试一下。 你太好了。。。 好像程序不会出现这个问题,还是串口被占用了。
安装usb串口的时候可以选择其它串口吗? 建议:
1、把所有用到这个串口的软件关闭。
2、运行串口调试助手,看可不可以打开 ----- 如果不可以打开,重启试试,有可能是某个后台程序占用串口
3、如果串口调试助手可以打开,则把串口调试助手关闭,运行你的程序 ------ 如果此时报错,则检查你的程序有没有可能多次打开串口 发两个软件,一个虚拟串口,一个串口助手。
先用串口助手看能不能打开COM3。如果不能检查自己的COM3。
用虚拟串口虚拟出COM4,COM5。
串口助手设置成COM4,自己程序设置成COM5。2个互发调试。
点击此处下载 ourdev_475375.rar(文件大小:2.81M) (原文件名:Virtual Serial Port Driverv6.rar)
点击此处下载 ourdev_475376.rar(文件大小:114K) (原文件名:串口调试助手V2.2.rar) 用串口调试时,是可以打开的,所以我就怀疑是不是不VC程序的问题了,但是我对vc了解又不多。所以问题就还不会解决。
好的,我试下用虚拟串口自发自收行不行先。。 奇怪了啊,你那个程序在我的电脑上没问题 啊 是程序的问题,谢谢各位! 说明一下,Mscomm控件的GetPortOpen函数仅能判断本程序自身的串口状态,其他程序改变的串口状态由事件响应自动处理,顶一下zhenke发的虚拟串口Virtual Serial Port Driverv6.rar工具,不错!!!
页:
[1]