对于学校项目我需要将温度传感器连接到我的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;
这是我到目前为止的代码,根据我的老师的说法,我正朝着正确的方向前进,但我真的陷入了困境。
希望你能帮忙 最好的问候。答案 0 :(得分:0)
因为F_TRIG&的输出,你的定时器将无法工作。 R_TRIG仅适用于传感器的边缘。定时器应该是IN:= sensor而不是X_TRIG.Qs。
此外,我在减法中看不到任何意义。为什么不直接保存ET?
dutyCycle和temp应该是REAL变量。
两条注释掉的线对于从占空比到温度°C的转换是正确的。
另一个解决方案是抛弃定时器,只计算传感器为真和假的plc周期,以确定Active和nActive之间的比率。
答案 1 :(得分:0)
如果可以的话。 我不会使用活动的非活动时间来执行任务,因为从我的角度来看,只需要活动的前端和频率,这只是因为如果您的线路被破坏,您的非活动时间可能是世纪。 如果您的信号出现问题,那么有效的非活动时间将导致严重错误。 有效时间和频率(1 /(两个上升沿之间的时间)),您将能够看到您的信号仍然存在。 对于传感器来说没什么大不了的,但对于更强大的东西,它可以避免在线路损坏时发生崩溃的风险。首先,检查您的信号是否存活,然后计算结果。
如果有帮助的话。祝你有愉快的一天