求助delphi计算波形数据,感谢各位大神!
,小弟才入门,望各位大神帮帮忙,贴出代码!谢谢! 你的源数据是啥图片么? 还是其他数据? pzx521521 发表于 2019-10-8 13:53
你的源数据是啥
图片么? 还是其他数据?
源数据是高速采集卡采集的数据 pzx521521 发表于 2019-10-8 13:53
你的源数据是啥
图片么? 还是其他数据?
function TMainForm.Calcdhj(Buff, buff1: array of Real; dataSize: integer): real; //buff为转速点,BUFF1为点火信号计算点火角
var
i, k: integer;
t3, d3, d2: array of integer;
dhjd: array of real;
t, t1: array of real;
Trig_Count: integer;
sumjd: real;
dataCount: byte;
begin
Trig_Count := 0; //当前脉冲个数
dhjdbuff := 0;
for i := 0 to dataSize - 1 do
begin
t := 0;
t1 := 0;
end;
for i := 0 to 99 do
begin
d2 := 0;
d3 := 0;
t3 := 0;
dhjd := 0;
end;
for i := 0 to dataSize - 1 do
begin
t1 := Buff;
t := buff1;
end;
for i := 0 to dataSize - 1 do
begin
if (t1 > 0.6) and (t1 < 0.6) then //转速触发条件
begin
inc(Trig_Count);
if Trig_Count > 255 then
break;
d2 := i;
if Trig_Count > 1 then
begin
inc(dhjdbuff);
d3 := i - 1;
end;
end;
end;
sumjd := 0;
dataCount := 0;
for k := 2 to dhjdbuff do
begin
for i := d2 to d3 do
if (test.IcBuff < 4.4) then //红色触发信号
begin
t3 := i - d2;
break;
end;
if t3 > 0 then
begin
dhjd := strtoFloat(FormatFloat('0.0', t3 / (d3 - d2) * 360))
end;
end;
end; 本帖最后由 pzx521521 于 2019-10-8 16:02 编辑
不知道 buff为转速点,BUFF1为点火信号计算点火角 理解的对不对, 没有实际数据和图片对照 特别是红色触发信号 你抄的地方不太对function TForm2.Calcdhj(Buff, buff1: array of Real; dataSize: integer): real;
//buff为转速点,BUFF1为点火信号计算点火角
var
i: integer;
arrA: array 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
for i := 1 to dataSize - 1 do
begin
//转速触发条件 即蓝线开始的地方(B的开始)
if (Buff > 0.6) and (Buff < 0.6) then
begin
//初始化B的长度和A的长度
LenA := 0;
LenB := 0;
//脉冲个数+1
Inc(Trig_Count);
//转速结束触发条件 即蓝线结束的地方(B的结束)
end else if (Buff > 0.6) and (Buff < 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 > 4.4 then
LenB := LenA;
end;
end;
//返回所有A的实际长度(角度)
Result := sumjd;
end; pzx521521 发表于 2019-10-8 15:51
不知道 buff为转速点,BUFF1为点火信号计算点火角 理解的对不对, 没有实际数据和图片对照 特别是红色触发信 ...
非常感谢,我调试下!谢谢:handshake
页:
[1]