在VS210中使用MSComm控件实现串口通信
一直接收不到下位机返回来的信息,通过单步调试发现时OnComm()中的赋值出现了问题
void CMSComm_StepperMotor_AcquisitionDlg::OnCommMscomm2()//步进电机串口数据采集
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len,k;
m_ReceivedCheck_A=0;
m_ReceivedCheck_B=0;
BYTE rxdata[4]={}; //设置BYTE数组
/* comEvSend = 1,      //发送事件
comEvReceive = 2,   //接受事件 */
if(m_ComMotor.get_CommEvent()==2) //值为表示接收缓冲区内有字符
{
//get_Input返回的数值时VARIANT类型的,我们需要将其先转换为COleSafeArray 类型,
//然后再转换为byte类型,最后转换为十六进制的数据以确定是否发送成功
variant_inp=m_ComMotor.get_Input(); //读缓冲区消息
safearray_inp=variant_inp; //variant变量->COleSafeArray变量
len=safearray_inp.GetOneDimSize(); //得到有效的数据长度(返回一个一维的COleSafeArray对象中的元素个数)
for(k=0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);//获取安全数组中的一个单一元素,将接收到的数据存放到BYTE型数组rxdata里
}
m_ReceivedCheck_A=rxdata[0];
m_ReceivedCheck_B=rxdata[1]; m_ComMotor.put_InBufferCount(0);//清空接收缓冲区
}
}上面的m_ReceivedCheck_A和m_ReceivedCheck_B是在头文件中定义的变量,为BYTE型。
我试了数组和指针,也都一样
在调试中发现,rxdata中的数值就是我期望的数值,但是一到m_ReceivedCheck_A这两个的赋值语句,
单步调试时会略过
跪求大神帮助!快被折磨疯了MFCMSComm串口通信