MFC串口通讯问题

志雄阿三 志雄阿三 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
各位大神好!我的主界面上有一个Mscomm串口控件,要用这个控件获取发来的数据。我发给接收方的是指令,我发一条,对方接收一条,返回数据后,我才能再发第二条。这些指令要不断的发,以获取接收方实时信息。(自己发自己接来测试功能)
我的方法是,设置一个定时器,希望在定时器中发送指令。但是由于必须接收到反馈信息之后我才能发送第二条指令,经过测试,我依次发送4条指令,每条指令间Sleep(250),串口接收数据时依然一次性接收到我发的4条指令,而不是一条一条接收。我对串口的消息响应机制还不是特别了解,请大神们帮帮忙!谢谢~

// 这里是串口响应函数,串口接收到消息后会调用它
void CRobotControlDlg::OnCommMscomm()
{
// TODO: 在此添加命令处理程序代码

VARIANT variant_inp;
COleSafeArray safearray_inp;
long len,k;
unsigned int data[2048]={0};
byte rxdata[2048]={0}; // 设置BYTE 数组
CString strtemp=NULL;
CString strReceive=NULL; // 该变量保存串口接收到的数据

if( m_MSComm.get_CommEvent()==2 ) // 值为2 表示接收缓冲区内有字符
{
variant_inp = m_MSComm.get_Input(); // 读缓冲区消息
safearray_inp = variant_inp; // 变量转换
len = safearray_inp.GetOneDimSize(); // 得到有效的数据长度

for(k=0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);
}
for(k=0;k<len;k++) // 将数组转换为CString 型变量
{
strtemp.Format(_T("%c"),*(rxdata+k)); // “%c”将数据从unsigned char转成string;“%x”将数据转成16进制
strReceive += strtemp;
}
CString temp=_T("\r\n"); // 换行
strReceive += temp;

DataHandler(strReceive); // 抛给数据处理函数

}
}

// 以下是定时器函数中,向对方发送指令的部分
// 使用串口功能

CString strSend1,strSend2; // 指令1和指令2,对方接收到指令后会回复响应的内容。
strSend1 = "123456789<counts>";
strSend2 = "PFB";
if (m_MSComm.get_PortOpen())
{
m_MSComm.put_Output(COleVariant(strSend1)); //发送数据
Sleep(50);
}
if (m_MSComm.get_PortOpen())
{
m_MSComm.put_Output(COleVariant(strSend2)); //发送数据
Sleep(50);
}

...全文

相关推荐

评论 10
收藏 已收藏
分享
返回顶部
志雄阿三
硬件/系统 2,644 成员 17,229 内容