0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

介绍获取一个精确到微秒的Uint32时间戳的方法

autozhineng 来源:电工电气学习 2023-02-03 15:00 次阅读

在数据采集时,精准的相对时间是非常重要的。尤其是高速采集时,上位机的软件(尤其是windows系统里的软件)很难精准地确定信息的时刻。这时候,如果PLC能够在提供数据时,同时提供一个精准的时间标志(时间戳),将能极大地提高数据采集的计时准确性,并降低采集系统的复杂性。

下面将介绍获取一个精确到微秒的Uint32时间戳的方法。虽然S7-1500已经支持64位的整型,但是,考虑到低端的PLC还不支持64位的整型,因此,此处选择相对通用的32位无符号整型。

PART01 完整程序

程序在准备工作结束后,进行一次时间戳计算,包括了时钟获取、转换等过程。

44ab9a7c-a38e-11ed-bfe3-dac502259ad0.jpg

PART02 将时钟转换成整型数

首先读取时钟,写入到一个长时间类型LDT,然后,转成64位无符号整型ULInt。这个转化是无损失的,"timeMeasure".timeNowULInt精确到纳秒(ns)。

44c6e4a8-a38e-11ed-bfe3-dac502259ad0.jpg

PART03 获取相对时间

精确到纳秒的时间位数很长(从1970-1-1开始计算),是无法被32位整数容纳的,因此,此处仅计算其相对时间。起始时间"timeMeasure".timeNowULIntStart在开始通讯,或者PLC启动时获取。

44d91754-a38e-11ed-bfe3-dac502259ad0.jpg

PART04 转成微秒(μs),并转成32位无符号整数

此处截取微秒的部分,并强制转化成32位无符号整数"dbGen_1024".stamp。

44e771c8-a38e-11ed-bfe3-dac502259ad0.png

PART05 翻转的问题

用32位无符号整数表达微秒的时间戳时,由于32位无符号整数的最大值是4_294_967_295,大概1.2小时就会溢出而自然翻转到0,因此,采集软件必须注意处理翻转的问题。

44fcce56-a38e-11ed-bfe3-dac502259ad0.jpg

PART06 有时间戳采集时的对时机制

由于PLC的对时(调表)不是很方便,因此,PLC里的绝对时间很可能是原始的时间,因此,我们只利用其准确的相对时间来生成时间戳。

在采集软件里要进行对时操作(PLC-Recorder是在收到第一个完整电文时,读取电文内的时间戳和系统时间,完成对时,后续都用相对时间来处理,实际工作时,还要考虑PLC初始化、网络中断等很多其他因素)。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • plc
    plc
    +关注

    关注

    5001

    文章

    12935

    浏览量

    459181
  • 数据采集
    +关注

    关注

    38

    文章

    5506

    浏览量

    113104
  • 上位机
    +关注

    关注

    27

    文章

    927

    浏览量

    54546
  • S7-1500
    +关注

    关注

    3

    文章

    300

    浏览量

    6132

原文标题:西门子PLC S7-1500产生精确时间戳及各种数据处理的方法

文章出处:【微信号:PLC与自控设备,微信公众号:PLC与自控设备】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    不同的CAN通道同时收到CAN数据时,怎样获取时间呢?

    不同的CAN通道同时收到CAN数据时,怎样获取时间呢?按理说获取时间应该是同
    发表于 02-18 08:03

    时间同步获取时间

    新手枚,对单片机原理还不是很清楚,求教:TinyOS中的时间同步首先要获取本地时间,getStartTime(),想知道它是怎么
    发表于 03-20 10:37

    如何查询时间

    有的时候,我们破解的某些软件,需要修改时间,比如Mybase这款笔记软件,破解的时候主要是修改时间。查询方法
    发表于 02-15 16:54

    请问RX23T如何获取系统时钟,以便获取类似时间,如何获取此段代码运行时间

    RX23T 如何获取系统时钟,以便获取类似时间,如何获取此段代码运行时间。 系统
    发表于 07-23 08:09

    1Uint16和1Uint32总共占用3字,实际上sizeof返回值为4是为什么?

    16和Uint32类型的数据定义在起,组成结构体,用sizeof获取结构体的长度,在Uint
    发表于 06-01 13:14

    ulog里现在默认的时间是从哪里获取的呢?

    我现在用的外部RTC,想在ulog里的时间显示外部RTC的时间,ulog里现在默认的时间是从哪里获取
    发表于 11-14 14:22

    求助,求一个时间的RTC示例

    我正在寻找些关于使用 STM32WB55 的内置 RTC 获取 UNIX UTC 时间(以毫秒为单位)的示例代码。或者自 1970 年 1 月 1 日以来的毫秒数。如果有人有
    发表于 12-09 06:46

    有什么办法可以获取精确小于0.1秒的时间

    ,我需要种快速的方法获取精确小于 0.1 秒的时间
    发表于 12-23 10:21

    如何在tilebox上获取时间

    你好我知道 tilebox 有 RTC 模块,所以我意识获取当前时间来为数据生成时间
    发表于 01-05 08:59

    可由CR设定数微秒~数十秒时间的通用定时器

    可由CR设定数微秒~数十秒时间的通用定时器 电路的功能 如果定时脉
    发表于 05-10 15:22 2099次阅读
    可由CR设定数<b class='flag-5'>微秒</b>~数十秒<b class='flag-5'>时间</b>的通用定时器

    UNIX时间和北京时间的相互转换

    )开始所经过的秒数,不考虑闰秒。小时表示为UNIX时间格式为:3600秒;天表示为UNIX时间
    发表于 11-21 19:06 11次下载
    UNIX<b class='flag-5'>时间</b><b class='flag-5'>戳</b>和北京<b class='flag-5'>时间</b>的相互转换

    GD32精确延时和时间

    ;stdint.h>uint32_t get_systick_us(void);uint32_t get_systick_ms(void);void delay_ms(uint32_t ms);void delay_us(
    发表于 11-24 18:51 21次下载
    GD32<b class='flag-5'>精确</b>延时和<b class='flag-5'>时间</b><b class='flag-5'>戳</b>

    西门子PLC S7-1500如何获取精确Uint32时间

      在数据采集时,精准的相对时间是非常重要的。尤其是高速采集时,上位机的软件(尤其是windows系统里的软件)很难精准地确定信息的时刻。这时候,如果PLC能够在提供数据时,同时提供精准的
    发表于 02-01 16:04 2684次阅读
    西门子PLC S7-1500如何<b class='flag-5'>获取</b><b class='flag-5'>精确</b><b class='flag-5'>Uint32</b><b class='flag-5'>时间</b><b class='flag-5'>戳</b>

    西门子PLC S7-1500产生精确时间及各种数据处理的方法

    标志(时间),将能极大地提高数据采集的计时准确性,并降低采集系统的复杂 性。 下面将介绍获取
    发表于 04-20 09:49 0次下载
    西门子PLC S7-1500产生<b class='flag-5'>精确</b><b class='flag-5'>时间</b><b class='flag-5'>戳</b>及各种数据处理的<b class='flag-5'>方法</b>

    西门子S7-1500产生精确时间方法

    精确纳秒的时间位数很长(从1970-1-1开始计算),是无法被32位整数容纳的,因此,此处仅计算其相对时间。起始时间"timeMeasur
    的头像 发表于 05-12 16:25 1026次阅读
    西门子S7-1500产生<b class='flag-5'>精确</b><b class='flag-5'>时间</b><b class='flag-5'>戳</b>的<b class='flag-5'>方法</b>