Notes on the documentation

This description is only intended for the use of trained specialists in control and automation engineering who are familiar with the applicable national standards.
It is essential that the following notes and explanations are followed when installing and commissioning these components.

The responsible staff must ensure that the application or use of the products described satisfy all the requirements for safety, including all the relevant laws, regulations, guidelines and standards.

Disclaimer

The documentation has been prepared with care. The products described are, however, constantly under development.
For that reason the documentation is not in every case checked for consistency with performance data, standards or other characteristics.
In the event that it contains technical or editorial errors, we retain the right to make alterations at any time and without warning.
No claims for the modification of products that have already been supplied may be made on the basis of the data, diagrams and descriptions in this documentation.

Trademarks

Beckhoff®, TwinCAT®, EtherCAT®, Safety over EtherCAT®, TwinSAFE® and XFC® are registered trademarks of and licensed by Beckhoff Automation GmbH.
Other designations used in this publication may be trademarks whose use by third parties for their own purposes could violate the rights of the owners.

Patent Pending

The TwinCAT Technology is covered, including but not limited to the following patent applications and patents:
EP0851348, US6167425 with corresponding applications or registrations in various other countries.

Copyright

© Beckhoff Automation GmbH.
The reproduction, distribution and utilization of this document as well as the communication of its contents to others without express authorization are prohibited.
Offenders will be held liable for the payment of damages. All rights reserved in the event of the grant of a patent, utility model or design.


Overview

TwinCAT PLC Library: MC Library

概述

该库包括由 PLCopen，IEC61131 用户组织进行标准化的模块。

其详细说明可以在 www.PLCopen.org 查阅。TcMC.lib 包含了基本模块。凸轮模块由凸轮包单独提供。


MC_MoveAbsolute

TwinCAT PLC Library: MC

MC_MoveAbsolute 功能块

MC_MoveAbsolute 功能块用于实现绝对定位。

VAR_INPUT 输入变量

VAR_INPUT
    Execute : 	BOOL;
    Position : 	LREAL;
    Velocity : 	LREAL;
    Acceleration : 	LREAL;
    Deceleration : 	LREAL;
    Jerk : LREAL;
END_VAR

Execute : 命令在上升沿时执行。

Position : 用于定位的绝对目标位置。

Velocity : 最大运动速度（>0）。

Acceleration : 加速度（≥0）。如果该值为 0，将使用系统管理器中轴配置的标准加速度。

Deceleration : 减速度（≥0）。如果该值为 0，将使用系统管理器中轴配置的标准减速度。

Jerk : 加加速度（≥0）。如果该值为 0，将使用系统管理器中轴配置的标准加加速度。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : 		BOOL;
    CommandAborted : 	BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
END_VAR

Done : 一旦到达目标位置，该变量置TRUE。

CommandAborted : 如果命令不能完全被执行，该变量置TRUE。其原因可能由于一个错误、停止或者重复运动命令。

Error: 一旦产生错误，该变量置TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构。

开发环境 | 目标系统类型 | 所属PLC库
TwinCAT v2.8 | PC (i386) | TcMC.Lib


MC_MoveRelative

MC_MoveRelative 功能块

MC_MoveRelative 功能块用于进行相对定位。

VAR_INPUT 输入变量

VAR_INPUT
    Execute : 	BOOL;
    Distance : 	LREAL;
    Velocity : 	LREAL;
    Acceleration : 	LREAL;
    Deceleration : 	LREAL;
    Jerk : 		LREAL;
END_VAR

Execute : 命令在上升沿时执行。

Distance : 用于定位的相对距离。

Velocity : 最大运动速度（>0）。

Acceleration : 加速度（≥0）。如果该值为 0，将使用系统管理器中轴配置的标准加速度。

Deceleration : 减速度（≥0）。如果该值为 0，将使用系统管理器中轴配置的标准减速度。

Jerk : Jerk (≥0). 加加速度（≥0）。如果该值为 0，将使用系统管理器中轴配置的标准加加速度。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : 		BOOL;
    CommandAborted : 	BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
END_VAR

Done : 一旦到达目标位置，该变量置 TRUE。

CommandAborted : 如果命令不能完全被执行，该变量置 TRUE。其原因可能由于一个错误、停止或者重复运动命令。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号 。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构

Development environment | Target system type | PLC libraries to be linked


MC_MoveVelocity

MC_MoveVelocity 功能块

功能块用于进行连续运动。

VAR_INPUT 输入变量

VAR_INPUT
    Execute : 	BOOL;
    Velocity : 	LREAL;
    Acceleration : 	LREAL;
    Deceleration : 	LREAL;
    Jerk : 		LREAL;
    Direction : 	MC_Direction;
ND_VAR

Execute : 命令在上升沿时执行。

Velocity : 最大运动速度（>0）。

Acceleration : 加速度（≥0）。如果该值为 0，将使用系统管理器中轴配置的标准加速度。

Deceleration : 减速度（≥0）。如果该值为 0，将使用系统管理器中轴配置的标准减速度。

Jerk : 加加速度（≥0）。如果该值为 0，将使用系统管理器中轴配置的标准加加速度。

Direction : 运动的方向。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    InVelocity :	BOOL;
    CommandAborted : 	BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
END_VAR

InVelocity : 一旦到达目标速度，该变量置 TRUE。

CommandAborted : 如果命令不能完全被执行，该变量置 TRUE。其原因可能由于一个错误、停止或者重复运动命令。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构。


MC_MoveModulo Appendix

模数定位注意

不考虑轴类型，模数定位（MC_MoveModulo）是可行的。因为 TwinCAT 使得轴之间没有差异，所以模数定位既可以用于线性轴又可用于旋转轴，轴模数拥有连续绝对的位置，其范围为 ±∞。轴的模数位置只是关于绝对轴位置的额外信息。模数定位以不同的方式表示需要的目标位置。不像绝对定位那样用户明确地指定目标，由于要求的目标位置可能以不同的方式解释，所以模数定位存在潜在的缺陷。

TwinCAT 系统管理器的设置

模数定位指能够在 TwinCAT 系统管理器中设置的模数周期。本页的示例假设旋转轴模数周期为 360 度。

模数公差窗口定义了轴当前模数设定位置周围的位置窗口。窗口宽度为指定值的两倍（设定位置±公差值）。下面对公差窗口进行了详细描述。

轴复位的特色

轴定位始终参考设定位置。轴的设定位置通常是上次运动命令的目标位置。轴复位(MC_Reset，MC_Power 控制器激活)可导致设定位置不同于用户期望的位置。因为在这种情况下当前实际位置被当作设定位置。轴复位也将产生的跟踪误差复位。如果没有考虑该可能性，后续定位将导致意想不到的情况。

示例：轴定位至 90 度，随后轴的设定位置准确地位于 90 度。下一步模数运动命令以正方向全周运动至 450 度，随后轴的模数位置再一次准确的位于 90 度。如果在这期间执行轴复位，轴的设定位置将可能有些小或大。新的值取决于复位时轴的实际位置。然而，下一个运动命令将产生不同的结果。如果设定位置稍微小于 90 度，那么一个新的正方向至 90 度的运动命令将导致最小运动。复位造成的偏差被补偿，随后的设定位置再一次正好为 90 度。然而，如果轴复位后的设定位置略大于 90 度，那么相同的运动命令导致全周运动，以到达准确的 90 度设定位置。当 360 度全周或者多个 360 度启动时该问题会出现。定位至一个明显不同于当前模数位置的角度，运动命令是明确的。

为了解决这个问题，可以在系统管理器中参数化模数公差窗口。这样可以确保较小偏离在窗口内的位置，该位置不会导致不同轴行为。例如，如果一个窗口被参数化 1 度，在上述情况下，只要设定位置介于 89 度和 91 度之间，轴将同一地运转。如果设定位置超过 90 度至少 1 度，轴以正方向在模数启动时重新定位。在这两种情况下，目标位置为 90 度，所以导致最小运动刚好 90 度。在两种情况下，一个在 450 度的目标位置导致运动完整一周。

图：模数公差窗口效果——正方向模数目标位置 90 度

对于在窗口范围内的值，模数公差窗口能够导致与指定方向相反的运动。对于小窗口这通常不是问题，因为在设定和实际位置间的系统偏差被两个方向补偿。这意味着公差窗口也可用于轴，这些轴由于其结构作单方向运动。

小于一周的模数定位

从起始位置到不恒等的目标位置的模数定位是明确的，不需要特殊考虑。模数目标位置在[0 = 位置 < 360度]范围不到一整周到达要求的目标位置。如果目标位置和起始位置为同一个位置，则不会出现任何运动。大于 360 度的目标位置在轴运动至要求的目标位置之前将运动一周或者多个全周。

对于从 270 度运动至 0 度，应该指定 0 度（不是 360 度）模数目标位置，因为 360 度超出了基本范围并且将产生额外的旋转。

对于模数定位，在三个不同方向，也就是正方向、负方向和沿着最短路径（MC_Direction）之间产生一个目标位置。对于沿着最短路径的定位，目标位置超过 360 度是不明智的，因为运动是直接朝向目标位置的。与正或负方向对比，不可能在轴移动至目标位置之前运动几周。

重要：对启动类型为沿最短路径的模数定位，只有模数目标位置在基本周期内（如小于 360 度）才是允许的，否则将返回错误。

下表列出了一些定位示例：

方向(模数启动类型) | 绝对起始位置 | 模数目标位置 | 相对运动 | 绝对终点位置 | 模数终点位置
正方向 | 90.00 | 0.00 | 270.00 | 360.00 | 0.00
正方向 | 90.00 | 360.00 | 630.00 | 720.00 | 0.00
正方向 | 90.00 | 720.00 | 990.00 | 1080.00 | 0.00
负方向 | 90.00 | 0.00 | -90.00 | 0.00 | 0.00
负方向 | 90.00 | 360.00 | -450.00 | -360.00 | 0.00
负方向 | 90.00 | 720.00 | -810.00 | -720.00 | 0.00
沿着最短路径 | 90.00 | 0.00 | -90.00 | 0.00 | 0.00

全周的模数定位

原则上，通过一个或者多个全周的模数定位与定位至一个不同于起始位置的角度是一样的。如果目标位置和起始位置为同一个位置，则不会出现任何运动。对于一个全周，应当在起始位置的基础上增加 360 度。

上述复位行为表明，全周定位需要特别注意。下表列出对于起始位置大约为 90 度的一些定位示例。模数公差窗口（TW）设为 1 度。确定了起始位置超出窗口的特殊情况。

方向(模数启动类型) | 绝对起始位置 | 模数目标位置 | 相对运动 | 绝对终点位置 | 模数终点位置 | 备注
正方向 | 90.00 | 90.00 | 0.00 | 90.00 | 90.00 |
正方向 | 90.90 | 90.00 | -0.90 | 90.00 | 90.00 |
正方向 | 91.10 | 90.00 | 358.90 | 450.00 | 90.00 | 超出公差窗口
正方向 | 89.10 | 90.00 | 0.90 | 90.00 | 90.00 |
正方向 | 88.90 | 90.00 | 1.10 | 90.00 | 90.00 | 超出公差窗口
正方向 | 90.00 | 450.00 | 360.00 | 450.00 | 90.00 |
正方向 | 90.90 | 450.00 | 359.10 | 450.00 | 90.00 |
正方向 | 91.10 | 450.00 | 718.90 | 810.00 | 90.00 | 超出公差窗口
正方向 | 89.10 | 450.00 | 360.90 | 450.00 | 90.00 |
正方向 | 88.90 | 450.00 | 361.10 | 450.00 | 90.00 | 超出公差窗口
正方向 | 90.00 | 810.00 | 720.00 | 810.00 | 90.00 |
正方向 | 90.90 | 810.00 | 719.10 | 810.00 | 90.00 |
正方向 | 91.10 | 810.00 | 1078.90 | 1170.00 | 90.00 | 超出公差窗口
正方向 | 89.10 | 810.00 | 720.90 | 810.00 | 90.00 |
正方向 | 88.90 | 810.00 | 721.10 | 810.00 | 90.00 | 超出公差窗口
负方向 | 90.00 | 90.00 | 0.00 | 90.00 | 90.00 |
负方向 | 90.90 | 90.00 | -0.90 | 90.00 | 90.00 |
负方向 | 91.10 | 90.00 | -1.10 | 90.00 | 90.00 | 超出公差窗口
负方向 | 89.10 | 90.00 | 0.90 | 90.00 | 90.00 |
负方向 | 88.90 | 90.00 | -358.90 | -270.00 | 90.00 | 超出公差窗口
负方向 | 90.00 | 450.00 | -360.00 | -270.00 | 90.00 |
负方向 | 90.90 | 450.00 | -360.90 | -270.00 | 90.00 |
负方向 | 91.10 | 450.00 | -361.10 | -270.00 | 90.00 | 超出公差窗口
负方向 | 89.10 | 450.00 | -359.10 | -270.00 | 90.00 |
负方向 | 88.90 | 450.00 | -718.90 | -630.00 | 90.00 | 超出公差窗口
负方向 | 90.00 | 810.00 | -720.00 | -630.00 | 90.00 |
负方向 | 90.90 | 810.00 | -720.90 | -630.00 | 90.00 |
负方向 | 91.10 | 810.00 | -721.10 | -630.00 | 90.00 | 超出公差窗口
负方向 | 89.10 | 810.00 | -719.10 | -630.00 | 90.00 |
负方向 | 88.90 | 810.00 | -1078.90 | -990.00 | 90.00 | 超出公差窗口

PLC 程序模数计算

在 TwinCAT NC 中，所有轴定位任务都是基于设定位置执行的。当前实际位置仅用作控制目的。如果 PLC 程序基于当前位置计算新的目标位置，必须在计算中使用轴的当前设定位置。与绝对设定位置 fPosSoll 相比，在周期轮询轴接口 NCTOPLC_AXLESTRUCT 中，模数设定位置并未明确地获得。可以使用来自于 TcMath.lib 库的功能块计算模数设定位置和模数旋转数目。

ModuloSetPosition := MODABS( NcToPlc.fPosSoll, 360 );

ModuloSetTurns := MODTURNS( NcToPlc.fPosSoll, 360 );

不推荐基于周期轮询轴接口(fModuloPosIst 和 nModuloTurns)获得的模数实际位置来计算任务。因为在编程过程中控制轴偏差可能会导致错误，如不需要的旋转。

应用示例

在系统内部，旋转轴执行一次旋转。每次操作的起始位置为 90 度，每个周期轴以正方向定位 360 度。由于机械缘故不允许反向定位。作为轴控制运动的一部分，较小的反向定位是可以接受的。

在系统管理器中模数公差窗口设置为 1.5 度。这样确保避免轴复位后不必要的旋转。由于轴只能以正方向定位，使用带MC_MoveModulo模数启动类型正方向（MC_Positive_Direction）的命令。模数目标位置指定为 450 度，因为在一个全周 360 度后，再次到达初始方向。模数目标位置为 90 度不会导致任何运动。

这一进程始于一个基本定位运动（MC_MoveModulo），以确保起始位置是准确的。步进序列然后转变成一个执行周期。如果发生故障， MC_Reset将轴复位，随后（步进序列开始时）运动至有效的起始位置。在这种情况下，指定 90 度为目标位置，使这一位置尽可能快地到达。如果轴已处于起始位置则不会有任何运动。

在步进序列起动时就要执行复位，以致轴在加工启动时就被初始化。


MC_NewPos

MC_NewPos 功能块

MC_NewPos 功能块用于指定运动中轴的新目标位置。

VAR_INPUT 输入变量

VAR_INPUT
    Execute :		BOOL;
    NewPos : 		LREAL;
ND_VAR

Execute : 命令在上升沿时执行。

NewPos : 新目标位置。新目标位置可以比旧目标位置大或者小。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : 		BOOL;
    CommandAborted : 	BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
END_VAR

Done : 如果命令成功执行，该变量置 TRUE。

CommandAborted : 如果任务被中断该变量置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构。


MC_NewPosAndVelo

MC_NewPosAndVelo 功能块

MC_NewPosAndVelo 功能块用于为运动中的轴指定带新速度的新目标位置。

VAR_INPUT 输入变量

VAR_INPUT
    Execute : 	BOOL;
    Mode: 		E_CmdTypeNewTargPosAndVelo;
    NewPos : 		LREAL;
    NewVelo : 	LREAL;
    ActivationPos : 	LREAL;
ND_VAR

Execute : 命令在上升沿时执行。

Mode : 新目标位置/速度的模式。

NewPos : 新目标位置。新目标位置可以比旧目标位置大或者小。

NewVelo : 新速度。

ActivationPos : 为非瞬时接收而激活新位置或速度的位置。当使用REACH_VELO_AT_POS 模式时，新速度已经到达该位置。改变在之前就开始。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : 		BOOL;
    CommandAborted : 	BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
END_VAR

Done : 如果命令成功执行，该变量置 TRUE。

CommandAborted : 如果任务被中断该变量置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构。


Application Samples with MC_MoveSuperImposedExt

Application examples for MC_MoveSuperImposedExt

The function block MC_MoveSuperImposedExt starts a higher-level motion on an axis that is already moving. For this superposition various applications are available that are described below.

Distance correction for products on a conveyor belt

A conveyor belt consists of individual segments, each driven by an axis. The conveyor belt is used for transporting packages, the spacing of which is to be corrected. To this end a conveying segment must briefly run faster or slower relative to a following segment.

The measured distance is 1800 mm and is to be reduced to 1500 mm. Conveyor belt 1 should be accelerated in order to reduce the distance. The correction must be completed by the time the end of belt 1 is reached in order to prevent the package being pushed onto the slower belt 2.

Since in this situation conveyer 1 has to be accelerated the drive system requires a velocity reserve, assumed to be 500 mm/s in this case. In practice this value can be determined from the difference between the maximum conveyor speed and the current set velocity.

For parameterization of function block MC_MoveSuperImposedExt this means:

Distance = 1800 mm - 1500 mm = 300 mm (distance correction)

Length = 1000 mm (available distance up to the end of belt 1)

Mode = SUPERPOSITIONMODE_VELOREDUCTION_LIMITEDMOTION

VelocityDiff = 500 mm/s

The mode defines that the distance Length up to the end of the conveyor belt is used for the correction and that the correction is completed at this point. The system uses the internally calculated velocity as degree of freedom. VelocityDiff therefore is the upper limit for the velocity change in this case.

Alternatively the correction could be achieved by decelerating belt 2. In this case Distance must be negative and the available correction distance Length is the distance between the right-hand package and the end of the belt. The maximum possible velocity change VelocityDiff corresponds to the current set velocity. Belt 2 could therefore be decelerated down to zero, if necessary.

Phase shift of a print roller

A print roller rotates with constant peripheral velocity at the same speed as conveyor belt on which a workpiece to be printed is transported. For synchronization with the workpiece the print roller is to be advanced by a certain angle (phase shift).

The phase shift can be implemented in two ways. The angle can be corrected as quickly as possible, resulting in a short-term strong increase in the velocity of the print roller. Alternatively a correction distance can be defined within which the correction can occur, e.g. a complete roller revolution. This leads to the following possible parameterizations for function block MC_MoveSuperImposedExt:

1. Fast correction:

Distance = 7.1°

Length = 360° (maximum possible correction distance)

Mode = SUPERPOSITIONMODE_LENGTHREDUCTION_LIMITEDMOTION

VelocityDiff = 30°/s (velocity reserve)

The mode specifies that the correction distance should be as short as possible. The stated value for Length therefore is an upper limit that can be chosen freely (but not too small).

Alternatively SUPERPOSITIONMODE_LENGTHREDUCTION_ADDITIVEMOTION can be used as mode. In this case the whole correction distance would be up to 367.1°. Since the distance should be as short as possible both modes are equivalent in this case.

2. Slow correction:

Distance = 7.1°

Length = 360° (correction distance)

Mode = SUPERPOSITIONMODE_VELOREDUCTION_LIMITEDMOTION

VelocityDiff = 30°/s (velocity reserve)

The mode specifies that the correction distance should be utilized fully and the velocity change should be kept as small as possible. The stated value for VelocityDiff therefore is an upper limit that can be chosen freely (but not too small).

Drilling unit

A drilling unit should drill two holes in a moving workpiece. Synchronization for the first hole is assumed to be achieved via the flying saw (MC_GearInPos) and is not be considered here. After the first operation the device must be moved by certain distance relative to the moving workpiece.

The drilling unit is to be advanced by 250 mm relative to the workpiece after the first hole has been drilled. Meanwhile the workpiece covers a distance of 400 mm. From this position the drilling unit is once again synchronous with the workpiece and the second hole can be drilled.

Here too two options are available that differ in terms of the velocity change of the drilling device and therefore in the mechanical strain.

Parameterization of function block MC_MoveSuperImposedExt:

1. Fast correction:

Distance = 250 mm

Length = 400 mm

Mode = SUPERPOSITIONMODE_LENGTHREDUCTION_ADDITIVEMOTION

VelocityDiff = 500 mm/s (velocity reserve of the drilling device)

The mode specifies that the correction distance should be as short as possible. The stated value for Length therefore is an upper limit that can be chosen freely (but not too small). The drilling device can travel a larger distance since Length refers to the workpiece plus a relative change in position.

2. Slow correction:

Distance = 250 mm

Length = 400 mm

Mode = SUPERPOSITIONMODE_VELOREDUCTION_ADDITIVEMOTION

VelocityDiff = 500 mm/s (velocity reserve of the drilling device)

The mode specifies that the correction distance should be utilized fully and the velocity change should be kept as small as possible. The stated value for VelocityDiff therefore is an upper limit that can be chosen freely (but not too small). During the change in position the workpiece covers the distance Length, the drilling unit travels 650 mm due to the additional correction distance (Length + Distance).


MC_AbortSuperposition

MC_AbortSuperposition功能块

MC_AbortSuperposition功能块中断由MC_MoveSuperImposed 或 MC_MoveSuperImposedExt开启的叠加运动，而不会使基本运动停止。如果要轴完全停止，可以使用MC_Stop功能块，而没有必要使用MC_AbortSuperposition功能块。

VAR_INPUT 输入变量

VAR_INPUT
    Execute		: BOOL;
END_VAR

Execute : 命令在上升沿时执行，外部位置锁存器停用。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done 		: BOOL;
    Busy 		: BOOL;	(* function block is currently busy *)
    Error 		: BOOL;	(* Signals that an error has occured within Function Block *)
    ErrorID 		: UDINT;	(* Error identification *)
END_VAR

Done : 一旦叠加运动被成功中断，该变量置TRUE。

Busy: 该功能块一被激活，该变量置 TRUE；功能块恢复初始状态时，该变量置TRUE。

Error : 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis		: NCTOPLC_AXLESTRUCT;	(* Identifies the axis which position should be recorded at a defined event at the trigger input *)
END_VAR

Axis : 轴结构。

Development environment | Target system type | PLC libraries to be linked
from TwinCAT v2.10 | PC (i386) | TcMC.Lib


MC_GearIn

MC_GearIn 功能块

MC_GearIn 功能块用于激活线性主从耦合（齿轮耦合）。该功能块接受固定的分子分母格式的齿轮齿数比。 带 LREAL 齿轮齿数比的 MC_GearInFloat 功能块和带动力学可变齿轮齿数比的 MC_GearInDyn 功能块可供选择。

注意：

耦合功能只有在静止时才能激活。输入变量Acceleration, Deceleration and Jerk未使用。

通过使用可选的Flying Saw 功能（MC_GearInPos, MC_GearInVelo）可以实现运动轴的耦合。

VAR_INPUT 输入变量

VAR_INPUT
    Execute : 		BOOL;
    RatioNumerator : 		INT;
    RatioDenominator : 	UINT;
    Acceleration : 		LREAL;
    Deceleration : 		LREAL;
    Jerk : 			LREAL;
END_VAR

Execute : 命令在上升沿时执行。

RatioNumerator : 传动因子分子。

RatioDenominator : 传动因子分母。

Acceleration : 加速度。（未使用）

Deceleration : 减速度（未使用）

Jerk : 加加速度 （未使用）

对于 1:3 这个比率，分子为 1 而分母为 3。当然，分子也可以为负值。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    InGear : 		BOOL;
    CommandAborted : 	BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
END_VAR

InGear : 如果耦合成功，该变量置 TRUE。

CommandAborted : 如果不能执行耦合，该变量置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Master : NCTOPLC_AXLESTRUCT;
    Slave : 	NCTOPLC_AXLESTRUCT;
END_VAR

Master : 主动轴结构

Slave : 从动轴结构


MC_GearInFloat

MC_GearInFloat 功能块

MC_GearInFloat 功能块用于激活线性主从耦合（齿轮耦合）。该功能块接受 LREAL格式的固定齿轮齿数比。带分子分母齿轮齿数比的 MC_GearIn 功能块和带动力学可变齿轮齿数比的 MC_GearInDyn 功能块可供选择。

注意：

耦合只有在静止时才能激活。输入变量Acceleration, Deceleration and Jerk未使用。

通过使用可选的Flying Saw 功能（MC_GearInPos, MC_GearInVelo）可以实现运动轴的耦合。

VAR_INPUT 输入变量

VAR_INPUT
    Execute : 		BOOL;
    GearRatio : 		LREAL;
    Acceleration : 		LREAL;
    Deceleration : 		LREAL;
    Jerk : 			LREAL;
END_VAR

Execute : 命令在上升沿时执行。

GearRatio : 传动因子。

Acceleration : 加速度。（未使用）

Deceleration : 减速度。（未使用）

Jerk : 加加速度。（未使用）

VAR_OUTPUT 输出变量

VAR_OUTPUT
    InGear : 		BOOL;
    CommandAborted : 	BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
END_VAR

InGear : 如果耦合成功，该变量置 TRUE。

CommandAborted : 如果不能进行耦合，该变量置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Master : NCTOPLC_AXLESTRUCT;
    Slave : 	NCTOPLC_AXLESTRUCT;
END_VAR

Master : 主动轴结构。

Slave : 从动轴结构。


MC_GearOut

MC_GearOut 功能块

MC_GearOut 功能块用于解除线性主从耦合（齿轮耦合）。

注意：如果设定值生成器类型被设置为“7相位（最优化）“，则从动轴在解耦后，其加速度将降为0，然后从动轴将以常速一直运行下去。解耦后的轴将不会被定位到任何位置。其动作和MC_MoveVelocity定义的运动很相似。在TwinCAT 2.10版，设定值生成器类型是可选的。从TwinCAT 2.11版开始，设定值生成器类型固定为“7相位（最优化）“。如果程序从TwinCAT 2.10 升级为 TwinCAT 2.11，则轴解耦后的动作将和这里描述的一样。

VAR_INPUT 输入变量

VAR_INPUT
    Execute : BOOL;
END_VAR

Execute : 命令在上升沿时执行。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : 		BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
END_VAR

Done : 如果解耦成功，该变量就置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Slave : NCTOPLC_AXLESTRUCT;
END_VAR

Slave : 从动轴结构。


MC_GearOutExt

FUNCTION_BLOCK MC_GearOutExt

Remark: From TwinCAT 2.11 a slave axis will reduce its acceleration to zero after it is being decoupled and it will then continue moving endless at constant velocity. The decoupled axis will not be positioned to any target position. The behavior is comparable to a move commanded by MC_MoveVelocity.

MC_GearOutExt is an extended universal decoupling command. With this command the slave axis is feed with a sequence command directly after decoupling. Therefore a smooth transition from a coupled movement to a discrete movement is possible.

Remark: The sequence command can only be executed if the slave axis is decoupled in the movement. In the standstill, no sequence command is possible.

VAR_INPUT

VAR_INPUT
    Execute 		: BOOL;
    Mode 		: E_DecoupleMode;
    Position		: LREAL;
    Velocity		: LREAL;
    Acceleration 	: LREAL;
    Deceleration 	: LREAL;
    Jerk		: LREAL;
END_VAR

Execute : The command is executed with rising edge.

Mode: describes the sequence command, that is executed directly after the decoupling of the slave axis.

TYPE E_DecoupleMode :
(
    MC_DECOUPLEMODE_STOP, 		(* 0 Stop after decoupling *)
    MC_DECOUPLEMODE_ORIENTEDSTOP, 	(* 1 Oriented stop after decoupling *)
    MC_DECOUPLEMODE_ENDLESS, 		(* 2 endless motion at actual velocity after decoupling *)
    MC_DECOUPLEMODE_ENDLESS_NEWVELO,	(* 3 endless motion at parameterized velocity after decoupling *)
    MC_DECOUPLEMODE_NEWPOS, 		(* 4 stop at parameterized position after decoupling *)
    MC_DECOUPLEMODE_NEWPOSANDVELO, 	(* 5 move at parameterized velocity after decoupling and
                         stop at parameterized position *)
    MC_DECOUPLEMODE_INSTANTANEOUSSTOP 	(* 6 instantaneous stop (jump to velocity zero) *)
);
END_TYPE

Position : Absolute target position to be used for positioning. If the mode OrientedStop is used, the Position is a modulo position.

Velocity : Maximum travel velocity (>0).

Acceleration : Acceleration (≥0). If the value is 0, the standard acceleration from the axis configuration in the System Manager is used.

Deceleration : Deceleration (≥0). If the value is 0, the standard deceleration from the axis configuration in the System Manager is used.

Jerk : Jerk (≥0). If the value is 0, the standard jerk from the axis configuration in the System Manager is used.

VAR_OUTPUT

VAR_OUTPUT
    Done		: BOOL;
    Busy		: BOOL;
    CommandAborted	: BOOL;
    Error		: BOOL;
    ErrorID		: UDINT;
END_VAR

Done : Becomes TRUE, if decoupling was successful. And if according to the following command the target position or the constant velocity was reached.

Busy : Becomes TRUE, as soon as the block is active. Busy becomes TRUE with a rising edge at Execute and becomes FALSE again after the block finished or aborted its operation. A rising edge at Execute will then be accepted.

CommandAborted : Becomes TRUE, if the command could not be fully executed. The reason may be an error, a stop or a superimposed travel command.

Error: Becomes TRUE, as soon as an error occurs.

ErrorID : Supplies the error number when the Error output is set

VAR_IN_OUT

VAR_IN_OUT
    Slave		: NCTOPLC_AXLESTRUCT;
END_VAR

Slave : Axis structure of the slave.

Development environment | Target system type | PLC libraries to be linked
TwinCAT v2.10 Build 1313 | PC (i386) | TcMC.Lib


MC_Power

MC_Power 功能块

轴的启用在 MC_Power 功能块中被设置。

VAR_INPUT 输入变量

VAR_INPUT
    Enable : 		BOOL;
    Enable_Positive : BOOL;
    Enable_Negative : BOOL;
    Override : 	LREAL;
END_VAR

Enable : 只要输入为 TRUE 命令就执行。

Enable_Positive: .

Enable_Negative :

Override: 超调值，以百分比表示（如 68.123%）

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Status : 		BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
END_VAR

Status : 一旦所有启用被成功设置，该变量置 TRUE。 当其置TRUE时，表明驱动器也已准备就绪。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    AxisRefIn : 	NCTOPLC_AXLESTRUCT;
    AxisRefOut : 	PLCTONC_AXLESTRUCT;
EEND_VAR

Axis : 轴结构


MC_Reset

MC_Reset 功能块

MC_Reset 功能块执行轴的复位。

VAR_INPUT 输入变量

VAR_INPUT
    Execute : 	BOOL;
END_VAR

Execute : 只要输入为 TRUE 命令就执行。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : 		BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
END_VAR

Done : 如果复位命令被成功执行，该变量就置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构


MC_ReadActualPosition

MC_ReadActualPosition 功能块

实际轴位置可以通过 MC_ActualPosition 功能块读取。

VAR_INPUT

VAR_INPUT
    Enable : BOOL;
END_VAR

Enable : 只要输入为 TRUE命令就执行。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : 		BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
    Position : 	LREAL;
END_VAR

Done : 如果状态被成功确定，该变量就置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

Position : 当前轴位置。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构


MC_ReadStatus

MC_ReadStatus 功能块

轴的状态将通过 MC_ReadStatus 功能块显示。

VAR_INPUT 输入变量

VAR_INPUT
    Enable : BOOL;
END_VAR

Enable : 只要输入为 TRUE 命令就执行。

VAR_OUTPUT

VAR_OUTPUT
    Done : 			BOOL;
    Error : 			BOOL;
    ErrorID : 		UDINT;
    Errorstop : 		BOOL;
    Stopping : 		BOOL;
    StandStill : 		BOOL;
    DiscreteMotion : 		BOOL;
    ContinousMotion : 		BOOL;
    SynchronizedMotion : 	BOOL;
    Homing : 			BOOL;
    ConstantVelocity : 	BOOL;
    Accelerating : 		BOOL;
    Decelerating : 		BOOL;
END_VAR

Done : 如果状态被成功确定，该变量就置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

Errorstop : 轴一旦产生错误该变量就置 TRUE。

Stopping : 轴一旦进入制动阶段该变量就置 TRUE。

StandStill : 轴一旦静止该变量就置 TRUE

DiscreteMotion : 轴由于离散运动而一旦运动该变量就置 TRUE。

ContinousMotion : 轴由于连续运动而一旦运动该变量就置 TRUE。

SynchronizedMotion : 轴一旦耦合该变量就置 TRUE。

Homing : 轴一旦回到参考点该变量就置 TRUE。

ConstantVelocity : 轴一旦以恒定速度运动该变量就置 TRUE。

Acceleration : 轴一旦加速该变量就置 TRUE。

Deceleration : 轴一旦减速该变量就置 TRUE。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构


MC_ReadAxisError

MC_ReadAxisError 功能块

轴的错误代码通过 MC_ReadAxisError 功能块显示。

VAR_INPUT 输入变量

VAR_INPUT
    Enable : BOOL;
END_VAR

Enable : 只要输入为 TRUE 命令就执行。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : 		BOOL;
    Error : 		BOOL;
    ErrorID :		UDINT;
END_VAR

Done : 如果状态被成功确定，该变量就置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构


MC_ReadParameter

MC_ReadParameter 功能块

MC_ReadParameter 功能块用于读取轴的参数。

注意： 注意：此处的“轴”是参考 TwinCAT NC 轴参数，而不是驱动参数！

VAR_INPUT 输入变量

VAR_INPUT
    Enable : 		BOOL;
    ParameterNumber : INT;
END_VAR

Enable : 只要输入为 TRUE 命令就执行。

ParameterNumber : 要读取的参数数量。

ReadMode : 要读取的参数读取模式（单次或循环读取）。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : 		BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
    Value : 		LREAL;
END_VAR

Done : 如果状态被成功确定，该变量就置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

Value : 显示读取的值。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构


MC_ReadBoolParameter

MC_ReadBoolParameter 功能块

MC_ReadBoolParameter 功能块用于读取轴的布尔参数。

注意：此处的“轴”是参考 TwinCAT NC 轴参数，而不是驱动参数！

VAR_INPUT 输入变量

VAR_INPUT
    Enable : 		BOOL;
    ParameterNumber : INT;
END_VAR

Enable : 只要输入为 TRUE 命令就执行。

ParameterNumber : 要读取的参数数量。

ReadMode : 要读取的参数读取模式（单次或循环读取）。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : 		BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
    Value : 		LREAL;
END_VAR

Done : 如果状态被成功确定，该变量就置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

Value : 显示读取的布尔值。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构


MC_ReadParameterSet

MC_ReadParameterSet 功能块

MC_ReadParameterSet 功能块用于读取轴全部的设置参数。

注意：此处的“轴”是参考 TwinCAT NC 轴参数，而不是驱动参数！

VAR_INPUT 输入变量

VAR_INPUT
    Execute : 	BOOL;
END_VAR

Execute : 命令在上升沿时执行。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : 		BOOL;
    Busy: 		BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
END_VAR

Done : 如果状态被成功确定，该变量就置 TRUE。

Busy : 该功能块一被激活，该变量置 TRUE。在 Execute 上升沿 Busy 置为 TRUE，又在完成任务或者操作取消时置为 FALSE。此时，在 Execute 的上升沿将被接受。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Parameter : 	ST_AxisParameterSet;
    Axis : 		NCTOPLC_AXLESTRUCT;
END_VAR

Parameter : 全部轴参数数据类型 ST_AxisParameterSet 的设置。

Axis : 轴结构


MC_ReadAxisComponents

MC_ReadAxisComponents 功能块

MC_ReadAxisComponents 功能块用于读取轴的解码器、驱动器和控制器的相关信息。

注意：此处的“轴”是参考 TwinCAT NC 轴参数，而不是驱动参数！

VAR_INPUT 输入变量

VAR_INPUT
    Execute : 	BOOL;
END_VAR

Execute : 命令在上升沿时执行。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : 		BOOL;
    Busy: 		BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
END_VAR

Done : 如果状态被成功确定，该变量就置 TRUE。

Busy : 该功能块一被激活，该变量置 TRUE。在 Execute 上升沿 Busy 置为 TRUE，又在完成任务或者操作取消时置为 FALSE。此时，在 Execute 的上升沿将被接受。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Parameter : 	ST_AxisParameterSet;
    Axis : 		NCTOPLC_AXLESTRUCT;
END_VAR

AxisComponents : 轴参数数据类型 ST_AxisComponents 的设置。

Axis : 轴结构

Development environment | Target system type | PLC libraries to be linked
TwinCAT v2.10 Build 1251 | PC (i386) | TcMC.Lib


MC_WriteParameter

MC_WriteParameter 功能块

轴参数通过 MC_WriteParameter 功能块写入。

注意：此处的“轴”是参考 TwinCAT NC 轴参数，而不是驱动参数！

VAR_INPUT 输入变量

VAR_INPUT
    Enable :		BOOL;
    ParameterNumber :	INT;
    Value :		LREAL;
END_VAR

Enable : 只要输入为 TRUE 命令就执行。

ParameterNumber : 要读取的参数数量。

Value : LREAL 类型值被写入。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done :		BOOL;
    Error :		BOOL;
    ErrorID :		UDINT;
END_VAR

Done : 如果状态被成功确定，该变量就置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出参数

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构。


MC_WriteBoolParameter

MC_WriteBoolParameter 功能块

轴的布尔参数可以通过 MC_WriteBoolParameter 功能块写入。

注意：此处的“轴”是参考 TwinCAT NC 轴参数，而不是驱动参数！

VAR_INPUT 输入变量

VAR_INPUT
    Enable :		BOOL;
    ParameterNumber :	INT;
    Value :		BOOL;
END_VAR

Enable : 只要输入为 TRUE 命令就执行。

ParameterNumber : 要读取的参数数量。

Value : 布尔值被写入。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : 		BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
END_VAR

Done : 如果状态被成功地确定，该变量就置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构。


MC_SetActualPosition

MC_SetActualPosition 功能块

MC_SetActualPosition 功能块可以设定轴的实际位置。

VAR_INPUT 输入变量

VAR_INPUT
    Execute : 	BOOL;
    Position : 	LREAL;
END_VAR

Execute : 命令在上升沿时执行。

Position : 要设定的实际位置。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : 		BOOL;
    CommandAborted : 	BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
END_VAR

Done : 如果命令成功执行，该变量置 TRUE。

CommandAborted : 如果任务被中断该变量置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构。


MC_SetOverride

MC_SetOverride 功能块

MC_SetOverride 功能块可以指定轴的超调量。

VAR_INPUT 输入变量

VAR_INPUT
    Execute : 	BOOL;
    Override : 	LREAL;
END_VAR

Execute : 命令在上升沿时执行。

Override: 新超调值。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : 		BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
END_VAR

Done : 如果命令成功执行，该变量置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    AxisRefIn : 	NCTOPLC_AXLESTRUCT;
    AxisRefOut : 	PLCTONC_AXLESTRUCT;
END_VAR

Axis : 轴结构。


MC_SetReferenceFlag

SetReferenceFlag 功能块

MC_SetReferenceFlag 功能块用于改变当前轴的axis is homed状态。当不是 MC_Home功能块而是其他机构用于对轴进行回参时（例如，运动至机械停车点），需要该功能块。在这种情况下，可以使用 MC_SetActualPosition 功能块设定原点位置。

VAR_INPUT 输入变量

VAR_INPUT
    Execute : BOOL;
    ReferenceFlag : BOOL;
END_VAR

Execute : 命令在上升沿时执行。

ReferenceFlag : 轴的新回参状态。轴回参后，该变量置 TRUE，反之，该变量置FALSE。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : 		BOOL;
    Error : 		BOOL;
    ErrorID : 	UDINT;
END_VAR

Done : 如果命令成功执行，该变量置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构。


MC_ExtSetPointGenEnable

MC_ExtSetPointGenEnable 功能块

MC_ExtSetPointGenEnable 功能块可以用于接通轴的外部设定值生成器。轴随后从自身周期轮询轴接口（fExtSetPos, fExtSetVelo, fExtSetAcc 和 nExtSetDirection）接收设定值规范。

VAR_INPUT 输入变量

VAR_INPUT
    Execute : BOOL;
    Position : LREAL;
    PositionType : E_TargPosType;
END_VAR

Execute : 命令在上升沿时执行。

Position : 监控目标位置的位置。该位置只可以依赖于外部设定值生成器，其设定不是指轴运动到该位置。设定该位置激活目标位置监控，一旦到达该位置便使 In target position 标志为 TRUE。

PositionType : 位置类型。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : BOOL;
    Error: BOOL;
    ErrorID: UDINT;
    Enabled: BOOL;
END_VAR

Done : 如果命令成功执行，该变量置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

Enabled : 显示外部设定值生成器的当前状态，独立于功能的执行。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构。


MC_ExtSetPointGenDisable

MC_ExtSetPointGenDisable 功能块

MC_ExtSetPointGenDisable 功能块可以用于切断轴的外部设定值生成器。随后，轴不再从自身周期轮询轴接口（fExtSetPos, fExtSetVelo, fExtSetAcc 和 nExtSetDirection）接收设定值规范。

VAR_INPUT 输入变量

VAR_INPUT
    Execute : BOOL;
END_VAR

Execute : 命令在上升沿时执行。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done : BOOL;
    Error: BOOL;
    ErrorID: UDINT;
    Enabled: BOOL;
END_VAR

Done : 如果命令成功执行，该变量置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID : 在设置了错误输出时，提供错误编号。

Enabled : 显示外部设定值生成器的当前状态，独立于功能的执行。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    Axis : NCTOPLC_AXLESTRUCT;
END_VAR

Axis : 轴结构。

示例


MC_ExtSetPointGenFeed

MC_ExtSetPointGenFeed 功能块

利用 MC_ExtSetPointGenFeed 功能块，轴获取外部设定值生成器的设定值。该功能块将这些数据立即拷贝至轴的周期轮询轴接口（fExtSetPos, fExtSetVelo, fExtSetAcc und nExtSetDirection）。MC_ExtSetPointGenFeed 功能块结果未被使用因此总是 FALSE。

VAR_INPUT 输入变量

VAR_INPUT
    Position : LREAL;
    Velocity : LREAL;
    Acceleration : LREAL;
    Direction : DINT;
END_VAR

Position : 从外部设定值生成器设置位置。

Velocity : 从外部设定值生成器设置速度。

Acceleration : 从外部设定值生成器设置加速度。

Direction : 从外部设定值生成器设置方向。（ -1 表示反方向， 0 表示停止， 1 表示正方向）

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    AxisRefOut : PLCTONC_AXLESTRUCT;
END_VAR

Axis : 轴结构

Development Environment | Target System | PLC Libraries to include


MC_AbortTrigger

MC_AbortTrigger 功能块

MC_AbortTrigger 功能块用于中断 MC_TouchProbe 启动的测量探测循环。MC_TouchProbe 通过激活外部编码器硬件中的位置锁存器来启动测量探针循环。如果该过程在触发信号激活位置锁存器之前终止，MC_AbortTrigger 可以用于实现上述目的。如果测量探针循环已经成功完成，就没有必要调用该功能块。

VAR_INPUT 输入变量

VAR_INPUT
    Execute		: BOOL;	(* Starts touch probe recording *)
END_VAR

Execute : 上升沿时执行该命令，并且使外部位置锁存器处于非激活状态。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Done 		: BOOL;	(* move completed *)
    Busy 		: BOOL;	(* function block is currently busy *)
    Error 		: BOOL;	(* Signals that an error has occured within Function Block *)
    ErrorID 		: UDINT;	(* Error identification *)
END_VAR

Done : 一旦测量探测循环已经被成功中断，该变量置 TRUE。

Busy: 能块一旦激活，该变量置TRUE，当返回至初始状态时，该变量置 FALSE。

Error : 一旦产生错误，该变量就置 TRUE。

ErrorID : 如果设置了错误输出，该参数将提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    TriggerInput	: MC_InputRef; 		(* Reference to the trigger signal source. *)
    Axis		: NCTOPLC_AXLESTRUCT;	(* Identifies the axis which position should be recorded at a defined event at the trigger input *)
END_VAR

TriggerInput : MC_InputRef类型的数据结构，该类型描述记录轴位置的触发输入。这里必须使用与相应的 MC_TouchProbe 功能块相同的数据结构。

Axis : 轴结构。

Development environment | Target system type | PLC libraries to be linked
from TwinCAT v2.9 Build 1000 | PC (i386) | TcMC.Lib


MC_PowerStepper

MC_PowerStepper 功能块

MC_PowerStepper 功能块用于设置轴的启用。内部通过 MC_Power 块实现该目的。MC_PowerStepper 也检测步进电机的失速情况是否超负荷，并提供合适的对策。监控 KL2531 或 KL2541 终端的状态位，并将显示的错误发送至 NC。

附录中有更详细的说明。

VAR_INPUT 输入变量

VAR_INPUT
    Enable : 		BOOL;
    Enable_Positive : BOOL;
    Enable_Negative : BOOL;
    Override : 	LREAL;
    DestallParams :	ST_PowerStepperStruct;
    KL_Status :	USINT;
    KL_Status2 :	UINT;
END_VAR

Enable: 轴 NC 控制器启用。

Enable_Positive: 正向 NC 高级运动启用。

Enable_Negative: 反向 NC 高级运动启用。

Override: 超调值，以百分比表示（如 68.123%）。

DestallParams: 功能块函数此处被启用，并指定其操作规程。

KL_Status: KL2531 或 KL2541 类型终端的状态字节。

KL_Status2: KL2531 或 KL2541 类型终端的状态字。

VAR_OUTPUT 输出变量

VAR_OUTPUT
    Status: 		BOOL;
    Error: 		BOOL;
    ErrorID : 	UDINT;
END_VAR

Status: 如果所有启用都成功设置，该变量置 TRUE。

Error: 一旦产生错误，该变量就置 TRUE。

ErrorID: 如果设置了错误输出，该参数将提供错误编号。

VAR_IN_OUT 输入输出变量

VAR_IN_OUT
    AxisRefIn : 	NCTOPLC_AXLESTRUCT;
    AxisRefOut : 	PLCTONC_AXLESTRUCT;
EEND_VAR

AxisRefIn: 由 NC 提供的轴结构。

AxisRefOut: 由 PLC 提供的轴结构。

Development environment | Target system type | PLC libraries to be linked
TwinCAT v2.9, build 1026 onwards | PC (i386) | TcMC.Lib


F_GetVersionTcMC

F_GetVersionTcMC 函数

该函数返回库版本信息。

F_GetVersionTcMC 函数 : UINT

VAR_INPUT
    nVersionElement : INT;
END_VAR

nVersionElement : 版本参数

  • 1 : major number;
  • 2 : minor number;
  • 3 : revision number;
Development environment | Target system type | PLC libraries to include
TwinCAT v2.8.0 | PC (i386) | TcMC.Lib


MC_AxisPara

MC_AxisPara 类型

TYPE MC_AxisPara : (
(* PLCopen specific parameters *)
CommandedPosition := 1, (* lreal *)
SWLimitPos, (* lreal *)
SWLimitNeg, (* lreal *)
EnableLimitPos, (* bool *)
EnableLimitNeg, (* bool *)
EnablePosLagMonitoring, (* bool *)
MaxPositionLag, (* lreal *)
MaxVelocitySystem, (* lreal *)
MaxVelocityAppl, (* lreal *)
ActualVelocity, (* lreal *)
CommandedVelocity, (* lreal *)
MaxAccelerationSystem, (* lreal *)
MaxAccelerationAppl, (* lreal *)
MaxDecelerationSystem, (* lreal *)
MaxDecelerationAppl, (* lreal *)
MaxJerk, (* lreal *)

(* Beckhoff specific parameters *)
AxisId := 1000, (* lreal *)
AxisVeloManSlow, (* lreal *)
AxisVeloManFast, (* lreal *)
AxisVeloMax, (* lreal *)
AxisAcc, (* lreal *)
AxisDec, (* lreal *)
AxisJerk, (* lreal *)
AxisMaxVelocity, (* lreal *)
AxisRapidTraverseVelocity, (* lreal *)
AxisManualVelocityFast, (* lreal *)
AxisManualVelocitySlow, (* lreal *)
AxisCalibrationVelocityForward, (* lreal *)
AxisCalibrationVelocityBackward, (* lreal *)
AxisJogIncrementForward, (* lreal *)
AxisJogIncrementBackward, (* lreal *)
AxisEnMinSoftPosLimit, (* bool *)
AxisMinSoftPosLimit, (* lreal *)
AxisEnMaxSoftPosLimit, (* bool *)
AxisMaxSoftPosLimit, (* lreal *)
AxisEnPositionLagMonitoring, (* bool *)
AxisMaxPosLagValue, (* lreal *)
AxisMaxPosLagFilterTime, (* lreal *)
AxisEnPositionRangeMonitoring, (* bool *)
AxisPositionRangeWindow, (* lreal *)
AxisEnTargetPositionMonitoring, (* bool *)
AxisTargetPositionWindow, (* lreal *)
AxisTargetPositionMonitoringTime, (* lreal *)
AxisEnInTargetTimeout, (* bool *)
AxisInTargetTimeout, (* lreal *)
AxisEnMotionMonitoring, (* bool *)
AxisMotionMonitoringWindow, (* lreal *)
AxisMotionMonitoringTime, (* lreal *)
AxisDelayTimeVeloPosition, (* lreal *)
AxisEnLoopingDistance, (* bool *)
AxisLoopingDistance, (* lreal *)
AxisEnBacklashCompensation, (* bool *)
AxisBacklash, (* lreal *)
AxisEnDataPersistence, (* bool *)
AxisRefVeloOnRefOutput, (* lreal *)
AxisOverrideType, (* lreal *)
AxisEncoderScalingFactor, (* lreal *)
AxisEncoderOffset, (* lreal *)
AxisEncoderDirectionInverse, (* bool *)
AxisEncoderEncoderMask, (* dword *)
AxisEncoderModuloValue, (* lreal *)
AxisModuloToleranceWindow, (* lreal *)
AxisEnActPosCorrection, (* bool *)
AxisActPosCorrectionFilterTime, (* lreal *)
AxisUnitInterpretation, (* lreal - Bit 2 of this word is the modulo flag *)

(* Beckhoff specific axis status information - READ ONLY *)
AxisTargetPosition := 2000, (* lreal *)
AxisRemainingTimeToGo, (* lreal *)
AxisRemainingDistanceToGo (* lreal *)
);
END_TYPE

在该 enum 类型中，指定了功能块 MC_ReadParameter、MC_ReadBoolParameter、MC_WriteParameter 和 MC_WriteBoolParameter 的参数。如果数据类型不一致或者试图读取不存在的参数，则将生成错误。


MC_Direction

MC_Direction 类型

TYPE MC_Direction :
(
MC_Positive_Direction := 1,
MC_Shortest_Way ,
MC_Negative_Direction,
MC_Current_Direction
);
END_TYPE

在该 enum 类型中，指定功能块 MC_MoveVelocity 和 MC_MoveModulo 的方向。


MC_TouchProbe data structures

MC_TouchProbe 数据结构

MC_InputRef

TYPE MC_InputRef :
STRUCT
    EncoderID 	: UDINT; 		(* 1..255 *)
    TouchProbe 	: E_TouchProbe; 	(* Signal source *)
    Edge 		: E_SignalEdge; 	(* rising or falling signal edge *)
    PlcEvent 		: BOOL; 		(* PLC trigger signal input when TouchProbe signal source is set to 'PlcEvent' *)
    ProbeState 	: E_TouchProbeState; (* internal state of the touch probe sequence *)
    ModuloPositions 	: BOOL; 		(* interpretation of FirstPosition, LastPosition and RecordedPosition as modulo positions when TRUE *)
END_STRUCT
END_TYPE

EncoderID : 使用的驱动硬件的编码器 ID。编码器 ID 可以在 TwinCAT 系统管理器中读出。

TouchProbe : 在使用的编码器硬件中，定义触发测量探针函数的信号源。

Edge : 定义是触发信号的上升还是下降沿被评估。

PlcEvent : 如果信号源 TouchProbe 设置的类型为 PlcEvent，这些变量的上升沿触发当前轴位置的记录。PlcEvent 并非一个真正的锁存函数，而是依赖于周期时间的。

ProbeState : 测量探针函数的内部状态。该变量必须不被写入。

ModuloPositions : 如果变量 ModuloPositions 为 FALSE，那么认为轴的位置在 -∞ 到 +∞ 绝对线性范围内。MC_TouchProbe 功能块的 FirstPosition、LastPosition 和 RecordedPosition 位置也都变为绝对值。
如果变量 ModuloPositions 为 TRUE。那么认为所有位置都是在轴模数范围内的模数值（如 0..359.9999）。同时，这也意味着定义的触发窗口将重复循环。

E_TouchProbe

数据类型 E_TouchProbe 描述了用于测量探针函数的来自于信号源的信号。

TYPE E_TouchProbe :
(
    TouchProbe1 	:= 1,
    TouchProbe2,
    TouchProbe3,
    TouchProbe4,
    PlcEvent 		:= 10
);
END_TYPE

TouchProbe1..TouchProbe4 : 至编码器硬件的内部信号源（如驱动器 AX2000，KL5001）。根据硬件不同，多达四个触发信号可以评价，但目前只支持第一信号，即 TouchProbe1。

PlcEvent : PlcEvent 定义触发信号，即不使用编码器硬件接通，而是直接在 PLC 中生成，是一个标准 BOOL 变量。该 PLC 触发信号存储于变量 PlcEvent 的数据结构 MC_InputRef 中。它通向当前被记录时刻的轴位置。PlcEvent 并非一个真正的锁存函数，而是依赖于周期时间的。

E_SignalEdge

TYPE E_SignalEdge :
(
    RisingEdge,
    FallingEdge
);
END_TYPE

触发信号的上升沿或者下降沿。

E_TouchProbeState

TYPE E_TouchProbeState :
(
    TouchProbeInactive,
    TouchProbeActivated,
    TouchProbeAborted
);
END_TYPE

测量探针函数的内部状态。

Development environment | Target system type | PLC libraries to be linked
from TwinCAT v2.9 Build 1000 | PC (i386) | TcMC.Lib


E_ReadMode

E_ReadMode 类型

TYPE E_ReadMode :
(
ReadMode_Once := 1,
ReadMode_Cyclic
);
END_TYPE

在该 enum 类型中，指定功能块 MC_ReadParameter 和 MC_ReadBoolParameter 的读取模式。

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken


E_SuperpositionMode

E_SuperpositionMode 类型

TYPE E_SuperpositionMode :
(
SUPERPOSITIONMODE_VELOREDUCTION_ADDITIVEMOTION := 1,
SUPERPOSITIONMODE_VELOREDUCTION_LIMITEDMOTION,
SUPERPOSITIONMODE_LENGTHREDUCTION_ADDITIVEMOTION,
SUPERPOSITIONMODE_LENGTHREDUCTION_LIMITEDMOTION
);
END_TYPE

E_SuperpositionMode 结构体决定多重运动在功能块 MC_MoveSuperImposedExt 下如何被执行。

SUPERPOSITIONMODE_VELOREDUCTION_ADDITIVEMOTION: 多重运动发生超出整个 Length。指定的速度最大变化 VelocityDiff 被降低，以达到超过这个长度所要求的 Distance。该 Length 是基于无多重运动参考轴（如，主动轴）。受该补偿的影响，轴的运动路径为 Length + Distance。

SUPERPOSITIONMODE_VELOREDUCTION_LIMITEDMOTION: 多重运动发生超出整个 Length。指定的速度最大变化 VelocityDiff 被降低，以达到超过这个长度所要求的 Distance。该 Length 指受补偿影响的轴。在补偿期间，轴的运动路径为 Length。

SUPERPOSITIONMODE_LENGTHREDUCTION_ADDITIVEMOTION: 多重运动的距离是越短越好而速度是越高越好，尽管都没有超越速度的最大变化 VelocityDiff 或最大 Length。该 Length 是基于无多重运动参考轴（如，主动轴）。受补偿影响，轴的最大运动路径为 Length + Distance。

SUPERPOSITIONMODE_LENGTHREDUCTION_LIMITEDMOTION: 多重运动的距离是越短越好而速度是越高越好，尽管都没有超越速度的最大变化 VelocityDiff 或最大 Length。该 Length 指受补偿影响的轴。在补偿期间，轴的最大运动路径为 Length。

Development Environment | Target system | PLC Libraries to include
TwinCAT v2.9 | PC (i386) | TcMC.Lib


ST_PowerStepperStruct

ST_PowerStepperStruct 类型

TYPE ST_PowerStepperStruct :
STRUCT
DestallDetectMode : E_DestallDetectMode;
DestallMode : E_DestallMode;
DestallEnable : BOOL;
StatusMonEnable : BOOL;
END_STRUCT
END_TYPE

该结构体指定了 MC_PowerStepper 功能块的参数。

DestallDetectMode: 这里用代码值来说明失速情况是如何被检测的。
DestallMode: 这里用代码值来说明被检测的失速情况是如何被处理的。
DestallEnable: 该参数说明与上述规则一致的失速检测和处理是否处于活动状态。
StatusMonEnable: 该参数说明 I/O 终端状态位是否被监控和出现的错误是否被报告。

Development environment | Target system type | PLC libraries to be linked
TwinCAT v2.9, build 1026 onwards | PC (i386) | TcMC.Lib


E_DestallMode

E_DestallMode 类型

TYPE E_DestallMode :
(
PwStMode_None := 0,
PwStMode_SetError,
PwStMode_SetErrNonRef,
PwStMode_UseOverride
);
END_TYPE

该 enum 指定功能块 MC_PowerStepper 的工作方式。

PwStMode_None: 面对失速情况，什么也不做。
PwStMode_SetError: 如果发生失速情况，轴采用代码 16#4636 的错误状态。信息以纯文本格式存入日志中，如“MC_PowerStepper(AxId:=3) reporting error 0x4636 (stall error)!”，并且如果系统管理器正在运行的话，将在显示框显示该记录。
PwStMode_SetErrNonRef: 如果发生失速情况，轴将像在 PwStMode_SetError 设置下一样处于错误状态并产生纯文本消息。此外，轴被置于非参考状态。
PwStMode_UseOverride: 如果发生失速情况，通过设置超调为 0，轴的轮廓生成器尽可能快地停止。一旦位置控制器将轴带回当前设定位置，轮廓生成器的超调被设置为 1，然后执行余下的距离。

Development environment | Target system type | PLC libraries to be linked
TwinCAT v2.9, build 1026 onwards | PC (i386) | TcMC.Lib


E_DestallDetectMode

E_DestallDetectMode 类型

TYPE E_DestallDetectMode :
(
PwStDetectMode_None := 0,
PwStDetectMode_Encoderless,
PwStDetectMode_Lagging
);
END_TYPE

在该 enum 类型中，为功能块 MC_PowerStepper 指定失速检测的方法。

PwStDetectMode_None: 未执行失速检测。
PwStDetectMode_Encoderless: KL2531 或 KL2541 类型终端的状态字节 1 到 3 位用于评价失速检测。字节被当做 KL_Status 传送到 MC_PowerStepper 功能块。
PwStDetectMode_Lagging: 轴的跟踪误差用于评价失速检测。在来自于 NC 参数的跟踪误差极限和跟踪误差滤波时间的帮助下做决策。

Development environment | Target system type | PLC libraries to be linked
TwinCAT v2.9, build 1026 onwards | PC (i386) | TcMC.Lib