我想下边这样做,难道有什么错误吗?为什么开始的时候一切正常,但是过5分钟左右Run()函数中的循环就退出了。收发的等待时间是200ms绝对没有问题。我在Delphi中用SPCOMM测试过,跟OMRON C200H的PLC通讯,100ms的间隔都可以,工作完全正常。可见不是硬件的问题。真是百思不得其解。高手麻烦帮忙看看呀。BOOL CSerialPortThread::InitInstance()
{
try
{
COMMCONFIG config;
CSerialPort::GetDefaultConfig(1, config); port.Open(1, 9600, CSerialPort::EvenParity, 7, CSerialPort::TwoStopBits, CSerialPort::XonXoffFlowControl);
}
catch (CSerialException* pEx)
{
TRACE(_T("Handle Exception, Message:%s\n"), pEx->GetErrorMessage());
pEx->Delete();
}
// SetTimer(NULL,1001,50,NULL);
return TRUE;
}int CSerialPortThread::Run()
{
// TODO: Add your specialized code here and/or call the base class
static int i=0;
while(true)
{
strcpy(szMessage,"@00TS1234567890ABCDEF");
GenerateFCS(szMessage);
port.WriteEx(szMessage,strlen(szMessage));
port.Flush();
memset(szMessage,0,256);
Sleep(100);
port.ReadEx(szMessage,10);
if(CheckFCS(szMessage))
{
MessageBox(NULL,"数据校验错误!!!","提示",MB_ICONSTOP);
break;
}
Sleep(100); TRACE("\n Times Count: %d",i); // 这里最后一次显示266 i++;
} port.Close();
return CWinThread::Run();
}
{
try
{
COMMCONFIG config;
CSerialPort::GetDefaultConfig(1, config); port.Open(1, 9600, CSerialPort::EvenParity, 7, CSerialPort::TwoStopBits, CSerialPort::XonXoffFlowControl);
}
catch (CSerialException* pEx)
{
TRACE(_T("Handle Exception, Message:%s\n"), pEx->GetErrorMessage());
pEx->Delete();
}
// SetTimer(NULL,1001,50,NULL);
return TRUE;
}int CSerialPortThread::Run()
{
// TODO: Add your specialized code here and/or call the base class
static int i=0;
while(true)
{
strcpy(szMessage,"@00TS1234567890ABCDEF");
GenerateFCS(szMessage);
port.WriteEx(szMessage,strlen(szMessage));
port.Flush();
memset(szMessage,0,256);
Sleep(100);
port.ReadEx(szMessage,10);
if(CheckFCS(szMessage))
{
MessageBox(NULL,"数据校验错误!!!","提示",MB_ICONSTOP);
break;
}
Sleep(100); TRACE("\n Times Count: %d",i); // 这里最后一次显示266 i++;
} port.Close();
return CWinThread::Run();
}
try {
}
catch(...)
{
}
括起来看看?
你的函数怎么叫退出了有没有MessageBox(NULL,"数据校验错误!!!","提示",MB_ICONSTOP);