使用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左右。用这个更精确的时间来对我们采样的数据进行修正可以获得更好的效果。

相关推荐
jufeng130721 小时前
STM32F103 定时器输入捕获实战:测频测周、编码器测速、红外解码全流程拆解
stm32·输入捕获·定时器·编码器
啦啦啦啦啦zzzz6 天前
时间轮定时器
linux·服务器·网络·c++·定时器
保安大队王队长1 个月前
定时器知识
定时器
Dlrb12111 个月前
ARM---IMX6ULL定时器详解与应用:EPIT与GPT定时器,高精度延时函数
arm开发·gpt·arm·定时器·epit·高精度延时
名字还没想好☜1 个月前
Go 的 time.Ticker 陷阱:定时任务里被忽略的内存泄漏与正确关闭
java·数据库·golang·go·定时器
Dlrb12112 个月前
51单片机--GPIO、按键、中断、蜂鸣器、PWM
单片机·嵌入式硬件·51单片机·定时器·中断
Qt程序员2 个月前
内核定时底层核心:时间轮算法
linux·linux内核·定时器·时间轮
fffzd3 个月前
STM32:定时器--旋钮->旋转编码器!
stm32·单片机·嵌入式硬件·定时器·旋钮·旋转编码器
嵌入式×边缘AI:打怪升级日志3 个月前
# 超声波测距 — HC-SR04 + 定时器输入捕获
单片机·定时器·超声波
xrl20123 个月前
JeecgBoot集成Activiti工作流实现定时器案例
activiti·定时器·flowable·camunda·jeecgboot