我遇到一个问题:
windows 7 32位系统里用VSPD创建了一对互联的标准设置的虚拟串口3和4。
其中一个端口4连着一个被控制软件B。
我自己写的一个小软件A打开另外一个端口3,发送数据给这个端口3,另外一个软件收到数据后会回馈一个特殊字符ACK 06(00000110),我不关心有没有这个ACK信号,它可有可无,我只在意每次软件B都能稳定收到A的数据。
下面是我VC内com3初始化函数内的代码:
用的标准串口控件,mscomm.ocx
> try
> {
> m_Mscomm3.put_CommPort(3);//串口号
> }
> catch (CException* e)
> {
> e->Delete();
> MessageBox("串口号设置有误!","提示");
> return;
> }
>
> if ( !m_Mscomm3.get_PortOpen())
> {
> try
> {
> m_Mscomm3.put_PortOpen( TRUE ); //打开串口
> }
> catch (CException* e)
> {
> e->Delete();
> MessageBox("发送串口打开失败!","提示");
> return;
> }
>
> }
> CString strT;
> strT="9600 ,n, 8, 1";
> m_Mscomm3.put_Settings(strT);
> m_Mscomm3.put_InputMode( 1 );
> m_Mscomm3.put_RThreshold( 1 );
> m_Mscomm3.put_InputLen(0);
> m_Mscomm3.get_Input();
发送到串口3的代码
if (m_Mscomm3.get_PortOpen())
{
m_Mscomm3.put_Output(COleVariant(strText));
}
//发送的数据格式是:02 ** ** ** ** ** **03 0D
//*号代表ASCii的16进制代码每次只发十几个阿拉伯数字(30-39),02是STX,03是ETX,0D是CR(\r).
问题是:有的时候B只能接受到A的第一次发来的数据,有的时候能连续收到几次,只要出现一次收不到的情况,以后每次都收不到,只能重启软件B后才能再次收到(串口调试软件可以连续稳定收到数据)。完全没有规律,不稳定。但是软件B如果直接连接串口1上的其他硬件,可以稳定的接收数据。是不是我的虚拟串口和软件B哪里不兼容,设置有问题,大家给点建议,谢谢。一个问题内的分不能分开发,类似的问题我可以多开几个,给大家发分。