在twincat 3中定义占空比

时间:2016-05-23 07:53:48

标签: plc twincat

对于学校项目我需要将温度传感器连接到我的beckhoff模块并定义温度。我正在使用的传感器是一个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;

这是我到目前为止的代码,根据我的老师的说法,我正朝着正确的方向前进,但我真的陷入了困境。

希望你能帮忙

最好的问候。

2 个答案:

答案 0 :(得分:0)

因为F_TRIG&的输出,你的定时器将无法工作。 R_TRIG仅适用于传感器的边缘。定时器应该是IN:= sensor而不是X_TRIG.Qs。

此外,我在减法中看不到任何意义。为什么不直接保存ET?

dutyCycle和temp应该是REAL变量。

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

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

答案 1 :(得分:0)

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

如果有帮助的话。祝你有愉快的一天