使用Codesys系统的控制器时,定时器的时间精度不够怎么办

一、功能及注意事项

(1)功能说明:此文档给出了一个可以在定时器的时间精度不够的情况下可以使用的小技巧。

(2)注意事项:我司的NIMC2000N-B系列的任务周期至少需要给2ms,所以定时器一般也需要设置2ms以上,本文中为了展现极端情况下的效果,才给了1毫秒。

二、操作步骤

(1)打开codesys工程,选择工具,库存储。

图2.1

(2)在出现的弹框中点击查找。

图2.2

(3)在查找库弹窗中的顶部输入"systimecore",鼠标选中SysTimeCore,3.5.17.0,点击下面的打开。

图2.3

(4)当在已安装的库中,出现下图红框所示,表明已安装完成。

图2.4

(5)双击左边的库管理器,打开库管理器界面。

图2.5

(6)点击添加库。

图2.6

(7)选择高级。

图2.7

(8)在添加库弹窗的最上面文本框中输入systimecore,选中下面出现的第一个库,点击确定,将刚刚安装好的库添加到工程中。

图2.8

(9)添加成功后,下图中会出现刚刚安装好的库。

图2.9

(10)然后回到PLC_PRG中,声明一个定时器TON1,两个TIME型变量TimeStart和TimeEnd,以及一个DINT型变量TimeDelta。

图2.10

(11)在下方程序编写框中实例化定时器。

图2.11

(12)如下图所示,在定时器开始阶段用SysTimeGetMs()函数获取一下系统开始时间,在定时器结束阶段再用SysTimeGetMs()函数获取一下系统结束时的时间,将这两个时间做一下差值计算,就可以用TimeDelta变量获取到更精确的定时器工作时间了。

图2.12

(13)如下图所示,虽然我们定时器设定的是1ms定时,但受系统硬件限制,实际定时器的工作时间在0-5ms左右。用这个更精确的时间来对我们采样的数据进行修正可以获得更好的效果。

相关推荐
youcans_4 天前
【动手学STM32G4】(3)STM32G431之定时器
stm32·单片机·嵌入式硬件·定时器
一个平凡而乐于分享的小比特21 天前
时钟源与定时器:澄清概念
定时器·时钟源
特立独行的猫a22 天前
C++使用Boost的Asio库优雅实现定时器与线程池工具类
开发语言·c++·线程池·定时器·boost·asio
利刃大大1 个月前
【JavaSE】十五、线程同步wait | notify && 单例模式 && 阻塞队列 && 线程池 && 定时器
java·单例模式·线程池·定时器·阻塞队列
YouEmbedded1 个月前
解码信号与槽(含 QTimer 应用)
qt·定时器·信号与槽
故事不长丨1 个月前
C#定时器与延时操作的使用
开发语言·c#·.net·线程·定时器·winform
普中科技2 个月前
【普中DSP28335开发攻略】-- 第 16 章 定时器中断实验
单片机·嵌入式硬件·定时器·dsp28335·普中科技
Jie_jiejiayou2 个月前
定时器详解以及呼吸灯实现 — STM32(HAL库)
stm32·单片机·嵌入式硬件·定时器
安庆平.Я2 个月前
STM32——定时器
stm32·单片机·嵌入式硬件·定时器