本帖最后由 pzx521521 于 2019-10-8 16:02 编辑
不知道 buff为转速点,BUFF1为点火信号计算点火角 理解的对不对, 没有实际数据和图片对照 特别是红色触发信号 你抄的地方不太对[Pascal] 纯文本查看 复制代码 function TForm2.Calcdhj(Buff, buff1: array of Real; dataSize: integer): real;
//buff为转速点,BUFF1为点火信号计算点火角
var
i: integer;
arrA: array[0..4095] of real;
LenB, LenA: integer;
sumjd: real;//A长度的总和
Trig_Count: integer; //脉冲个数
Trig_NoRed_Count: integer;//没有红色信号的脉冲个数
begin
//初始化一些数据
sumjd := 0;
Trig_Count := 0;
Trig_NoRed_Count := 0;
//必须从1开始 因为有t1[i - 1]
for i := 1 to dataSize - 1 do
begin
//转速触发条件 即蓝线开始的地方(B的开始)
if (Buff[i] > 0.6) and (Buff[i - 1] < 0.6) then
begin
//初始化B的长度和A的长度
LenA := 0;
LenB := 0;
//脉冲个数+1
Inc(Trig_Count);
//转速结束触发条件 即蓝线结束的地方(B的结束)
end else if (Buff[i - 1] > 0.6) and (Buff[i] < 0.6) then
begin
//是否存在红色触发信号
//不存在红色触发信号
if LenA = 0 then
Inc(Trig_NoRed_Count)
else
//存在红色触发信号
begin
//除数不能为0, 防止报错
if LenB = 0 then Continue;
//计算A的实际长度 并 统计所有A的实际长度(角度)
sumjd := sumjd + LenA/LenB * 360;
end
end else //两个蓝线之间的部分(即遍历整个B的长度时)
begin
Inc(LenA);
//红色触发信号出现的时候即A的长度
//使LenB不等于0证明有红色触发信号
//注意这个地方的修改, 我应该理解的不对
if buff1[i] > 4.4 then
LenB := LenA;
end;
end;
//返回所有A的实际长度(角度)
Result := sumjd;
end; |