主题:串口通讯问题
我在写一个测试程序,需要与USB连接的通讯板通讯,通讯板驱动程序已经安装好,显示的串口号是COM3,打开串口及写串口都正常,但是通讯板没有回应。只要我写入命令字符串,通讯板正常的回应应该是错误代码或应答代码。比如我写入字符串“T11001”,通讯板回应"A5".但现在通讯板没有任何反应,请教各位高手,这是怎么回事?下面是代码,我用的是CSerialPort类。
void CDataCal::OnButtonOpencom()
{
// TODO: Add your control notification handler code here
CString str;
CString strName;
int sel=m_SelCom.GetCurSel();
m_SelCom.GetLBText(sel,str);//取得要打开的通信端口
CString t=str.Right(1);
dwPort=atoi(t);
DispText(str);
//打开串口COM
CButton *but=(CButton*)GetDlgItem(IDC_BUTTON_OPENCOM);
but->GetWindowText(strName);
unsigned int dwBaud=19200;
unsigned int dwStopBit=1;
unsigned int dwDataBits=8;
char chParity;
CString strBaud,strStopBit,strDataBits,strParity;
// DWORD dwStopBit,dwDataBits,dwBaut;
strBaud.Format("波特率:%d",dwBaud);
strStopBit.Format("停止位:%d",dwStopBit);
strDataBits.Format("数据位:%d",dwDataBits);
strParity.Format("校验:%c",'N');
if(strName=="打开")
{
//hCom = CreateFile(str , GENERIC_READ | GENERIC_WRITE,
// 0, NULL, OPEN_EXISTING, 0, 0);
if(m_comport.InitPort(this,dwPort,dwBaud,'N',dwDataBits,dwStopBit,EV_RXFLAG|EV_RXCHAR,512))
{
m_comport.StartMonitoring();
but->SetWindowText("关闭");
DispText("打开");
DispText("串口初始化完成!");
DispText(strBaud);
DispText(strDataBits);
DispText(strStopBit);
DispText(strParity);
CButton *tmp=(CButton*)GetDlgItem(IDC_BUTTON_INITILATECOM);
tmp->EnableWindow(TRUE);
}
else
{
MessageBox("串口打开失败!");
CButton *tmp=(CButton*)GetDlgItem(IDC_BUTTON_INITILATECOM);
tmp->EnableWindow(FALSE);
}
}
else
{
but->SetWindowText("打开");
m_comport.StopMonitoring();
m_comport.ClosePort();
DispText("关闭");
}
}
void CDataCal::OnCommRecv(WPARAM ch,LPARAM port)
{
// UpdateData(true);
//读取串口上的字符
//char str[100];
CString m_ReceiveMsg;
m_ReceiveMsg.Format("%c",ch);
// m_comport.ReceiveChar(port,comstat);//.ReadString(str, 100);
DispText(m_ReceiveMsg);
UpdateData();
}
void CDataCal::OnButtonInitasic()
{
// TODO: Add your control notification handler code here
// CCHIPINIT dlg;
// dlg.DoModal();
/* if(dlg.DoModal()==IDOK)
{
flip=this->m_chit.m_flip.GetCheck();
sel1=this->m_chit.m_sel1.GetCheck();
sel2=m_chit.m_sel2.GetCheck();
sel3=m_chit.m_sel3.GetCheck();
sel4=m_chit.m_sel4.GetCheck();
outmode=m_chit.m_outmode.GetCurSel();
jfet=m_chit.m_Tjfet.GetCurSel();
rate=m_chit.m_rate.GetCurSel();
pregain=m_chit.m_pregain.GetCurSel();
}*/
CString cOutBuffer;//发送缓冲
cOutBuffer="t11001\n";
// lpOutBuffer=(LPCTSTR)cOutBuffer;
// lpOutBuffer = &cOutBuffer;
m_comport.WriteToPort((LPCTSTR)cOutBuffer,8);
unsigned long dwriteSize=m_comport.m_nWriteSize;
if(!dwriteSize)
{
DispText("写串口失败!");
return ;
}
else
{
DispText("命令:T11001");
}
}