2,640
社区成员
发帖
与我相关
我的任务
分享
// 这里是串口响应函数,串口接收到消息后会调用它
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);
}