2.3数据帧的接收
a)分析:串口通信是一位一位数据传送的,接收则是一个一个字节接收的,不是一帧一帧接收的。当接收到第一、第二个字节时,判断是否是FE,如果是,则表示接收一帧数据开始,并保存这两个数,然后接收第三个字节,为数据个数(Num),确定后面要接收的数据长度和触发事件,并把Num后面接收到的所有数据用数组保存起来,以备处理。
b)变量(均为全局变量)定义:1)定义五个布尔值(Boolean). Framebeginone、 Framebegintwo:初始值为false,判断接收数据帧开始是否以FE开头;databegin:初始值为false,判断接收数据帧开始;commandok:初始值为false,判断是否接收命令字;Handshake:初始值为false,判断PC上位机与
ECU通信是否成功;2)定义两个字节(Byte) a、 b变量:用于存储接收的第一、第二个字节FE;3)定义一个字节型数组:DBufA[]:长度1到255,用于存储接收个数后面的所有数据区内容。
2.4实施的部分代码
刀接收数据
Procedure TMain.MSCommconnectionComm(Sender: TObject);
Var //变量定义
DataBuffer: array of byte;//用于接收一个一个字
minteger; AllDataALLDataCs: byte;//判断校验和
Begin
AlIDataALLDataCs:=O;
Try
Set] ength(DataBuffer、 I);
If mscommconnection.commevent=2 then
Begin if databegin=false then
Begin DataBuffer:=mscommconnection.input;
If (DataBuffer [0]=53) then begin//判断接收命令字
Sendata(254);
Sendata(254);
Sendata(2);
Sendata(154);
Sendata(152);
Commandok:=true;
Handshake:=true;
End; end;
If handshake=true then begin
If Framebeginone=false then begin
If DataBuffer [0]=254 then begin
A:= DataBuffer [0];
Framebeginone:=true;
End; end;
Else
If Framebegintwo=false then begin
If DataBuffer [0]=254 then begin
B:= DataBuffer [0];
Framebegintwo:=true;
Mscommconnection.rthreshold:=29;
End; end;
End; end;
Else begin
For n:=1 to 29 do begin
DataBuffer:=mscommconnection.input;
DBufA [n]:=DataBuffer [0];
ALLDataCs:=ALLDataCs+ DBufA [n];
End;
If DBufA [29]<>(a+b+ALLDataCs一DBufA [29])
mod 256 then begin
Sendata(254);
Sendata(254);
Sendata(2);
Sendata(124);
Sendata(128);
Databegin:=false;
……
End
Else begin
Sendata(254);
Sendata(254);
Sendata(2);
Sendata(154);
Sendata(152);
End;
End; end;
Except
End; end;
///自定义发送数据模块
Procedure TMain.SendData (BData: byte); [2]
var
OutbufData: array of byte;
B
egin
Setlength (outbufData、 1);
OutbufData [0]:=BData;
Mscommconnection. Output: =outbufData;
End;
3 小结
电子控制单元作为摩托车行业应对严格的国家法规的主要手段,也是满足客户追求动力性、经济性的重要途径。电子控制单元的精细制作,严格检测成为保证电子控制单元正常工作的基本。本文仅简单分析了控制单元基本制作和下线测试,成批量的生产,需要更加精准,精细的设备来处理。
上一页 [1] [2] [3]