【倍福】时间戳模块(EL1258为例)的学习、网上收集到的材料分享

由于项目需要使用到了EL1258模块以及分布时钟DC的功能,网上相关资料demo较少,因此将自己学习过程以及收集到的资料分享如下,有可能有有误之处,希望指正。

目录

文件资料收集

EL1258的参数定义

我对EL1258使用的参数理解

​编辑时间戳的转换

一、文件资料收集

1、官网英文说明书:主要的使用方法在第五章节,其中提供了一些demo

https://www.beckhoff.com.cn/zh-cn/products/i-o/ethercat-terminals/el1xxx-digital-input/el1258.html?

2、官网给的EL2258、1259的demo:

https://infosys.beckhoff.com/content/1033/el125x_el2258/Resources/2139514763/.zip

https://infosys.beckhoff.com/content/1033/el125x_el2258/Resources/4513278347/.zip

3、客服给的EL1259等的demo:

EtherCAT及E-bus模块: sample | 倍福虚拟学院

其中这个文件相对有用一些,如果是使用时间戳的输出,就可以参考这个。

二、EL1258的参数定义

下图对应着对于EL1258的一个I口开放了5个时间戳后产生的参数

具体的意义在说明书中有了说明:

三、我对EL1258使用的参数理解

1、NoOfInputEvents:采集时一个IO口设置了几个时间戳。

 nNoOfInputEvents        AT%I*            :  ARRAY[0..7] OF USINT;

2、InputState:从0变成1,若不使用时间戳,那这个就是最普通的IO口接收0-1变化的。

 bInputState                    AT%I*            :  ARRAY[0..7] OF BOOL;

3、InputBufferOverflow:在CoE 0x80no:13中,有一个选项可以选择是否进一步到达输入的新事件是:
-不再存储在缓冲区中(默认),或者
-在删除旧事件时存储在缓冲区中

 bInputBufferOverflow    AT%I*           :  ARRAY[0..7] OF BOOL;

4、InputCycleCounter:没用用到,不清楚怎么用。

5、EventsInInputBuffer:没用用到,不清楚怎么用。

在每个EtherCAT周期中,尽可能多的事件被加载到缓冲区中。每个通道的事件数量可以通过EventsInInputBuffer读取。可存储的最大事件数为32。

6、InputOrderFeedback:指示终端是否接收并处理InputOrderCounter。

以下的对应如果打开了10个时间戳所对应的状态和时间戳值:

   aInputEventState           AT%I*           :  ARRAY[0..7] OF ARRAY[0..9] OF BOOL;
   aInputEventTimes          AT%I*           :  ARRAY[0..7] OF ARRAY[0..9] OF UDINT;

7、输出InputBufferReset:可以设置

bInputBufferReset        AT%Q*           :  ARRAY[0..7] OF BOOL;//初始

8、输出InputOrderCounter:只有当计数器由控制器递增时,通道才会向现场总线输出一组新的事件。

nInputOrderCounter     AT%Q*          :  ARRAY[0..7] OF USINT;

我使用的设置:

四、时间戳的转换

https://infosys.beckhoff.com/content/1033/el125x_el2258/Resources/1885941003/.zip

读取到的时间戳是一个32位的UDint低位,我们需要将其转换为64位,才可知道年月日的表达时间。此时便需要为其添加高位DC时钟,因此用到了上述提供的程序以及一些转化语句。

 n64time1       :  FB_HandleCyclic32bitDc_Basic;//想要转化成的64位时间
 actDC          : T_DCTIME64;//得到此时的DC时间
 zwDC           : T_DCTIME;//转换DC时间类型
 zwtimestamp1   :T_DCTIME64;//输出时间戳1转换后的结果
 actDC := F_GetActualDcTime64( );//获取系统DC时间
 zwDC:= DCTIME64_TO_DCTIME(actDC); //转换成下面的要的格式
 n64time1(nnCurrentDcTime64bit:=zwDC, 
	                 n32bitDcTime:= aInputEventTimes[0][0] , //获取32位时间戳
	                 nn64bitDcTime=>, 
	                 bOutPutValid=> ,  bError=> , sError=> , nErrorCounter=> );       
 zwtimestamp1 :=	DCTIME_TO_DCTIME64( n64time1.nn64bitDcTime);//转化为64位时间戳	

关于对倍福时间、分布时钟的理解见下一个文章【倍福】EtherCAT同步方式:分布时钟(DC)的理解与使用-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Up_lhhhhhh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值