1

对于一个学校项目,我需要将温度传感器连接到我的倍福模块并定义温度。我使用的传感器是 SMT160-30,它的工作频率在 1-4khz 之间,这对于标准 io 模块来说非常接近。我可能需要一个用于高速测量的特殊输入模块,但根据我的老师的说法,我必须能够使用标准模块来完成。但是我只是在定义占空比时遇到了麻烦,并且无法真正弄清楚如何解决它。

  PROGRAM MAIN
  VAR
    sensor AT %I* : BOOL;
    rtrig: R_TRIG;
    tOn: Tof;
    timeActive: TIME;
    ftrig: F_TRIG;
    tOff: Ton;
    timeNActive: TIME;
    dutyCycle: DINT;
    temp: TIME;
  END_VAR

  rtrig(clk := sensor);
  IF(rtrig.Q) THEN
     timeActive := tOn.ET - timeActive;
  END_IF

  tOn(in := rtrig.Q, pt:= T#1S);

  ftrig(clk := sensor);
  IF ftrig.Q THEN
    timeNActive := tOff.ET - timeNActive;
  END_IF
  tOff(in := ftrig.Q, pt:= T#1S);

  //dutyCycle := timeActive / (timeActive + timeNActive);
  //temp := (dutyCycle - 0.32)/0.0047;

这是我到目前为止的代码,根据我的老师的说法,我正在朝着正确的方向前进,但我真的被困在这一点上。

希望你能帮忙

此致。

4

2 回答 2

0

如果允许我的话。我不会使用活跃的不活跃时间来执勤,因为从我的角度来看,只需要活跃的前沿和频率,那只是因为如果你的线路坏了,你的不活跃时间可能是世纪。如果您的信号有问题,您的结果将与活动非活动时间严重错误。使用活动时间和频率(1/(两个上升沿之间的时间)),您将能够看到您的信号仍然存在。对于传感器来说没什么大不了的,但对于更强大的东西来说,如果你的线路坏了,它可以避免崩溃的风险。首先你检查你的信号是否有效,然后你计算你的结果。

如果有帮助。祝你今天过得愉快

于 2016-07-14T06:19:17.497 回答
0

您的计时器将不起作用,因为 F_TRIG 和 R_TRIG 的输出仅适用于传感器的边缘。计时器应该得到 IN := sensor 而不是 X_TRIG.Qs。

此外,我认为减法没有任何意义。为什么不直接拯救外星人?

dutyCycle 和 temp 应该是 REAL 变量。

注释掉的两条线对于从占空比到温度°C 的转换是正确的。

另一种解决方案是放弃定时器,只计算传感器为真和假的 plc 周期,以确定 Active 和 nActive 之间的比率。

于 2016-05-24T06:31:06.637 回答