开发者社区> 问答> 正文

有个问题想请教一下,关于串口中段接收数据怎么改写?

本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。 https://developer.aliyun.com/article/706511 点击链接欢迎加入感兴趣的技术领域群。

展开
收起
珍宝珠 2019-09-16 14:10:40 649 0
1 条回答
写回答
取消 提交回答
  • 使用MSComm控件串口接收数据,一般设置成SetRThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 并且串口每次接收到的数据个数是不确定的,如果你自己确定需要接收到多少个数据的话,就好办了。 //全局变量 BYTE Comm_Packet_Len; //需要接收到的数据个数 BYTE Comm_DataBuffer[20]; //依次存放串口接收到的数据 long Comm_Packet_Index; //每次收到数据个数,并标志数据应放在全局数组位置的索引 //每次处理完数据后清空,为下一次接收做准备 void CEOLDlg::OnMscomm() { // TODO: Add your control notification handler code here VARIANT variant_inp; COleSafeArray safearray_inp; long len=0, k=0; //转换为数组时使用的变量 BYTE rxdata[204]; //设置BYTE数组 An 8-bit integerthat is not signed. CString strtemp; //字符型变量 int temp = 0; //临时变量 unsigned char ecuchecksum = 0; //ecu回传校验码 if(m_ctrlComm.GetCommEvent() == 2) //事件值为2表示接收缓冲区内有字符 { //以下你可以根据自己的通信协议加入处理代码 variant_inp = m_ctrlComm.GetInput();//读缓冲区 safearray_inp = variant_inp; //VARIANT型变量转换为ColeSafeArray型变量 len = safearray_inp.GetOneDimSize(); //得到有效数据长度 for(k = 0; k < len; k++) //将ColeSafeArray型变量转换为BYTE型数组 { safearray_inp.GetElement(&k, rxdata + k);//转换为BYTE型数组 } for(temp = 0; temp < len; temp++) { Comm_DataBuffer[Comm_Packet_Index + temp] = rxdata[temp]; } Comm_Packet_Index += len; if(Comm_Packet_Index == Comm_Packet_Len)//接收到的数据个数等于 { //处理接收到的数据 } } }

    答案来源于网络

    2019-09-23 14:05:38
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载