TwinCat3 实用模块
TwinCat3 实用模块
轴基本控制
使能与复位
状态读取
JOG 点动控制
PTP 点到点控制
FIFO 先入先出控制
FIFO 即 First in First out
通过此功能可以将用户设定的坐标数据保存在栈中
轴的控制器将根据用户设定的间隔, 按行读取数组中的坐标并运动
FIFO 可以同时控制多个轴 (最多 8/16) 个轴, 实现多轴联动
可以最多保存 1000 个坐标数据 (默认), 并在运动时插补提升平稳性
但 FIFO 不支持反转, 也无法根据主轴调整速度, 且运动后需要重新装填坐标数据
FIFO 配置
创建 FIFO
在资源管理器打开 MOTION -> NC TASK
右键 NC TASK, 选择 Add new item, 在弹出对话框中, Name 属性中输入通道名称, Type 属性选择 NC-Channel(for FIFO Axes) 完成创建
在资源管理器打开 MOTION -> NC TASK -> 通道名称 -> Group 2
选择 FIFO 选项卡进行配置
基本配置
FIFO-Dimension
FIFO 控制的轴组数, 最多 8/16 (由控制器性能决定)Fifo Length
坐标栈的大小, 即最多保存的坐标数Fifo Override Type
运动速度调节方式1
表示跃进型2
表示平滑型 (默认, 经测试存在问题 ?)
P-T2 time for override changes
平滑型下的切换时间, 越大运动切换越平滑Base Time of Fifo entries
坐标点运动间隔, 必须是控制周期的整数倍
曲线校验
在读取坐标后, 最好先在虚轴运行, 检查运动时的最大速度是否超过设定的最大速度
虚轴的创建可参考官方文档
ID 获取
FIFO 功能块中多使用轴与通道的 ID (一个 UINT 值) 来绑定与操作有关轴 / 通道
在资源管理器中打开轴 / 通道, 选择 General 选项卡, 其中的 Id 属性即其 ID
模块导入
FIFO 有关功能块位于模块 Tc2_NcFifoAxes 中
通过 库管理器 -> Motion -> FifoAxes -> Tc2_NcFifoAxes 导入
使用有关功能块时需要提前导入
有关功能块
轴绑定 FiFoGroupIntegrate
UDINT
输入变量iChannelId
被设置的 FIFO 通道 IDUDINT
输入变量iAxisId
被绑定的轴 IDUDINT
输入变量iGroupPosition
被绑定轴对应的 FIFO 坐标 (索引由 1 开始)BOOL
输入变量bExecute
在上升沿执行绑定操作TIME
输入变量tTimeout
ADS
等待时间, 通常设置为T#1s
BOOL
输出变量bBusy
当bExecute
上升沿时变为TRUE
, 当命令结束或出错时, 变为FALSE
BOOL
输出变量bErr
当命令执行出错, 变为TRUE
UDINT
输出变量iErrId
ADS
或NC
错误码
写入坐标 FiFoWrite
UDINT
输入变量iChannelId
被设置的 FIFO 通道 IDPointer To LREAL
输入变量AdrDataArray
保存坐标数据的数组, 该数组为ARRAY[0..x, 1..n] OF LREAL
其中x
为坐标数,n
为 FIFO 控制的轴数UDINT
输入变量iColDim
FIFO 控制的轴数, 即坐标数组中的n
UDINT
输入变量iRowsToWrite
实际装载入 FIFO 的坐标数, 即坐标数组中的有效函数, 如全部行都使用则为x + 1
BOOL
输入变量bExecute
在上升沿执行写入操作TIME
输入变量tTimeout
ADS
等待时间, 通常设置为T#1s
BOOL
输出变量bBusy
当bExecute
上升沿时变为TRUE
, 当命令结束或出错时, 变为FALSE
BOOL
输出变量bErr
当命令执行出错, 变为TRUE
UDINT
输出变量iErrId
ADS
或NC
错误码注意, 如果要重新写入坐标数组, 则需要使用功能块
FiFoOverwrite
, 其参数与FiFoWrite
相同
开始运动 FiFoStart
UDINT
输入变量iChannelId
被控制的 FIFO 通道 IDBOOL
输入变量bExecute
在上升沿开始运动TIME
输入变量tTimeout
ADS
等待时间, 通常设置为T#1s
BOOL
输出变量bBusy
当bExecute
上升沿时变为TRUE
, 当命令结束或出错时, 变为FALSE
BOOL
输出变量bErr
当命令执行出错, 变为TRUE
UDINT
输出变量iErrId
ADS
或NC
错误码
停止运动 FiFoStop
UDINT
输入变量iChannelId
被控制的 FIFO 通道 IDBOOL
输入变量bExecute
在上升沿终止运动TIME
输入变量tTimeout
ADS
等待时间, 通常设置为T#1s
BOOL
输出变量bBusy
当bExecute
上升沿时变为TRUE
, 当命令结束或出错时, 变为FALSE
BOOL
输出变量bErr
当命令执行出错, 变为TRUE
UDINT
输出变量iErrId
ADS
或NC
错误码
解除绑定 FiFoGroupDisintegrate
UDINT
输入变量iChannelId
被控制的 FIFO 通道 IDBOOL
输入变量bExecute
在上升沿执行命令TIME
输入变量tTimeout
ADS
等待时间, 通常设置为T#1s
BOOL
输出变量bBusy
当bExecute
上升沿时变为TRUE
, 当命令结束或出错时, 变为FALSE
BOOL
输出变量bErr
当命令执行出错, 变为TRUE
UDINT
输出变量iErrId
ADS
或NC
错误码注意, 仅有此命令被执行后, 被绑定的轴才能重新使用基本 PTP 控制
基本使用流程
- 通过
MC_Power
使能被控制的轴 - 使用功能块
FiFoWrite
写入坐标 - 使用功能块
FiFoGroupIntegrate
绑定被控制的轴 - 使用功能块
FiFoStart
开始运行指定运动 - 使用功能块
FiFoGroupDisintegrate
解除绑定
XML Server
有关功能块
读取 XML 文件 FB_XmlSrvRead
说明中仅介绍部分有用的参数, 其余未介绍参数见文档, 一般取空值即可
DWORD
输入变量pSymAddr
保存读取结果的地址, 可通过函数ADR(val)
获取变量地址UDINT
输入变量cbSymSize
保存空间大小, 通常使用sizeof(val)
获取空间大小T_MaxString (STRING)
输入变量sFilePath
XML 文件的本地地址T_MaxString
输入变量sXPath
读取参数在 XML 文件的标签位置, 使用/
作为分隔符, 以分隔符/
开始BOOL
输入变量bExecute
在上升沿执行命令TIME
输入变量tTimeout
读取等待时间, 通常设置为T#60s
BOOL
输出变量bBusy
当bExecute
上升沿时变为TRUE
, 当命令结束或出错时, 变为FALSE
BOOL
输出变量bErr
当命令执行出错, 变为TRUE
UDINT
输出变量nErrId
错误码, 含义见文档
可使用 FB_XmlSrvReadByName
版本的功能块按变量名称 (STRING
输入参数 sSymName
) 获取变量, 其余参数同
向 XML 文件写入数据 FB_XmlSrvWrite
说明中仅介绍部分有用的参数, 其余未介绍参数见文档, 一般取空值即可
WORD
输入变量nMode
写入模式XMLSRV_SKIPMISSING
当标签不存在时跳过 (默认)XMLSRV_ADDMISSING
当标签不存在时创建标签
DWORD
输入变量pSymAddr
保存写入值的地址, 可通过函数ADR(val)
获取变量地址UDINT
输入变量cbSymSize
写入值占用空间大小, 通常使用sizeof(val)
获取空间大小T_MaxString (STRING)
输入变量sFilePath
XML 文件的本地地址T_MaxString
输入变量sXPath
读取参数在 XML 文件的标签位置, 使用/
作为分隔符, 以分隔符/
开始BOOL
输入变量bExecute
在上升沿执行命令TIME
输入变量tTimeout
读取等待时间, 通常设置为T#60s
BOOL
输出变量bBusy
当bExecute
上升沿时变为TRUE
, 当命令结束或出错时, 变为FALSE
BOOL
输出变量bErr
当命令执行出错, 变为TRUE
UDINT
输出变量nErrId
错误码, 含义见文档
可使用 FB_XmlSrvWriteByName
版本的功能块按变量名称 (STRING
输入参数 sSymName
) 获取变量, 其余参数同
使用说明
读取结构体
对于结构体
TYPE ST_MYSTRUCT:
STRUCT
a: UINT;
b: DINT;
c: LREAL;
d: STRING;
END_STRUCT
END_TYPE
当读取标签下有相应的子标签, 且变量类型正确, 则能够直接读取到结构体中
例如如下的 XML 文件内容
<variables>
<Var1>10</Var1>
<Var2> <!-- sXPath := '/variables/Var2' -->
<a>100</a>
<b>-10</b>
<c>1.2</c>
<d>Hallo</d>
</Var2>
</variables>
读取数组
在读取数组时, 要求数组各个元素有如下格式的 XML 标签<[ARR] index="[INX]">[ELM]</[ARR]>
ARR
为被读取的数组标签名INX
为数组的索引ELM
为数组元素
仅当数组标签含有属性 index
时, 元素才能被读取
例如如下的 XML 文件内容
<dataentry>
<array1 index="1">10</array1>
<array1 index="2">10</array1>
<array1 index="3">10</array1>
<array1 index="4">10</array1>
</dataentry>
实用参考
错误码查询
https://infosys.beckhoff.com/content/1033/tc3ncerrcode/index.html