对于一个学校项目,我需要将温度传感器连接到我的beckhoff模块,并定义温度。我使用的传感器是SMT160-30,它的工作频率在1-4 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;这就是我到目前为止拥有的代码,根据我的老师的说法,我正在朝着正确的方向前进,但我真的被困在了这一点上。
希望你能帮上忙
诚挚的问候。
发布于 2016-05-24 14:31:07
您的计时器不会工作,因为F_TRIG & R_TRIG的输出只对传感器的边缘有效。定时器应该进入:=传感器而不是X_TRIG.Qs。
此外,我在减法中看不到任何意义。为什么不直接拯救外星人呢?
dutyCycle和temp应该是实数变量。
从占空比到温度°C的转换中,两条注释掉的行是正确的。
另一种解决方案是丢弃定时器,仅对传感器为真和假的plc周期进行计数,以确定活动和nActive之间的比率。
发布于 2016-07-14 14:19:17
如果我可以的话。我不会使用活跃的非活跃时间来执行任务,因为从我的角度来看,只需要活跃的前沿和频率,这只是因为如果你的线断了,你的非活跃时间可能是世纪。如果你的信号有问题,你的结果将会与活动非活动时间严重错误。有了活动时间和频率(1/(两个上升沿之间的时间)),您将能够看到您的信号仍然有效。对于传感器来说不是什么大问题,但是对于更强大的东西来说,如果你的线路断了,它可以避免崩溃的风险。首先,检查信号是否有效,然后计算结果。
如果有帮助的话。祝您今天愉快
https://stackoverflow.com/questions/37385495
复制相似问题