VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 728|回复: 9

[求助] 用VC++CSerialPort类写的串口程序,接收数据怎么整理成,数组?6字节一组做CRC校验

[复制链接]
15_avatar_middle
在线会员 lbwsz123 发表于 2017-9-26 20:51:27 | 显示全部楼层 |阅读模式
5驿站币
本帖最后由 lbwsz123 于 2017-9-27 01:28 编辑

        大神们!
        帮帮忙!

        用VC++CSerialPort类写的串口程序,接收数据是一个一个的字节,怎么整理成,数组?   我需要6字节一组做CRC码校验(CRC校验程序已写好)。
        当前程序是修改人家串口调试助手的,可以在编辑框里形成十六进制显示的CString数据。 我想变成char类型的数组,在规定时间内连续接收6个数据变一组的去处理,怎么办???

        char UartDat[6];
        能扔到这个里面用就行了。
        程序每进一次函数,就接收一个字节数据,就把ch会转换成CString >>>str(“%02X”,ch)的这种格式,然后每进一次函数,就把编辑框的变量像这样CString RevDat+=str,最后会排列在RevDat这个里面去显示到画面上。
        我想在规定时间内,依次轮流接收后,放到char UartDat[6]里,变成6个元素的数组。
        
        文件在这边: 用VC++CSerialPort类写的串口程序,接收数据怎么整理成,数组?6字节一组做CRC校验 问题:SCOMMV23.rar (69.34 KB, 下载次数: 5)

最佳答案

查看完整内容

这个简单点的办法可以这样做: 定义两个全局变量: char UartDat[6]; int idx = 0; 之后当程序每进一次函数,你不是说会收到一个字节的数据吗?直接就这样赋值: UartDat = ch; 之后进行判断,当 idx == 6 的时候,说明 6 个字节的数据收满了,之后楼主直接进行处理就行。 完了将 idx = 0 重置。明白了吗?




上一篇:为什么MFC重新打开,少了很多类,
下一篇:谁会用K60编写红外循迹的程序!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2017-9-26 20:51:28 | 显示全部楼层
lbwsz123 发表于 2017-9-27 01:17
char UartDat[6];
        能扔到这个里面用就行了。
        程序每进一次函数,就接收一个 ...

这个简单点的办法可以这样做:
定义两个全局变量:
char UartDat[6];
int idx = 0;

之后当程序每进一次函数,你不是说会收到一个字节的数据吗?直接就这样赋值:
UartDat[idx++] = ch;

之后进行判断,当 idx == 6 的时候,说明 6 个字节的数据收满了,之后楼主直接进行处理就行。
完了将 idx = 0 重置。明白了吗?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2017-9-26 23:55:04 | 显示全部楼层
举个形象一点的例子吧?看看你到底要什么样子的数据

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

15_avatar_middle
ico_lz  楼主| lbwsz123 发表于 2017-9-27 01:17:28 | 显示全部楼层
本帖最后由 lbwsz123 于 2017-9-27 01:28 编辑
Syc 发表于 2017-9-26 23:55
举个形象一点的例子吧?看看你到底要什么样子的数据


        char UartDat[6];
        能扔到这个里面用就行了。
        程序每进一次函数,就接收一个字节数据,就把ch会转换成CString >>>str(“%02X”,ch)的这种格式,然后每进一次函数,就把编辑框的变量像这样CString RevDat+=str,最后会排列在RevDat这个里面去显示到画面上。
        我想在规定时间内,依次轮流接收后,放到char UartDat[6]里,变成6个元素的数组。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

15_avatar_middle
ico_lz  楼主| lbwsz123 发表于 2017-9-27 22:47:06 | 显示全部楼层
Syc 发表于 2017-9-27 10:45
这个简单点的办法可以这样做:
定义两个全局变量:
char UartDat[6];

LONG CSCOMMDlg::OnCommunication(WPARAM ch, LPARAM port)
{
  ...
}
ch是这个类型的数据 >>>>>>>(WPARAM ch )  可以这样做吗?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

15_avatar_middle
ico_lz  楼主| lbwsz123 发表于 2017-9-28 00:24:50 | 显示全部楼层
本帖最后由 lbwsz123 于 2017-9-28 00:28 编辑
Syc 发表于 2017-9-27 10:45
这个简单点的办法可以这样做:
定义两个全局变量:
char UartDat[6];

       我按你的方法做了,结果变成了这样,第二张图,接收区里:  |左侧是我直接接收到的数据,直接放入编辑框的CString数据里,| 后面是我接收后放入char 数组[6] 的数据,把其中[1]~[3]取出,并放入CRC校验,算出的结果放在数组[4]和[5]中,结果编辑框里显示出来,中间多出了好多FFFF....虽然FFF后面结果是正确的。但最后,把直接接收的CRC,和 我用接收数据算出的CRC去比较相等,还是不行,跳不出OK来。

         用VC++CSerialPort类写的串口程序,接收数据怎么整理成,数组?6字节一组做CRC校验 V6YE`((M$KAY3EM@M`66.png
        

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

15_avatar_middle
ico_lz  楼主| lbwsz123 发表于 2017-9-28 00:53:25 | 显示全部楼层
本帖最后由 lbwsz123 于 2017-9-28 00:54 编辑
Syc 发表于 2017-9-27 10:45
这个简单点的办法可以这样做:
定义两个全局变量:
char UartDat[6];

                r_data[4]=0xA8;r_data[5]=0x5C;

                crc_data=r_data[5]<<8;   //我发现,如果单独显示这一句,就没问题0x5C00;
                crc_data=crc_data|r_data[4];  //但是一但走这一句,就变成0xFFFFFFA8;
               
                如果是这样写:
                crc_data=crc_data+r_data[4];   //就变成crc_data=0x5BA8;  不是0x5CA8;

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

15_avatar_middle
ico_lz  楼主| lbwsz123 发表于 2017-10-1 15:59:10 | 显示全部楼层
Syc 发表于 2017-9-27 10:45
这个简单点的办法可以这样做:
定义两个全局变量:
char UartDat[6];

非常感谢,我自己搞定了!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2017-10-1 21:56:58 | 显示全部楼层
lbwsz123 发表于 2017-10-1 15:59
非常感谢,我自己搞定了!

不错,加油啊

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-10-20 17:47

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表