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
);