TwinCAT 3 PLC的读取周期时间



有没有办法让PLC程序知道自己的周期时间?

作为一种解决方法,我可以手动添加一个持久变量或常量来告诉它,但这显然很容易出错。

添加到Jakob的答案-您也可以使用GETCURTASKINDEXEX函数(Infosys)代替GETCURTASKINDEXFB。这样您就不必实例化它了。

_TaskInfo[GETCURTASKINDEXEX()].CycleTime

将以100ns (UDINT)的倍数返回周期时间

UDINT_TO_LREAL(_TaskInfo[GETCURTASKINDEXEX()].CycleTime) / 10_000_000

将以秒为单位返回周期时间(LREAL)

对于TwinCAT3,这在PlcTaskSystemInfo(变量CycleTime)中可用。将它与FB GETCURTASKINDEX结合起来,以获得您想要的数据。

在AllTwinCAT上看到一个例子(虽然不是循环时间,但仍然是相同的FB)。

这不是直接回答你的问题,但可以用来确定循环时间。

我喜欢使用Time()函数。它返回数据类型为TIME的值。它不表示绝对时间,但可以用来计算两次调用Time()之间的时间。这样就可以计算出循环时间。

我在时间至关重要的功能块(FB)中使用它。通过这种方式,FB知道它最后被调用的时间,而不是假设每次扫描都在运行它。即使我或我FB的其他用户"忘记了"调用FB每次扫描,FB仍然提供正确的输出。

你可以通过这个链接找到关于Time()的信息。还有一个名为LTime()的函数,它返回数据类型为LTIME的值,但Beckhoff似乎没有费心记录这个函数。

相关内容

  • 没有找到相关文章

最新更新