在工作中实践总结,在朋友圈分享讨论,做最接地气的公众号 —— Lizzy
背景介绍
在伺服轴高速运动的过程中,要捕捉某个信号上升沿的位置值,比如色标检测装置,就需要用到探针功能(TouchProbe)。通常,探针功能要求反馈系统具有位置锁存功能,比如编码器模块EL5xxx的Latch输入点或者伺服驱动器的Probe端子。但是随着EtherCAT和XFC技术的广泛应用,越来越多的客户更倾向于使用带时间戮的XFC端子作为Latch捕捉点,这样TouchProbe功能就不受伺服驱动器的影响,步进电机、模拟量或者脉冲控制的伺服轴、总线控制的伺服轴都可以使用探针功能了。
与探针功能相反,如果要在伺服轴高速运动的过程中,在指定位置打开或者关断一个设备,这就叫凸轮输出(CamSwitch)。比如一圈360,要在每次正向经过180度的时候打开一个DO点,而在到达185度的时候关闭。很多伺服驱动器都有自带的DO点,可以用作凸轮输出。但是使用XFC时间戳端子,可以用任何一个NC轴的位置来触发任何一个XFC的DO通道,从而具有更高的灵活性。
最新的XFC_TouchProbe和XFC_CamSwitch功能已经具有连续快速输出和输入的能力。对于输入来说,即使一个PLC周期内收到多个外部探针信号也可以一一记录下它们对应的NC轴位置。对输出来说,一个PLC周期内也可以在NC轴的多个位置点切换输出状态。
新的XFC硬件模块需要配合新的库文件,使用里面新FB和结构体才能方便地控制新XFC模块的过程数据。为此作者封装了两个以IO通道为接口的FB,帮助用户快速使用多时间戳的XFC_TouchProbe和XFC_CamSwitch功能。
本文就是这些封装功能块的配套说明文档。
1 模块介绍
EL1258/EL1259/EL2258,是8通道数字量多时间戳模块。
EL1258是2通道时间戳输入模块EL1252的升级版,除了通道数增加到8个之外,还具有多时间戳功能——在一个PLC周期内最多可以记录10次信号变化的准确时间(官网上写是32次,软件里看到是10次)。
EL2258是2通道时间戳输出模块EL2252的升级版。与EL1258类似,通道数增加到8个并增加了多时间戳功能——在一个PLC周期内最多可以输出10次信号变化的准确时间。
EL1259 的功能等于 EL1258加 EL2258,包括8路输入和8路输出。
EL1258/ EL2258不仅通道数量是EL1252和EL2252的4倍,可以完全覆盖后者的功能,甚至更加完善和强大,而价格几乎完全相同。所以新项目上都推荐使用8通道的多时间戳模块EL1258/ EL2258。如果项目中既有输入又有输出,则推荐使用EL1259,其价格是EL1258或者EL2258的1.5倍。
2 使用说明
EL1258/EL1259/EL2258的过程数据,可以包含每个通道的若干个时间戳、信号值、状态字、控制字等。用户可以阅读模块手册,了解这些过程数据分别对应的功能,编写PLC程序来控制。但更多的时候是使用倍福提供的TwinCAT PLC Library中的功能块来控制这些IO数据,最典型的就是输入通道用作探针(XFC_TrouchProbe),输出通道用作凸轮输出(XFC_CamSwitch)。
由于EL1258/EL1259/EL2258的推出时间比EL1252和EL2252要晚两年,所以在TwinCAT 2中控制这些模块要引用新版的TcMC2_XFC.lib,时间2017.01.19/V2.9。该库作为本文档附件。
在TwinCAT 3中,因为软件升级快,并且库文件是自动更新的,所以不存在这个问题。
3 测试条件
硬件:CX1020-0112、EL1259、AX5000
软件:Runtime, TwinCAT 2 Build 2281;开发环境,TwinCAT 2300_64Bit Engineering,Win10
4 测试归档文件
归档文件应包含PLC程序、配置、相关的Lib、XML文件等。以压缩文件形式保存,以便复制共享和重现。
20180704EL1259 V5.zip,除了PLC程序和配置文件TSM之外,还包括Lib和示例说明PDF。
5 EL1259的配置
5.1. PDO List(适用于EL1258、EL1259和EL1258)
EL1258/EL1259/EL2258提供兼容EL1252/2252单时间戳模式的输入和输出(TSI和TSO),给已经完成程序开发的老客户使用。新客户推荐直接使用多时间戳模式的输入和输出(MTI和MTO),才能使用多时间戳功能。通过选择Process Data中包含的PDO,可以单独设置每个通道工作在单时间戳模式还是多时间戳模式。
输入通道 | 输出通道 | ||
MTI | TSI 兼容 EL1252 | MTO | TSO 兼容 EL2252 |
0x1620至0x1627: MTI Outputs Chn 1到8 | 0x1A00至0x1A07 MTO Inputs Chn 1到8 | ||
0x1A08至0x1A0B: MTI Inputs Chn 1 10x、5x、2x、1x Channel 2 0x1A0C至0x1A0F: …… Channel 8 0x1A24至0x1A27: | 0x1600至0x1603: MTO Outputs Chn 1 10x、5x、2x、1x Channel 2 0x1604至0x1607: …… Channel 8 0x161C至0x161F | 0x1628至0x162F TSO Outputs Chn 1到8 |
5.2. 选择PDO
因为默认配置是上传8个通道的所有数据,并且每个通道都选择MTI 10x,以至于变量链接的时候选择困难。建议实际用几个通道就选择几个通道,而每个通道都用10x的数据,以保证最大程度的锁存数据。
方法1:Predefined PDO Assignment
模块厂家可以提供若干预定义的PDO配置,如图所示:

EL1259提供的预定义PDO配置包括Multi-Timestamping和Compatible两种,如果前述,新项目建议都用多时间戳模式Multi-Timestamping。根据实际情况选择适合的通道数量。
但是预定义的PDO配置总是输入输出同样通道数量,如果实际上你只用了输入或者只用了输出,又不想浪费过程数据或者强迫症发作不想看到多余的过程数据,参考下一步“人工选择PDO”。
不管用哪种方法配置,确认上图中“PDO Assignment”是勾选中的状态。虽然默认也是选中的,有时会不小心被客户改掉。
提示:PDO Configuration,如果你没有修改过PDO里面的内容,就不用勾选了。大多数EtherCAT从站不允许用户修改PDO的内容,倍福有个别智能EL模块允许。
方法2:人工选择PDO
在EL1259的Process Data页面,Sync Manager中,双击3(Inputs),并在下方的PDO Assignment(0x1C13)中勾选需要的PDO。每个PDO的内容在右侧的PDO List中可以看到。如图所示:

上图选中的是2x,表示一个PLC周期只以缓存两个事件,比如一个上升沿和一个下降沿。
5.3. 输入通道的过程变量(适用于EL1259和EL1258)
输入变量
a. Event指信号跳变事件,可能是上升沿或者下降沿
b. Input Event State为True,表示上升沿,反之下降沿
c. Input Event time依次与State对应,表示跳变时间
d. No of input events:本周期发生的信号跳变次数
比如配置了MTI Inputs 10x Channel1,最多可以记录10次信号跳变信息,但有可能本周期只发生了5次甚至1次都没有发生。这个变量链接到PLC之后,可以判断锁存的数据是新的还是旧的。
e. Input State,表示本通道最后一次刷新信号状态
如果作为普通DI来用,使用这个变量即可。
f. Overflow、Events in buffter正常都应该为0
说明:在TcMC2_XFC.lib中已经对以上过程变量进行处理,包括手动输出。
输出变量
a. 通常情况下不需要干预
b. 如果发生了溢出或者其它错误,才需要通过变量Input Buffer Reset来复位。
(实测中没有发生错误,所以没有测试复位功能)
5.4. 输出通道的过程变量(适用于EL1259和EL1258)
输入变量
a. 通常情况下不需要干预
b. 链接到PLC可以知道通道的工作状态有无溢出等。
说明:在TcMC2_XFC.lib中也没有处理这些状态字。
输出变量
a. Event指信号跳变事件,可能是上升沿或者下降沿
b. Output Event State为True,表示上升沿,反之下降沿
c. Output Event time依次与State对应,表示跳变时间
d. No of output events:本周期发生的信号跳变次数
比如配置了MTO Outputs 10x Channel1,最多可以控制发生10次信号跳变,但有可能本周期只需要发生5次甚至1次都不用发生。
e.如果要手动控制控制通道输出,相当于用作普通的DO通道。需要组合变量:
Enable manual operation:允许手动
Manual output state:手动状态
另外,Force order则用于强制输出。
f.Output Buffer Reset 用于故障后复位
(这个功能我还没来得及测试)
说明:在TcMC2_XFC.lib中已经对以上过程变量进行处理,包括手动输出。
6 示例程序
6.1. 演示的功能
本例程同时演示了EL1259的输入和输出功能,即TouchProbe和Cam Swich。
使用时需要将EL1259的Output1与Input1用导线连接,
以便Cam Switch输出的信号能够被Touch Probe探测到。
本例程的展示结果就是:
预设在指定角度输出的信号,用探针检测到的实际信号对应的角度与预设输出信号的角度的差异,就是整个响应的误差。
6.2. 示例程序介绍
概览结构
POU:

HMI:

例程的设计原则:
FB和引用实例分开。FB供客户直接引用,例程供客户参考。
常规功能和引用实例分开。常规功能控制轴的动作,引用实例演示主题功能。
如果有生成测试信号的代码,比如信号仿真,也应独立程序单独调用。
为了引用方便,少用全局变量和结构体。
程序的调用树:

黄色模块是TcMC2_XFC.lib提供的功能块
绿色模块是本例程封装的功能块
蓝色模块是本例程为了测试黄色和绿色模块编写的测试代码。
6.3. 试运行示例程序
通常在用户现场,PRO程序可以直接使用,但IO数量各不相同。要在用户的硬件上运行这套程序:
打开本例的TSM文件,禁用或者删除EtherCATIO。
重新扫描IO,禁用或者删除扫描到的EL1259,
在相应位置导入附件中的Term 1 (EL1259)_10x_Channel1.tce,
提示是否恢复链接,回答Yes。
在控制器上运行PRO程序
6.3. 试运行示例程序
引用TcMC2_XFC.lib,
版本V2.9以上,时间2017.01.19/V2.9。该库作为本文档附件
从本例程中合并部分程序
从PLC Control的主菜单Project下选择“Merge”,然后选择以下对象:

修改程序Cam_Switch_XFC或者Touch_Probe_XFC中的Axis,并编译。
替换程序中的aAxis[1]为项目中实际的NC轴。
如果有多个轴要位置锁存或者凸轮输出,相应修改代码。
链接IO变量。
如果使用TouchProbe,有6个变量要链接
所有变量都在TP_D下面: 1, aIE_Time 下的10个元素分别链接到MTI Inputs 10x的Input event time 1-10 2, aIE_State下的10个元素分别链接到MTI Inputs 10x的Input event state 1-10 3, nEventsInInputBuffer:链接到MTI Inputs 10x的 Status的Events in input buffer 4, bInputState:MTI Inputs 10x的Status的Input state 5, nNoOfInputEvents:MTI Inputs. Status的No of input events 6, bInputBufferReset:MTI Outputs 的Ctrl.Input buffer reset |
如果使用CamSwitch,有4个变量要链接
所有变量都在EL1259下面: 1, Status :链接到MTO Inputs的Status 2, Ctrl:链接到MTO Outputs的Ctrl 3, Outputs:链接到MTO Outputs的Outputs 4, OutputEventTime下的10个元素分别链接到:链接到MTO Outputs的Output event time 1-10 |
注意,
例程Cam_Switch_XFC中EL1259,仅指EL1259的一个输出通道,也适用于EL2258
例程Touch_Probe_XFC中TP_D,仅指EL1259的一个输入通道,也适用于EL1258
NC轴的时间补偿需要打开
如图所示,Enc和Drive的Time Compensation都要打开:


如果补偿设置为ON以后,还是有相对稳定的往一个方向偏移的误差,就可以通过Delay Cycles和Additional Delay进行补偿。
7 其它说明
由于本例程特为用户赶制,EL1259的状态字控制字并没有充分利用,未能检验到所有功能。所以本文档后续会再补充完善。
本例只是提供一种思路,一种最典型的用法。目前开放出来的FB接口变量和内部逻辑未必适合所有的工程项目。用户可以根据实际情况修改相应的FB,有新的发现也欢迎留言。
示例程序和配套文档放在本公众号的云服务器,按日期查找即可:
FTP下载工具访问:ftp://baclizzy.com.cn:21
IE浏览器访问:http://www.baclizzy.com.cn
本文PDF版本及配套程序的路径为:
Lizzy的倍福园地 / 20180704 EL1259用于TouchProbe和CamSwitch




