delphi socket 怎样把接收到的二进制数据转换成字符串显示_低成本解析汽车CAN总线通讯数据流的方法...

一、概述

汽车CAN总线数据量大,分析数据需要采用昂贵的CAN分析仪,并需要支付高额的软件费用。本文提供一种简易的低成本方法,说明如何把CAN总线记录的数据,通过VB或VC等原始计算机语言,依据通讯协议直接翻译转换成明码,记录在一个表格文件里。比如记录在EXECL的CSV格式文件,方便数据分析,可以输出数据量曲线,开关量时序,故障码搜索,方便分析判断出现故障时刻,及引发故障的根本原因,而且可以把全部关联信息显示在一个图表内。

二、方法

按时间顺序逐条读取原始记录数据,识别这一桢数据的ID号,时间标识,每一位每一字节的数字数据翻译,并记录在表格文件中。每读取一桢,翻译一桢,按时间顺序逐条翻译逐条记录,时间顺序与原文件相同。

源代码示例如下:

'*******************************************‘------------------------------------------

'Print(iiii+1,EMS:0x281,EMS_EngineCoolantTemperature,EMS_BatteryVoltage,EMS_FuelConsumptionInst,EMS_BatteryVoltageFailure,EMS_DrivingCycle,EMS_EngineCoolantempFailure,EMS_EOBDMilLampSignal,EMS_EPCLampSignal,EMS_WarmUpCycle,EMS_CoolingFanStatus,Reserved,EMS_RollingCounter4,Reserved,EMS_CheckSum4,")

'------------------------------------------

8800: If CH <> "ch2" Then GoTo 9900

If ip = "0x00000111" Then GoTo 8900

9900: Print(1, "*,,,,,,,,,,,,,,,,")

GoTo 8801

8900: AC = "0x281,"

'0:8​​DataType:Num​Range high:142.5​Range low:-48​Conversion:(D) * 0.75-48​Unit:℃

AC = AC + Str(d0 * 0.75 - 48) + ","

'8:8​​DataType:Num​Range high:17.3482​Range low:0​Conversion:(D) * 0.0683​​Unit:V

AC = AC + Str(d1 * 0.0683 - 48) + ","

'16:8​​DataType:Num​Range high:38.91​Range low:0​Conversion:(D) * 0.1532​​Unit:ml/s

AC = AC + Str(d0 * 0.1532) + ","

'24:1​​0x0: No Error​​0x1: Error

dd1 = (d3 And &H1)

If dd1 = &H0 Then dd2 = "No Error" Else dd2 = "Error"

AC = AC + dd2 + ","

'25:1​​0x0: no achieved​0x1: achieved

dd1 = (d3 And &H2)

If dd1 = &H0 Then dd2 = "no achieved" Else dd2 = "achieved"

AC = AC + dd2 + ","

……………………………………………………………………

'29:1​​0x0: no achieved​0x1: achieved

dd1 = (d3 And &H20)

If dd1 = &H0 Then dd2 = "no achieved" Else dd2 = "achieved"

AC = AC + dd2 + ","

'30:2​​0x0: Off​​0x1: Low_Speed​​0x2: High_Speed​​0x3: Error

dd1 = (d3 And &HC0)

dd2 = Str(dd1)

If dd1 = &H0 Then dd2 = "Off"

If dd1 = &H40 Then dd2 = "Low_Speed"

If dd1 = &H80 Then dd2 = "High_Speed"

If dd1 = &HC0 Then dd2 = "Error"

AC = AC + dd2 + ","

'32:4​​

AC = AC + Str(Hex(d4 And &HF)) + ","

'36:4​​DataType:Num​​Range high:15​​Range low:0​​Conversion:(D)​​Unit:

AC = AC + Str(Int(d4 / 16)) + ","

'48:16​

AC = AC + Str(Hex(d5 * 256 + d6)) + ","

'56:8​​DataType:Num​​Range high:0xFF​​Range low:0​​Conversion:​​Unit:

AC = AC + d7 + ","

dd1 = d0 * 1 + d1 * 1 + d2 * 1 + d3 * 1 + d4 * 1 + d5 * 1 + d6 * 1

dd1 = dd1 Mod 256

AC = AC + Hex(dd1 Xor &HFF)

PrintLine(1, AC)

三、案例

(1)如下一个原始记录数据表:

序号,传输方向,时间戳,ID,帧格式,帧类型,长度,数据,

4521984,接收,15:37:31.675.0,0x000001d4,标准帧,数据帧,0x08,00 00 00 00 00 0A CC 29 ,

4521985,接收,15:37:31.675.0,0x00000330,标准帧,数据帧,0x08,00 00 00 43 20 00 0C 90 ,

4521986,接收,15:37:31.675.0,0x00000331,标准帧,数据帧,0x08,6A 6E 68 C6 09 03 0C E1 ,

4521987,接收,15:37:31.675.0,0x00000332,标准帧,数据帧,0x08,19 45 38 2B 3C 32 0C C4 ,

4521988,接收,15:37:31.675.0,0x00000334,标准帧,数据帧,0x08,34 02 36 06 2B 0A 2B 0E ,

4521989,接收,15:37:31.675.0,0x00000335,标准帧,数据帧,0x08,B2 10 B2 28 00 40 00 58 ,

4521990,接收,15:37:31.675.0,0x000000f0,标准帧,数据帧,0x08,0E 10 9A 9A FE 00 4B 64 ,

4521991,接收,15:37:31.675.0,0x000000f1,标准帧,数据帧,0x08,50 A7 00 04 04 05 1B E0 ,

4521992,接收,15:37:31.675.0,0x000000f2,标准帧,数据帧,0x08,88 E2 26 8F 00 80 0B 55 ,

4521993,接收,15:37:31.675.0,0x000000f3,标准帧,数据帧,0x08,83 14 80 00 8D AC 0B A4 ,

4521994,接收,15:37:31.675.0,0x000000f5,标准帧,数据帧,0x08,3A 98 80 08 8C 28 1C D5 ,

4521995,接收,15:37:31.675.0,0x000000f6,标准帧,数据帧,0x08,55 51 86 F2 00 00 5C 85 ,

4521996,接收,15:37:31.675.0,0x00000130,标准帧,数据帧,0x08,28 00 3A 98 80 15 7F F1 ,

4521997,接收,15:37:31.675.0,0x00000131,标准帧,数据帧,0x08,3C 2F 00 20 01 D0 0F 94 ,

4521998,接收,15:37:31.675.0,0x000000fb,标准帧,数据帧,0x08,98 00 A4 0E 0E 00 0C 4D ,

4521999,接收,15:37:31.675.0,0x00000101,标准帧,数据帧,0x08,FD 41 35 60 AC 00 58 28 ,

4522000,接收,15:37:31.675.0,0x00000278,标准帧,数据帧,0x08,2B 34 50 00 00 1C 61 D3 ,

4522001,接收,15:37:31.675.0,0x00000392,标准帧,数据帧,0x08,00 00 D0 00 40 00 00 00 ,

4522002,接收,15:37:31.675.0,0x00000220,标准帧,数据帧,0x08,83 7D 7F E2 7F F8 4B DC ,

4522003,接收,15:37:31.675.0,0x000001d0,标准帧,数据帧,0x08,3A F4 64 C4 55 80 A9 2B ,

4522004,接收,15:37:31.675.0,0x000002ea,标准帧,数据帧,0x08,3B 46 3B 6E 67 BB 61 6C ,

4522005,接收,15:37:31.675.0,0x00000311,标准帧,数据帧,0x08,3B 47 3B 48 3B 72 05 48 ,

4522006,接收,15:37:31.675.0,0x000000f0,标准帧,数据帧,0x08,0E 10 9A 9A FE 00 4C 63 ,

4522007,接收,15:37:31.675.0,0x000000f1,标准帧,数据帧,0x08,50 A7 00 04 04 05 1C DF ,

4522008,接收,15:37:31.675.0,0x000000f2,标准帧,数据帧,0x08,88 E2 26 8F 00 80 0C 54 ,

4522009,接收,15:37:31.675.0,0x000000f3,标准帧,数据帧,0x08,83 14 80 00 8D AC 0C A3 ,

4522010,接收,15:37:31.675.0,0x00000137,标准帧,数据帧,0x08,58 6E 55 60 86 95 6A FF ,

4522011,接收,15:37:31.675.0,0x00000138,标准帧,数据帧,0x08,44 33 1C C0 F4 40 0A 6E ,

(2)翻译转换的明码数据文件:

IP,序列,时间, ABS:0x311,FLWheelSpeedValidData,FLWheelSpeed,FRWheelSpeedValidData,

FRWheelSpeed,ESC_AutoHoldAvailable,ESC_AutoHoldActive,VehicleSpeedVSOSig,ESC_AutoHoldSwitchLamp,ESC_AutoHoldWarningLamp,EmergencyBrakeStatus,Reserved,VehicleSpeedVSOSigValidData,ABS_Active,ABS_Fault,EBD_Fault,ABS_RollingCounter1,Checksum1,ABS_CheckSum1,EMS:0x281,EMS_EngineCoolantTemperature,EMS_BatteryVoltage,EMS_FuelConsumptionInst,EMS_BatteryVoltageFailure,EMS_DrivingCycle,EMS_EngineCoolant

0x000001d4,4521984,15:37:31.675.0,56251.675,*,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,*,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,*,,,,,,,,,,,,,0x1D4, 0, 0,stop,normal,matching,not ok,normal,not charge full,No charge error,Reserved0, 2,Reserved0, 12, 44,&h29,29

0x00000330,4521985,15:37:31.675.0,56251.675,*,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,*,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,0x330,normal,normal,normal,normal,normal,normal,normal,normal,normal,normal,normal,normal,normal,normal, 1, 800,normal,normal,reserved,not repair,normal,normal,normal,normal, 12,normal,normal,normal,Reserved0,&h90,90

0x00000331,4521986,15:37:31.675.0,56251.675,*,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,*,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0x331, 13, 15, 12, 99, 9, 3, 12, 0,&hE1,E1

0x00000332,4521987,15:37:31.675.0,56251.675,*,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,*,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,0x332, 25,-69,No Error,No Error,0, 43,-60, 200,0, 12,&hC4,C4

0x00000334,4521988,15:37:31.675.0,56251.675,*,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,*,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,*,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,*,,,,,,,0x334, 12, 2, 14, 6, 3, 10, 3, 14

0x00000335,4521989,15:37:31.675.0,56251.675,*,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,*,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,*,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,*,,,,,,,*,,,,,,,,,0x335, 3.56, 16, 3.56, 40, 0, 64, 0, 88

0x000000f0,4521990,15:37:31.675.0,56251.675,*,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,*,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,*,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,*,,,,,,,*,,,,,,,,,*,,,,,,,,,*,,,,,,,,,*,,,,,*,,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,

0x000000f1,4521991,15:37:31.675.0,56251.675,0xF1, 800, 65.464, 0,EIdle isnotavailable,NoError,Ready,NoStopRequest,no startrequest,NoRequeset,LmpOFF,notpressed,HEVmode(Conventional),CCoff/standby, 5,NoError, 0, 11,Ready,notFuelCut, 0,&hE0,E0

0x000000f2,4521992,15:37:31.675.0,56251.675,*,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,*,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,*,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,*,,,,,,,*,,,,,,,,,*,,,,,,,,,*,,,,,,,,,*,,,,,*,,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,*,,,,,

0x000000f3,4521993,15:37:31.675.0,56251.675,*,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,*,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*,,,,,,,,,,,*,,,,,,,,,,,,,*,,,,,,,,,,,,,,,,,*,,,,,,,*,,,,,,,,,*,,,,,,,,,*,,,,,,,,,*,,,,,*,

79e3c535c43c5dc21ab751bc16cdd573.png
80c283580317f01f2d125cb75a382cd0.png
d6ccecc94849783c07faff41683325c9.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值