大致程序是这样的
button1;
m_Com.SetCommPort(1); //选择端口
if(!m_Com.GetportOpen()) //打开端口
{
m_Com.SetPortOpen(TRUE);
}
button2的程序
m_Com.SetCommPort(2); //选择端口
if(!m_Com.GetportOpen()) //打开端口
{
m_Com.SetPortOpen(TRUE);
}
我先按下button1,没有问题,然后再按下button2,就会弹出对话框,显示端口已经被打开。
这是什么原因?
如果我想把提示端口已经打开的对话框屏蔽怎么做?
5 个解决方案
#1
端口1、2没有关联,不过看你的程序没有CloseCom()指令!
#2
不能使用同一个m_Com,应该这样:
button1;
m_Com_1.SetCommPort(1); //选择端口
if(!m_Com_1.GetportOpen()) //打开端口
{
m_Com_1.SetPortOpen(TRUE);
}
button2的程序
m_Com_2.SetCommPort(2); //选择端口
if(!m_Com_2.GetportOpen()) //打开端口
{
m_Com_2.SetPortOpen(TRUE);
}
button1;
m_Com_1.SetCommPort(1); //选择端口
if(!m_Com_1.GetportOpen()) //打开端口
{
m_Com_1.SetPortOpen(TRUE);
}
button2的程序
m_Com_2.SetCommPort(2); //选择端口
if(!m_Com_2.GetportOpen()) //打开端口
{
m_Com_2.SetPortOpen(TRUE);
}
#3
谢谢 回复人: sans(sans)
我也发现了这个问题,就是不能使用同一个mscomm,但考虑的实际情况是要求我能选择端口进行通讯,比如客户最初选了com1,后来他想换一个端口试试比如com2,这样我就必须用一个mscomm。而有可能在com1-》com2的过程如果com1没有被关闭过,那么再直接去调用这个函数就会出现问题。
不过我发现mscomm有点问题,我现在是这样理解,不知道对不对。
m_Com.GetPortOpen()这个函数并没有真正的判断端口是否打开。
而是根据m_Com.SetPortOpen()这个函数来记忆端口是否打开,
所以GetPortOpen()函数其实只是一个flag,它没有做硬件上的检查。
SetCommPort()函数它先会判断GetPortOpen()是否为真,如果为真,那么就会弹出对话框“端口已经打开”,我一开始提到的报错就是由于这个原因。尽管实际端口2没有打开。
SetPortOpen()函数它在打开端口之前会真正判断一下端口是否被打开了,如果端口被打开了,那么就会弹出对话框“端口已经打开”,这个时候端口才是真正打开的状态。
根据以上的分析我写了一个我自己认为是比较好的初始化函数。
BOOL CommInit(int port)
{
if(m_Com.GetCommPort!=port) 判断端口是否变了
{
if(m_Com.GetPortOpen()) 把原先的端口关闭
{
m_Com.SetPortOpen(FALSE);
}
m_Com.SetPortOpen(port); 设置新的端口
}
if(!m_Com.GetPortOpen())
{
m_Com.SetPortOpen(TRUE);
}
}
我也发现了这个问题,就是不能使用同一个mscomm,但考虑的实际情况是要求我能选择端口进行通讯,比如客户最初选了com1,后来他想换一个端口试试比如com2,这样我就必须用一个mscomm。而有可能在com1-》com2的过程如果com1没有被关闭过,那么再直接去调用这个函数就会出现问题。
不过我发现mscomm有点问题,我现在是这样理解,不知道对不对。
m_Com.GetPortOpen()这个函数并没有真正的判断端口是否打开。
而是根据m_Com.SetPortOpen()这个函数来记忆端口是否打开,
所以GetPortOpen()函数其实只是一个flag,它没有做硬件上的检查。
SetCommPort()函数它先会判断GetPortOpen()是否为真,如果为真,那么就会弹出对话框“端口已经打开”,我一开始提到的报错就是由于这个原因。尽管实际端口2没有打开。
SetPortOpen()函数它在打开端口之前会真正判断一下端口是否被打开了,如果端口被打开了,那么就会弹出对话框“端口已经打开”,这个时候端口才是真正打开的状态。
根据以上的分析我写了一个我自己认为是比较好的初始化函数。
BOOL CommInit(int port)
{
if(m_Com.GetCommPort!=port) 判断端口是否变了
{
if(m_Com.GetPortOpen()) 把原先的端口关闭
{
m_Com.SetPortOpen(FALSE);
}
m_Com.SetPortOpen(port); 设置新的端口
}
if(!m_Com.GetPortOpen())
{
m_Com.SetPortOpen(TRUE);
}
}
#4
还有一个问题是如何才能判断端口是否真正打开,
刚才说了GetPortOpen()函数是判断不了端口是否真正打开的,因为我先把端口一打开,然后运行这个程序,断点执行,发觉得到的结论是false,就是端口没有打开
刚才说了GetPortOpen()函数是判断不了端口是否真正打开的,因为我先把端口一打开,然后运行这个程序,断点执行,发觉得到的结论是false,就是端口没有打开
#5
我没看你的代码,两个串口是没有关联的,
我是学串口的,想的话找我了,
zhang865@sohu.com
我是学串口的,想的话找我了,
zhang865@sohu.com
#1
端口1、2没有关联,不过看你的程序没有CloseCom()指令!
#2
不能使用同一个m_Com,应该这样:
button1;
m_Com_1.SetCommPort(1); //选择端口
if(!m_Com_1.GetportOpen()) //打开端口
{
m_Com_1.SetPortOpen(TRUE);
}
button2的程序
m_Com_2.SetCommPort(2); //选择端口
if(!m_Com_2.GetportOpen()) //打开端口
{
m_Com_2.SetPortOpen(TRUE);
}
button1;
m_Com_1.SetCommPort(1); //选择端口
if(!m_Com_1.GetportOpen()) //打开端口
{
m_Com_1.SetPortOpen(TRUE);
}
button2的程序
m_Com_2.SetCommPort(2); //选择端口
if(!m_Com_2.GetportOpen()) //打开端口
{
m_Com_2.SetPortOpen(TRUE);
}
#3
谢谢 回复人: sans(sans)
我也发现了这个问题,就是不能使用同一个mscomm,但考虑的实际情况是要求我能选择端口进行通讯,比如客户最初选了com1,后来他想换一个端口试试比如com2,这样我就必须用一个mscomm。而有可能在com1-》com2的过程如果com1没有被关闭过,那么再直接去调用这个函数就会出现问题。
不过我发现mscomm有点问题,我现在是这样理解,不知道对不对。
m_Com.GetPortOpen()这个函数并没有真正的判断端口是否打开。
而是根据m_Com.SetPortOpen()这个函数来记忆端口是否打开,
所以GetPortOpen()函数其实只是一个flag,它没有做硬件上的检查。
SetCommPort()函数它先会判断GetPortOpen()是否为真,如果为真,那么就会弹出对话框“端口已经打开”,我一开始提到的报错就是由于这个原因。尽管实际端口2没有打开。
SetPortOpen()函数它在打开端口之前会真正判断一下端口是否被打开了,如果端口被打开了,那么就会弹出对话框“端口已经打开”,这个时候端口才是真正打开的状态。
根据以上的分析我写了一个我自己认为是比较好的初始化函数。
BOOL CommInit(int port)
{
if(m_Com.GetCommPort!=port) 判断端口是否变了
{
if(m_Com.GetPortOpen()) 把原先的端口关闭
{
m_Com.SetPortOpen(FALSE);
}
m_Com.SetPortOpen(port); 设置新的端口
}
if(!m_Com.GetPortOpen())
{
m_Com.SetPortOpen(TRUE);
}
}
我也发现了这个问题,就是不能使用同一个mscomm,但考虑的实际情况是要求我能选择端口进行通讯,比如客户最初选了com1,后来他想换一个端口试试比如com2,这样我就必须用一个mscomm。而有可能在com1-》com2的过程如果com1没有被关闭过,那么再直接去调用这个函数就会出现问题。
不过我发现mscomm有点问题,我现在是这样理解,不知道对不对。
m_Com.GetPortOpen()这个函数并没有真正的判断端口是否打开。
而是根据m_Com.SetPortOpen()这个函数来记忆端口是否打开,
所以GetPortOpen()函数其实只是一个flag,它没有做硬件上的检查。
SetCommPort()函数它先会判断GetPortOpen()是否为真,如果为真,那么就会弹出对话框“端口已经打开”,我一开始提到的报错就是由于这个原因。尽管实际端口2没有打开。
SetPortOpen()函数它在打开端口之前会真正判断一下端口是否被打开了,如果端口被打开了,那么就会弹出对话框“端口已经打开”,这个时候端口才是真正打开的状态。
根据以上的分析我写了一个我自己认为是比较好的初始化函数。
BOOL CommInit(int port)
{
if(m_Com.GetCommPort!=port) 判断端口是否变了
{
if(m_Com.GetPortOpen()) 把原先的端口关闭
{
m_Com.SetPortOpen(FALSE);
}
m_Com.SetPortOpen(port); 设置新的端口
}
if(!m_Com.GetPortOpen())
{
m_Com.SetPortOpen(TRUE);
}
}
#4
还有一个问题是如何才能判断端口是否真正打开,
刚才说了GetPortOpen()函数是判断不了端口是否真正打开的,因为我先把端口一打开,然后运行这个程序,断点执行,发觉得到的结论是false,就是端口没有打开
刚才说了GetPortOpen()函数是判断不了端口是否真正打开的,因为我先把端口一打开,然后运行这个程序,断点执行,发觉得到的结论是false,就是端口没有打开
#5
我没看你的代码,两个串口是没有关联的,
我是学串口的,想的话找我了,
zhang865@sohu.com
我是学串口的,想的话找我了,
zhang865@sohu.com