VC++6.0mscomm控件关于串口发送的有关问题
VC++6.0mscomm控件关于串口发送的问题
代码如上,问题是
①如果在开始定义SendChar函数,在后面的按钮事件中调用该函数,串口没有发送数据,如果把直接把调用的函数代码加到按钮事件,则可以正常发送,请问为什么?
②如果不在文件开始定义 CMSComm myComm;则后面myComm.SetOutput(COleVariant(Array1));会提示未定义,但在此语句之前的OnOpencom()同样调用有myComm,则不会提示,为什么?
多谢!
------解决思路----------------------
参考http://www.vckbase.com/index.php/wv/924.html
CMSComm myComm;
………………
/////////打开串口/////////
void CQKDlg::OnOpencom()
{
// TODO: Add your control notification handler code here
CString strPara,strtemp,strtemp1; //串口参数
int ncom = 0,nbaud = 0;
double mybaud;
ncom =m_COMX.GetCurSel();
switch(ncom)
{
case 0:myCom = 1;break;
case 1:myCom = 2;break;
case 2:myCom = 3;break;
case 3:myCom = 4;break;
case 4:myCom = 5;break;
case 5:myCom = 6;break;
}
nbaud = m_BAUDX.GetCurSel();
switch(nbaud)
{
case 0:mybaud = 4800;break;
case 1:mybaud = 9600;break;
case 2:mybaud = 19200;break;
case 3:mybaud = 38400;break;
case 4:mybaud = 115200;break;
}
strtemp.Format("%.0f",mybaud);
myBaudRate = strtemp;
myComm.SetCommPort(myCom); //指定串口号myCom
strPara = myBaudRate;
strPara+=",";
strPara+="N,8,1";
myComm.SetSettings(strPara); //通信参数设置
myComm.SetInBufferSize(1024); //指定接收缓冲区大小
myComm.SetInBufferCount(0); //清空接收缓冲区
myComm.SetInputMode(1); //设置数据获取方式,0为文本,1为二进制
myComm.SetInputLen(0); //设置每次读取长度,1字节
myComm.SetRThreshold(1); //设置接收OnComm事件门限值
myComm.SetPortOpen(true); //打开串口
m_opencom.EnableWindow(false); //使“打开串口”按钮无效
m_closecom.EnableWindow(true); //使“关闭串口”按钮生效
//AfxMessageBox("串口打开成功!");
strtemp.Format("%d",myCom);
m_list1.AddString("串口已打开,端口为:COM" + strtemp);
m_list1.AddString("通信协议为:" + strPara);
}
//串口发送一个字节//
void SendChar(BYTE dat)
{
CByteArray Array1;
Array1.RemoveAll();
Array1.SetSize(1);
Array1.SetAt(0,dat);
myComm.SetOutput(COleVariant(Array1));
}
void CQKDlg::OnShejian()
{
// TODO: Add your control notification handler code here
m_list1.AddString("正在进行xxxx……");
SendChar(0x81);//这样不能正常发送,得用下面5行代码替代才能发送
/*CByteArray Array1;
Array1.RemoveAll();
Array1.SetSize(1);
Array1.SetAt(0,0x81);
myComm.SetOutput(COleVariant(Array1));*/
m_list1.AddString("xx指令代码已发送");
}
代码如上,问题是
①如果在开始定义SendChar函数,在后面的按钮事件中调用该函数,串口没有发送数据,如果把直接把调用的函数代码加到按钮事件,则可以正常发送,请问为什么?
②如果不在文件开始定义 CMSComm myComm;则后面myComm.SetOutput(COleVariant(Array1));会提示未定义,但在此语句之前的OnOpencom()同样调用有myComm,则不会提示,为什么?
多谢!
------解决思路----------------------
参考http://www.vckbase.com/index.php/wv/924.html