MC_CyclicSwitch

功能塊 MC_CyclicSwitch
使用軸位置來控制重複觸發數位輸出的開關。當軸達到特定的位置,開關即開啟或關閉,開關可受軸的向前與向後移動所控制。
VAR_IN_OUT
V AxisIn AXIS_REF 軸的參考。
V OutputIn MC_OUTPUT_REF 選擇對應軌道所控制的數位輸出。
V CyclicSwitchIn MC_CAMSWITCH_REF

控制開關動作。

  • TrackNumber:必須為零。
  • FirstOnPosition:必須為非負數,相對於每個循環起始位置的距離。
  • LastOnPosition:必須為正數,且較 FirstOnPosition 為大,每個循環起始位置的距離。
  • Duration:必須為正數。
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

定義軸值的來源,例如,位置:

  • mcCommandedValue, mcSetValue-同步設定值。建議使用此設定。
  • mcActualValue-同步實際值。此設定可能不穩定。
  • mcSecondEncoderValue-第二編碼器讀取的實際值。
VAR_OUTPUT
V Done BOOL 循環任務已完成。
V Busy BOOL 功能塊尚未完成且預期將有新的輸出值。
V Active BOOL 功能塊正在控制軸。
V CommandAborted BOOL 命令被另一個命令中止。
V Error BOOL 功能塊中出現錯誤的訊號。
V ErrorID MC_Error 錯誤識別。
  • MC_CAMSWITCH_REF 為供應商指定的結構,用於定義數位凸輪的開關。
  • MC_OUTPUT_REF 為供應商指定的結構,連接至(實體)輸出。
  • MC_CAMSWITCH_REF 結構中,當 CamSwitchMode 定位時,不支援以下組合:
    • IntervalType:mcTime, DurationType:mcDistance。
    • IntervalType:mcTime, DurationType:mcCount。

 

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