基于Labview的S19文件自动分块程序(原创)

本人最近接到一个商用汽车ECU刷写项目,发现客户提供的S19文件的地址是不连续的(如图1红色框处所示),而UDS诊断协议的36服务下载数据到ECU要求连续地址,所以需要将文件分块然后才能下载。
S19文件的数据格式和UDS诊断协议的36服务格式请读者自行查找资料,此处不再说明。
注:S19文件可以用记事本打开。
在这里插入图片描述
图1
为了自动适应客户后续更新文件,本人在程序中采用自动识别地址是否连续,不连续处自动分块方式,并给出每个块的首地址、末地址、字节数,同时为每个块生成CheckSum,便于数据下载后的校验。
Labview的总程序框图如图2、图3所示。
在这里插入图片描述
图2
在这里插入图片描述图3
程序分三步进行。
第一步:导入S19文件,找出第一个块的首地址。
在这里插入图片描述图4
第二步:找出分块地址点,分块地址点的查找算法为:
1、取出S19文件上一行的S3字符后跟的字节数信息;
2、取出S19文件上一行的地址信息;
3、用“本行的地址-上一行的地址”是否等于“上一行的字节数”,如果不等,表示此处地址不连续,需要分块。
在这里插入图片描述图5
第三步:主要对每个块的每行数据进行校验,每行内部的数据累加(以字节为单位,2个字符为一字节),再用255-累加值得到校验值。此值与每行末尾的校验码对比,如果校验信息不匹配,程序最后输出错误信息。
校验完成后,把每行数据内的字节数、地址、校验码等辅助信息去除,连接后就是下载所需要的数据块。然后再生成每个块的总校验码,供数据下载后提供给ECU进行内部校验。
在这里插入图片描述图6
本程序的块的校验码生成使用的是一个名为CRC_32CheckSum.vi的子vi,因为篇幅问题,我不在此文中展开分析,后续专门讨论。读者也可以在网上查找算法自己编写。
在这里插入图片描述图7
经现场实际使用,本程序达到编写前的设定目标(实际使用时本程序作为子vi运行)。运行时的前面板如图8所示。
在这里插入图片描述图8

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倩印浮生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值