串口通信问题
遇到个问题,用vc++做串口通讯时,第一次按钮控件点击有效,但第二次按钮控件点击时命令无法响应。程序是用API函数写的。可能是关闭函数的问题,但又不知如何解决。请大家不吝...
遇到个问题,用vc++做串口通讯时,第一次按钮控件点击有效,但第二次按钮控件点击时命令无法响应。程序是用API函数写的。可能是关闭函数的问题,但又不知如何解决。请大家不吝赐教啊。程序如下:
void CMovingCaptureDlg::OnUpbutton()
{
// TODO: Add your control notification handler code here
CString str;
GetDlgItemText(IDC_UPBUTTON,str);
m_mycontrol.Open(1,9600);
if(str=="上转")
{
m_mycontrol.TurnUp();
SetDlgItemText(IDC_UPBUTTON,"停止");
GetDlgItem(IDC_DOWNBUTTON)->EnableWindow(FALSE);
}
else
{
if(str=="停止")
{
m_mycontrol.Stop();
SetDlgItemText(IDC_UPBUTTON,"上转");
GetDlgItem(IDC_DOWNBUTTON)->EnableWindow(TRUE);
}
}
}
//云台上转
void CControlWT::TurnUp()
{
UpBuffer="U";
SendData( UpBuffer, 1);
return;
}
DWORD CControlWT::SendData(char *buffer, DWORD dwBytesWritten)
{
if( !m_bOpened || m_hComDev == NULL ) return( 0 );
DWORD dwErrorFlags;
COMSTAT ComStat;
ClearCommError( m_hIDComDev, &dwErrorFlags, &ComStat );
BOOL bWriteStat;
bWriteStat = WriteFile( m_hComDev, buffer, dwBytesWritten, &dwBytesWritten,
&m_OverlappedWrite );
if( !bWriteStat)
{
if ( GetLastError() == ERROR_IO_PENDING )
{
WaitForSingleObject( m_OverlappedWrite.hEvent, 1000 );
return dwBytesWritten;
}
return 0;
}
return dwBytesWritten;
}
回复3楼:有效是指云台可以响应命令,比如说:我点击“上转”可以实现上转,但是点停止或下转就没有响应,云台继续上转,停不下来,除非关电源。而用“串口调试助手”是没有上述问题的。但是“串口调试助手”是用ActiveX控件 Microsoft Communications Control做的。我用的是API函数。 展开
void CMovingCaptureDlg::OnUpbutton()
{
// TODO: Add your control notification handler code here
CString str;
GetDlgItemText(IDC_UPBUTTON,str);
m_mycontrol.Open(1,9600);
if(str=="上转")
{
m_mycontrol.TurnUp();
SetDlgItemText(IDC_UPBUTTON,"停止");
GetDlgItem(IDC_DOWNBUTTON)->EnableWindow(FALSE);
}
else
{
if(str=="停止")
{
m_mycontrol.Stop();
SetDlgItemText(IDC_UPBUTTON,"上转");
GetDlgItem(IDC_DOWNBUTTON)->EnableWindow(TRUE);
}
}
}
//云台上转
void CControlWT::TurnUp()
{
UpBuffer="U";
SendData( UpBuffer, 1);
return;
}
DWORD CControlWT::SendData(char *buffer, DWORD dwBytesWritten)
{
if( !m_bOpened || m_hComDev == NULL ) return( 0 );
DWORD dwErrorFlags;
COMSTAT ComStat;
ClearCommError( m_hIDComDev, &dwErrorFlags, &ComStat );
BOOL bWriteStat;
bWriteStat = WriteFile( m_hComDev, buffer, dwBytesWritten, &dwBytesWritten,
&m_OverlappedWrite );
if( !bWriteStat)
{
if ( GetLastError() == ERROR_IO_PENDING )
{
WaitForSingleObject( m_OverlappedWrite.hEvent, 1000 );
return dwBytesWritten;
}
return 0;
}
return dwBytesWritten;
}
回复3楼:有效是指云台可以响应命令,比如说:我点击“上转”可以实现上转,但是点停止或下转就没有响应,云台继续上转,停不下来,除非关电源。而用“串口调试助手”是没有上述问题的。但是“串口调试助手”是用ActiveX控件 Microsoft Communications Control做的。我用的是API函数。 展开
3个回答
展开全部
不明白你这个void CMovingCaptureDlg::OnUpbutton()里面为什么要将按钮在“上转”以后置成灰色,然后又一个判断“停止”再打开的按钮逻辑。
如果是云台不响应你的程序中的串口命令,可使用串口调试助手,然后多次比较你的程序发送云台控制指令的串口数据包是否正确。
如果是云台不响应你的程序中的串口命令,可使用串口调试助手,然后多次比较你的程序发送云台控制指令的串口数据包是否正确。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一次按钮控件点击有效,但第二次按钮控件点击时命令无法响应。这句话讲得不太明白,有效是指什么有效?无法响应是指什么无法响应?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询