吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1472|回复: 5
收起左侧

[求助] 求助delphi计算波形数据,感谢各位大神!

[复制链接]
zhujf 发表于 2019-10-8 13:25
微信截图.jpg ,小弟才入门,望各位大神帮帮忙,贴出代码!谢谢!

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

pzx521521 发表于 2019-10-8 13:53
你的源数据是啥
图片么? 还是其他数据?
 楼主| zhujf 发表于 2019-10-8 14:06
pzx521521 发表于 2019-10-8 13:53
你的源数据是啥
图片么? 还是其他数据?

源数据是高速采集卡采集的数据
 楼主| zhujf 发表于 2019-10-8 14:11
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[0..99] of integer;
  dhjd: array[0..99] of real;
  t, t1: array[0..4095] 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[i - 1] < 0.6) then //转速触发条件
    begin
      inc(Trig_Count);
      if Trig_Count > 255 then
        break;
      d2[Trig_Count] := i;              
      if Trig_Count > 1 then
      begin
        inc(dhjdbuff);
        d3[dhjdbuff] := i - 1;
      end;
    end;
  end;
  sumjd := 0;
  dataCount := 0;
  for k := 2 to dhjdbuff do
  begin
    for i := d2[k] to d3[k] do
      if (test.IcBuff < 4.4) then //红色触发信号
      begin
        t3[k] := i - d2[k];
        break;
      end;
    if t3[k] > 0 then
    begin
        dhjd[k] := strtoFloat(FormatFloat('0.0', t3[k] / (d3[k] - d2[k]) * 360))
    end;
  end;
end;
pzx521521 发表于 2019-10-8 15:51
本帖最后由 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;

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
zhujf + 2 + 1 谢谢@Thanks!

查看全部评分

 楼主| zhujf 发表于 2019-10-8 16:53
pzx521521 发表于 2019-10-8 15:51
不知道 buff为转速点,BUFF1为点火信号计算点火角 理解的对不对, 没有实际数据和图片对照 特别是红色触发信 ...

非常感谢,我调试下!谢谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 00:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表