MC_CyclicSwitch
| 功能块 | MC_CyclicSwitch | ||
|---|---|---|---|
| 使用轴位置来控制重复触发数位输出的开关。当轴达到特定的位置,开关即开启或关闭,开关可受轴的向前与向后移动所控制。 | |||
| VAR_IN_OUT | |||
| V | AxisIn | AXIS_REF | 轴的参考。 |
| V | OutputIn | MC_OUTPUT_REF | 选择对应轨道所控制的数位输出。 |
| V | CyclicSwitchIn | MC_CAMSWITCH_REF |
控制开关动作。
|
| VAR_INPUT | |||
| V | Enable | BOOL |
启动循环轨道。 |
| V | StartPosition | LREAL | 开关开启的位置。 |
| V | IntervalType | MC_LengthType | Interval 类型。可使用 mcDistance 与 mcTime。 |
| V | Interval | LREAL | 周期长度。依照所选的 IntervalType 而定,须为正值。 |
| V | DurationType | MC_LengthType | Duration 之类型。可使用 mcDistance 与 mcCount。 |
| V | Duration | LREAL |
周期重复的持续时间,依照所选的 DurationType 而定,须为正值。 |
| V | ValueSource | MC_Source |
定义轴值的来源,例如,位置:
|
| VAR_OUTPUT | |||
| V | Done | BOOL | 循环任务已完成。 |
| V | Busy | BOOL | 功能块尚未完成且预期将有新的输出值。 |
| V | Active | BOOL | 功能块正在控制轴。 |
| V | CommandAborted | BOOL | 命令被另一个命令中止。 |
| V | Error | BOOL | 功能块中出现错误的讯号。 |
| V | ErrorID | MC_Error | 错误识别。 |
|
|||
| MC_CyclicSwitch | ||||||
|---|---|---|---|---|---|---|
| AXIS_REF | AxisIn | Axis | AXIS_REF | |||
| MC_OUTPUT_REF | OutputIn | Output | MC_OUTPUT_REF | |||
| MC_CAMSWITCH_REF | CyclicSwitchIn | CyclicSwitch | MC_CAMSWITCH_REF | |||
| BOOL | Enable | Done | BOOL | |||
| LREAL | StartPosition | Busy | BOOL | |||
| MC_LengthType | IntervalType | Active | BOOL | |||
| LREAL | Interval | CommandAborted | BOOL | |||
| MC_LengthType | DurationType | Error | BOOL | |||
| LREAL | Duration | ErrorID | MC_Error | |||
| MC_Source | ValueSource | |||||
使用案例:
以下案例虽属于 RT/Win32 介面,但其有助于理解周期开关的运作方式。
案例 1
循环开关在持续时间内完成其任务。
McOutput outputBit = {
FALSE, //Axis or IO module. FALSE = I/O.
0, //Index
0 //Offset
}
McCamSwitch cyclicSwitch = {
0, //TrackNumber
40, //FirstOnPosition
60, //LastOnPosition
1, //AxisDirection. 1 = Positive.
0, //CamSwitchMode. 0 = Position.
0 //Duration. It is not used in this case.
);
Command = SetAxisCyclicSwitch(
TargetAxis, //Index
outputBit, //Output
100, //StartPosition
cyclicSwitch, //CyclicSwitch
mcDistance, //IntervalType
100, //Interval
mcDistance, //DurationType
250, //Duration
mcSetValue //ValueSource
);
案例 2
循环开关在完成任务之前中止。
McOutput outputBit = {
FALSE, //Axis or IO module. FALSE = I/O.
0, //Index
0 //Offset
}
McCamSwitch cyclicSwitch = {
0, //TrackNumber
0, //FirstOnPosition
0, //LastOnPosition
1, //AxisDirection. 1 = Positive.
1, //CamSwitchMode. 1 = Time.
0.003 //Duration
);
Command = SetAxisCyclicSwitch(
TargetAxis, //Index
outputBit, //Output
100, //StartPosition
cyclicSwitch, //CyclicSwitch
mcTime, //IntervalType
0.005, //Interval
mcCount, //DurationType
3, //Duration
mcSetValue //ValueSource
);