'!TITLE "CONTEC Motion"

Dim Ctrl As Object
Dim ExtAxis(7) As Object
Dim VarIniPls(7) As Object
Dim VarIniCnt(7) As Object
Dim VarIniDio(7) As Object
Dim VasIniEnc(7) As Object
Dim VarIniOrg(7) As Object
Dim VarIniExt(7) As Object
Dim VarSigDo(7) As Object
Dim VarSigDi(7) As Object
Dim VarCntPls(7) As Object
Dim VarCntEnc(7) As Object
Dim VarCntEnZ(7) As Object
Dim VarStsPls(7) As Object
Dim VarStsMov(7) As Object
Dim VarStsStp(7) As Object
Dim VarStsLmt(7) As Object
Dim VarStsSpd(7) As Object
Dim VarMvReSpd(7) As Object
Dim VarMvStSpd(7) As Object
Dim VarMvTgSpd(7) As Object
Dim VarMvAccTm(7) As Object
Dim VarMvDecTm(7) As Object

'-------------------------------------------------------------------------------------------------
'	Motion main
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Provider name. Fixed value ="CaoProv.CONTEC.SMC"
'	Argument 3		Provider execution machine name
'	Argument 4		Provider execution machine name
'========================================================================
'-------------------------------------------------------------------------------------------------
'-------------------------------------------------------------------------------------------------
Sub Main(strCtrlName As String, strProvName As String, strPcName As String, strOption As String)
	
	Ctrl = Cao.AddController(strCtrlName, "CaoProv.CONTEC.SMC", strPcName, strOption)
	
End Sub



'-------------------------------------------------------------------------------------------------
'	Pulse output related parameter settings
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 3		Sets pulse output mode
'					0: Common pulse method OUT: Negative logic, DIR+: High, DIR-: Low
'					1: Common pulse method OUT: Positive logic, DIR+: High, DIR-: Low
'					2: Common pulse method OUT: Negative logic, DIR+: Low, DIR-: High
'					3: Common pulse method OUT: Positive logic, DIR+: Low, DIR-: High
'					4: 2 pulse method: Negative logic (default)
'					5: 2 pulse method: Positive logic
'					6: 90 degree phase difference mode OUT: Advance signal. DIR: Delay signal
'					7: 90 degree phase difference mode OUT: Delay signal. DIR: Advance signal
'	Argument 4		Wait insertion when changing direction (Note: Only valid for common pulse method)
'					0:OFF
'					1:ON (default)
'	Argument 5		Sets duty ratio
'					0: Changes based on pulse output speed
'					1: Duty ratio fixed at 50%
'						* Default: DL Series "1", DF Series "0"
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcSetIniPis(strCtrlName As String, intAxis As Integer, intPulseModeb As Integer, intDirTimer As Integer, intDuty As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarIniPls(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@INI_PLS")
	
	VarIniPls(intAxis - 1).Value = Array(intPulseModeb, intDirTimer, intDuty)
	
End Sub


'-------------------------------------------------------------------------------------------------
'	Counter movement related parameter settings
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 3		Sets counter type cleared when LTC signal changes from OFF to ON
'					0: Doesn't clear counter (default)
'					1: Clears output pulse counter
'					2: Clears encoder counter
'					3: Clears output pulse counter and encoder counter
'	Argument 4		Sets counter type latched when inputting LTC signal
'					0: Doesn't use latch function (default)
'					1: Latches output pulse counter
'					2: Latches encoder counter
'					3: Latches output pulse counter and encoder counter
'	Argument 5		Sets counter type cleared when CLR signal changes from OFF to ON
'					0: Doesn't clear counter (default)
'					1: Clears output pulse counter
'					2: Clears encoder counter
'					3: Clears output pulse counter and encoder counter
'
'				Note: When [Optional elements] or "-1"specified, default value
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcSetIniCnt(strCtrlName As String, intAxis As Integer, intClearCntLtc As Integer, intLtcMode As Integer, intClearCntClr As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarIniCnt(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@INI_CNT")
	
	VarIniCnt(intAxis - 1).Value = Array(intClearCntLtc, intLtcMode, intClearCntClr)
	
End Sub


'-------------------------------------------------------------------------------------------------
'	Control I/O parameter settings
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 3		Sets control I/O signal logic
'					[ 0 | 0 | 0 | 0 | 0 | OUT3 | OUT2 | OUT1| LIM | IN7 | IN6 | IN5 | IN4 | IN3 | IN2 | IN1 ] Setting range: 0-7FF (Hex)
'					Each bit setting: 0 Negative logic, 1 Positive logic
'					Default: 0 (all negative logic)
'	Argument 4		Sets the control input signal format (general purpose input/ALM, INP, SD, LTC, PCS, CLR)
'					[ 0 | 0 | IN6/CLR | IN5/PCS | IN4/LTC | IN3/SD | IN2/INP | IN1/ALM ] Setting range: 0-3F (Hex)
'					Default: 1 (Uses IN1 as alarm (ALM) signal input)
'	Argument 5		Not used
'	Argument 6		Not used	
'	Argument 7		Sets control output OUT1-3 signal format
'					0: General purpose output (default)
'					1: Alarm clear signal
'					2: Deviation counter clear signal (ERC)
'					3: Output pulse counter count match signal (CP1)
'					4: Encoder counter count match signal (CP2)
'					5: Hold off signal
'
'				When [Optional elements] or "-1" specified, default value
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcSetIniDio(strCtrlName As String, intAxis As Integer, intIoLog As Integer, intInType As Integer, intOut1 As Integer, intOut2 As Integer, intOut3 As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarIniDio(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@INI_DIO")
	
	intOut1 = 0
	intOut2 = 0
	
	VarIniDio(intAxis - 1).Value = Array(intIoLog, intInType, intOut1, intOut2, intOut3)
	
End Sub

'-------------------------------------------------------------------------------------------------
'	Encoder settings
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 3		Sets encoder input format
'					0: A/B multiplied by 1 (default)
'					1: A/B multiplied by 2
'					2: A/B multiplied by 4
'					3: U/D
'					4: Not used
'	Argument 4		Sets deviation counter clear signal width
'					0: 12  [usec] (default)
'					1: 102 [usec]
'					2: 408 [usec]
'					3: 1.6 [msec]
'					4: 13  [msec]
'					5: 52  [msec]
'					6: 104 [msec]
'					7: Level output
'	Argument 5		Sets deviation counter clear signal OFF timer time
'					0: 0  [usec] (default)
'					1: 12  [usec]
'					2: 1.6 [msec]
'					3: 104 [msec]
'	Argument 6		Sets alarm clear signal width
'					0: 12  [usec] (default)
'					1: 102 [usec]
'					2: 408 [usec]
'					3: 1.6 [msec]
'					4: 13  [msec]
'					5: 52  [msec]
'					6: 104 [msec]
'	Argument 7		Sets ERC signal auto output
'					[ 0 | 0 | 0 | 0 | 0 | 0 | bit1 | bit0 ] Setting range: 0-3 (Hex)
'					bit0
'					   0: Does not output ERC signal when stopped with LIM, ALM signal input
'					   1: Automatically outputs ERC signal when stopped with LIM, ALM signal input
'					bit1
'					   0: Does not output ERC signal when origin return operation complete
'					   1: Automatically outputs ERC signal when origin return operation complete
'					Default: 0
'
'				Note: When [Optional elements] or "-1" specified, default value
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcSetIniEnc(strCtrlName As String, intAxis As Integer, intEncType As Integer, intErcTime As Integer, intErcOffTimer As Integer, intAlmTime As Integer, intErcMode As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VasIniEnc(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@INI_ENC")
	
	VasIniEnc(intAxis - 1).Value = Array(intEncType, intErcTime, intErcOffTimer, intAlmTime, intErcMode)
	
End Sub


'-------------------------------------------------------------------------------------------------
'	Origin setting
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 3		Sets origin input logic and edge
'					0: Trailing edge, negative logic (default)
'					1: Trailing edge, positive logic
'					2: Leading edge, negative logic
'					3: Leading edge, positive logic
'	Argument 4		Sets whether to reverse limit during origin return operation
'					0: Does not reverse limit
'					1: Reverses limit (default)
'	Argument 5		Sets whether Z-phase used
'					0: Not used (ORG only) (default)
'					1: Used (ORG + Z-phase) 
'					Note: When "0" set, the Z-phase quantity setting for origin return is invalid
'	Argument 6		Origin rush direction for origin return (origin return complete direction)
'					0: Not specified (default)
'					1: Clockwise (CW)
'					2: Counterclockwise (CCW)
'	Argument 7		Sets Z-phase quantity for origin return
'					Setting range: 1-16
'					Default: 1
'					Note: Setting invalid when "0" set
'					Automatically changed to "0" [Not used] when using Z-phase
'
'				Note: When [Optional elements] or "-1" specified, default value
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcSetIniOrg(strCtrlName As String, intAxis As Integer, intOrgLog As Integer, intLimitTurn As Integer, intOrgType As Integer, intEndDir As Integer, intZCount As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarIniOrg(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@INI_ENC")
	
	VarIniOrg(intAxis - 1).Value = Array(intOrgLog, intLimitTurn, intOrgType, intEndDir, intZCount)
	
End Sub


'-------------------------------------------------------------------------------------------------
'	Speed resolution settings
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 3		Speed resolution setting
'				Unit: PPS
'					SMC-4/8DL Series: -1, 0.2929687-600
'					SMC-4/8DF Series: -1, 0.073242187-100
'					Default (1)
'
'				Note: When [Optional elements] or "-1" specified, default value
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcSetReSpd(strCtrlName As String, intAxis As Integer, intResolveSpeed As Double)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarMvReSpd(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@MV_RESPD")
	
	VarMvReSpd(intAxis - 1).Value = intResolveSpeed
	
End Sub


'-------------------------------------------------------------------------------------------------
'	Parameter settings for other initial settings
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 3		Sets whether to use S-shape acceleration/deceleration
'				Unit: PPS
'					0: Not used (default)
'					1: Used
'	Argument 4		Sets movement for SD signal input
'					0: Deceleration stop (default)
'					1: Deceleration only (Moves with constant speed at starting speed)
'					2: Deceleration stop + SD signal latch
'					3: Deceleration + SD signal latch
'	Argument 5		Sets input filter characteristics
'					0: Does not insert filter (default)
'					1:3.2[usec]
'					2:25[usec]
'					3:200[usec]
'					4:1.6[msec]
'
'				Note: When [Optional elements] or "-1" specified, default value
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcSetIniExt(strCtrlName As String, intAxis As Integer, intSAccelType As Integer, intSdMode As Integer, intFilterType As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarIniExt(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@INI_EXT")
	
	VarIniExt(intAxis - 1).Value = Array(intSAccelType, intSdMode, intFilterType)
	
End Sub


'-------------------------------------------------------------------------------------------------
'	Servo ON
'		<Uses general purpose output (Out1) as "Servo ON" output>
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcSrv_On(strCtrlName As String, intAxis As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDo(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DO")
	
	VarSigDo(intAxis - 1).Value = Array(1, 0)
	
End Sub

'-------------------------------------------------------------------------------------------------
'	Servo OFF
'		<Uses general purpose output (Out1) as "Servo ON" output>
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcSrv_Off(strCtrlName As String, intAxis As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDo(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DO")
	
	VarSigDo(intAxis - 1).Value = Array(0, 0)
	
End Sub


'-------------------------------------------------------------------------------------------------
'	General purpose output
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 3		Port No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcComOut(strCtrlName As String, intAxis As Integer, intOutPut As Integer)
	Dim BitCheck As Integer
	
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDo(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DO")
	
	BitCheck = VarSigDo(intAxis - 1).Value And 2 ^ (intOutPut - 1)
	
	If BitCheck = 0 Then
		VarSigDo(intAxis - 1).Value = Array(2 ^ (intOutPut - 1), 2 ^ (intOutPut - 1))
	ElseIf BitCheck = 2 ^ (intOutPut - 1) Then
		VarSigDo(intAxis - 1).Value = Array(0, 2 ^ (intOutPut - 1))
	End If
	
End Sub


'-------------------------------------------------------------------------------------------------
'	General purpose output port check
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 3		Port No.
'
'	Return value
'					0:OFF
'					1:ON
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcOutBitCheck(strCtrlName As String, intAxis As Integer, PotNum As Integer) As Integer
	Dim BitCheck As Integer
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDo(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DO")
	
	BitCheck = VarSigDo(intAxis - 1).Value And 2 ^ (PotNum - 1)
	
	If BitCheck = 0 Then
		smcOutBitCheck = 0
	ElseIf BitCheck = 2 ^ (PotNum - 1) Then
		smcOutBitCheck = 1
	End IF
	
End Function


'-------------------------------------------------------------------------------------------------
'	General purpose output Out1 = ON
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcOut1_On(strCtrlName As String, intAxis As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDo(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DO")
	
	VarSigDo(intAxis - 1).Value = Array(2 ^ 0, 2 ^ 0)
	
End Sub


'-------------------------------------------------------------------------------------------------
'	General purpose output Out1 = OFF
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcOut1_Off(strCtrlName As String, intAxis As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDo(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DO")
	
	VarSigDo(intAxis - 1).Value = Array(0, 2 ^ 0)
	
End Sub


'-------------------------------------------------------------------------------------------------
'	General purpose output Out2 = ON
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcOut2_On(strCtrlName As String, intAxis As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDo(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DO")
	
	VarSigDo(intAxis - 1).Value = Array(2 ^ 1, 2 ^ 1)
	
End Sub


'-------------------------------------------------------------------------------------------------
'	General purpose output Out2 = OFF
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcOut2_Off(strCtrlName As String, intAxis As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDo(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DO")
	
	VarSigDo(intAxis - 1).Value = Array(0, 2 ^ 1)
	
End Sub


'-------------------------------------------------------------------------------------------------
'	General purpose output Out3 = ON
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcOut3_On(strCtrlName As String, intAxis As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDo(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DO")
	
	VarSigDo(intAxis - 1).Value = Array(2 ^ 2, 2 ^ 2)
	
End Sub


'-------------------------------------------------------------------------------------------------
'	General purpose output Out3 = OFF
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcOut3_Off(strCtrlName As String, intAxis As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDo(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DO")
	
	VarSigDo(intAxis - 1).Value = Array(0, 2 ^ 2)
	
End Sub


'-------------------------------------------------------------------------------------------------
'	General purpose input In1
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcIn1(strCtrlName As String, intAxis As Integer) As Integer
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDi(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DI")
	
	If (VarSigDi(intAxis - 1).Value And 2 ^ 0) = 0 Then
		smcIn1 = 0
	ElseIf (VarSigDi(intAxis - 1).Value And 2 ^ 0) = 2 ^ 0 Then
		smcIn1 = 1
	End If
	
End Function


'-------------------------------------------------------------------------------------------------
'	General purpose input In2
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcIn2(strCtrlName As String, intAxis As Integer) As Integer
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDi(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DI")
	
	If (VarSigDi(intAxis - 1).Value And 2 ^ 1) = 0 Then
		smcIn2 = 0
	ElseIf (VarSigDi(intAxis - 1).Value And 2 ^ 1) = 2 ^ 1 Then
		smcIn2 = 1
	End If
	
End Function


'-------------------------------------------------------------------------------------------------
'	General purpose input In3
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcIn3(strCtrlName As String, intAxis As Integer) As Integer
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDi(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DI")
	
	If (VarSigDi(intAxis - 1).Value And 2 ^ 2) = 0 Then
		smcIn3 = 0
	ElseIf (VarSigDi(intAxis - 1).Value And 2 ^ 2) = 2 ^ 2 Then
		smcIn3 = 1
	End If
	
End Function


'-------------------------------------------------------------------------------------------------
'	General purpose input In4
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcIn4(strCtrlName As String, intAxis As Integer) As Integer
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDi(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DI")
	
	If (VarSigDi(intAxis - 1).Value And 2 ^ 3) = 0 Then
		smcIn4 = 0
	ElseIf (VarSigDi(intAxis - 1).Value And 2 ^ 3) = 2 ^ 3 Then
		smcIn4 = 1
	End If
	
End Function


'-------------------------------------------------------------------------------------------------
'	General purpose input In5
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcIn5(strCtrlName As String, intAxis As Integer) As Integer
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDi(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DI")
	
	If (VarSigDi(intAxis - 1).Value And 2 ^ 4) = 0 Then
		smcIn5 = 0
	ElseIf (VarSigDi(intAxis - 1).Value And 2 ^ 4) = 2 ^ 4 Then
		smcIn5 = 1
	End If
	
End Function


'-------------------------------------------------------------------------------------------------
'	General purpose input In6
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcIn6(strCtrlName As String, intAxis As Integer) As Integer
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDi(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DI")
	
	If (VarSigDi(intAxis - 1).Value And 2 ^ 5) = 0 Then
		smcIn6 = 0
	ElseIf (VarSigDi(intAxis - 1).Value And 2 ^ 5) = 2 ^ 5 Then
		smcIn6 = 1
	End If
	
End Function


'-------------------------------------------------------------------------------------------------
'	General purpose input In7
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcIn7(strCtrlName As String, intAxis As Integer) As Integer
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarSigDi(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@SIG_DI")
	
	If (VarSigDi(intAxis - 1).Value And 2 ^ 6) = 0 Then
		smcIn7 = 0
	ElseIf (VarSigDi(intAxis - 1).Value And 2 ^ 6) = 2 ^ 6 Then
		smcIn7 = 1
	End If
	
End Function


'-------------------------------------------------------------------------------------------------
'	Feedback output pulse setting
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 3		Pulse count
'					Permissible setting range: -134,217,728 to +134,217,727
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcSetCntPls(strCtrlName As String, intAxis As Integer, dblPulse As Double)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarCntPls(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@CNT_PLS")
	
	VarCntPls(intAxis - 1).Value = dblPulse
	
End Sub


'-------------------------------------------------------------------------------------------------
'	Feedback output pulse acquisition
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcGetCntPls(strCtrlName As String, intAxis As Integer) As Double
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarCntPls(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@CNT_PLS")
	
	smcGetCntPls = VarCntPls(intAxis - 1).Value
	
End Function


'-------------------------------------------------------------------------------------------------
'	Encoder count value setting
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 3		Encoder count
'					Permissible setting range: -134,217,728 to +134,217,727
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcSetCntEnc(strCtrlName As String, intAxis As Integer, dblEnc As Double)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarCntEnc(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@CNT_ENC")
	
	VarCntENC(intAxis - 1).Value = dblEnc
	
End Sub


'-------------------------------------------------------------------------------------------------
'	Encoder count value acquisition
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcGetCntEnc(strCtrlName As String, intAxis As Integer) As Double
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarCntEnc(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@CNT_ENC")
	
	smcGetCntEnc = VarCntEnc(intAxis - 1).Value
	
End Function


'-------------------------------------------------------------------------------------------------
'	Acquires Z-phase quantity when performing Z-phase count operation associated with origin return, 
'	or Z-phase quantity when performing Z-phase count operation
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcGetCntEnz(strCtrlName As String, intAxis As Integer) As Integer
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarCntEnz(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@CNT_ENZ")
	
	smcGetCntEnz = VarCntEnz(intAxis - 1).Value
	
End Function


'-------------------------------------------------------------------------------------------------
'	Acquires motor operating status
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'
'	Return value
'					0: Stopped
'					1: Performing PTP movement
'					2: Performing JOG movement
'					3: Performing origin return
'					4: Performing bank movement (single)
'					5: Performing bank movement (loop)					
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcGetStsMov(strCtrlName As String, intAxis As Integer) As Integer
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarStsMov(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@STS_MOV")
	
	smcGetStsMov = VarStsMov(intAxis - 1).Value
	
End Function


'-------------------------------------------------------------------------------------------------
'	Motor stop cause acquisition
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'
'	Return value
'					0: Operating
'					1: Stop command
'					2: Deceleration stop command
'					3: Other axis stop
'					4: Alarm/emergency stop signal
'					5: CW limit stop signal
'					6: CCW limit stop signal
'					7: Deceleration stop signal
'					255: Operation function completion					
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcGetStsStp(strCtrlName As String, intAxis As Integer) As Integer
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarStsStp(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@STS_STP")
	
	smcGetStsStp = VarStsStp(intAxis - 1).Value
	
End Function


'-------------------------------------------------------------------------------------------------
'	Pulse output status acquisition
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'
'	Return value
'					0: Operating
'					1: Stop command
'					2: Deceleration stop command
'					3: Other axis stop
'					4: Alarm/emergency stop signal
'					5: CW limit stop signal
'					6: CCW limit stop signal
'					7: Deceleration stop signal
'					255: Operation function completion					
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcGetStsPls(strCtrlName As String, intAxis As Integer) As Integer
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarStsPls(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@STS_PLS")
	
	smcGetStsPls = VarStsPls(intAxis - 1).Value
	
End Function



'-------------------------------------------------------------------------------------------------
'	Limit status acquisition
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'
'	Return value
'				bit7 [ 0 | 0 | 0 | SD | ORG | -LIM | +LIM | ALM ] bit0
'				ALM alarm/emergency
'				+LIM CW limit
'				-LIM CCW limit
'				ORG Origin limit
'				SD Deceleration stop limit
'				Setting
'					0 Invalid
'					1 Valid
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcGetStsLmt(strCtrlName As String, intAxis As Integer) As Integer
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarStsLmt(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@STS_LMT")
	
	smcGetStsLmt = VarStsLmt(intAxis - 1).Value
	
End Function





'-------------------------------------------------------------------------------------------------
'	Pulse output speed during movement acquisition
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcGetStsSpd(strCtrlName As String, intAxis As Integer) As Double
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarStsSpd(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@STS_SPD")
	
	smcGetStsSpd = VarStsSpd(intAxis - 1).Value
	
End Function


'-------------------------------------------------------------------------------------------------
'	Start speed setting
'========================================================================
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 2		Pulse output start speed (Default = 100)
'					SMC-4/8DL Series: 0.2929687-9829800
'					SMC-4/8DF Series: 0.073242187-6553500
'					Sample created with "SMC-4/8DF Series"
'					Note: Default value when "-1" specified
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcSetMvStSpd(strCtrlName As String, intAxis As Integer, intSpeed As Double)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarMvStSpd(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@MV_STSPD")
	
	VarMvStSpd(intAxis - 1).Value = intSpeed
	
End Sub

'-------------------------------------------------------------------------------------------------
'	Start speed acquisition
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcGetMvStSpd(strCtrlName As String, intAxis As Integer) As Double
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarMvStSpd(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@MV_STSPD")
	
	smcGetMvStSpd = VarMvStSpd(intAxis - 1).Value
	
End Function

'-------------------------------------------------------------------------------------------------
'	Target speed setting
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 3		Pulse output start speed (Default = 100)
'					SMC-4/8DL Series: 0.2929687-9829800
'					SMC-4/8DF Series: 0.073242187-6553500
'					Sample created with "SMC-4/8DF Series"
'					Note: Default value when "-1" specified
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcSetMvTgSpd(strCtrlName As String, intAxis As Integer, intSpeed As Double)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarMvTgSpd(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@MV_TGSPD")
	
	VarMvTgSpd(intAxis - 1).Value = intSpeed
	
End Sub

'-------------------------------------------------------------------------------------------------
'	Target speed acquisition
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcGetMvTgSpd(strCtrlName As String, intAxis As Integer) As Double
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarMvTgSpd(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@MV_TGSPD")
	
	smcGetMvTgSpd = VarMvTgSpd(intAxis - 1).Value
	
End Function

'-------------------------------------------------------------------------------------------------
'	Acceleration time setting
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcSetMvAccTm(strCtrlName As String, intAxis As Integer, intAccel As Double)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarMvAccTm(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@MV_ACCTM")
	
	VarMvAccTm(intAxis - 1).Value = intAccel
	
End Sub

'-------------------------------------------------------------------------------------------------
'	Acceleration time acquisition
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcGetMvAccTm(strCtrlName As String, intAxis As Integer) As Double
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarMvAccTm(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@MV_ACCTM")
	
	smcGetMvAccTm = VarMvAccTm(intAxis - 1).Value
End Function

'-------------------------------------------------------------------------------------------------
'	Deceleration time setting
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcSetMvDecTm(strCtrlName As String, intAxis As Integer, intDecel As Double)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarMvDecTm(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@MV_DECTM")
	
	VarMvDecTm(intAxis - 1).Value = intDecel
	
End Sub

'-------------------------------------------------------------------------------------------------
'	Deceleration time acquisition
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Function smcGetMvDecTm(strCtrlName As String, intAxis As Integer) As Double
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	Set VarMvDecTm(intAxis - 1) = ExtAxis(intAxis - 1).AddVariable("@MV_DECTM")
	
	smcGetMvDecTm = VarMvDecTm(intAxis - 1).Value
	
End Function

'-------------------------------------------------------------------------------------------------
'	Stop
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcMvStop(strCtrlName As String, intAxis As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	
	ExtAxis(intAxis - 1).Execute "STOP"
	
End Sub

'-------------------------------------------------------------------------------------------------
'	Deceleration stop
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcMvDStop(strCtrlName As String, intAxis As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	
	ExtAxis(intAxis - 1).Execute "DSTP"
	
	
End Sub

'-------------------------------------------------------------------------------------------------
'	Origin return
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 3		Sets origin input logic and edge
'					0:CW
'					1:CCW
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcOrg(strCtrlName As String, intAxis As Integer, intEndDir As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	
	ExtAxis(intAxis - 1).Execute "ORG", intEndDir
	
End Sub

'-------------------------------------------------------------------------------------------------
'	JOG movement
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 3		Sets origin input logic and edge
'					0:CW
'					1:CCW
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcJog(strCtrlName As String, intAxis As Integer, intEndDir As Integer)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	
	ExtAxis(intAxis - 1).Execute "MOVJ", intEndDir
	
End Sub

'-------------------------------------------------------------------------------------------------
'	Specified position movement
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 3		Sets position coordinate type
'					0: Absolute movement
'					1: Relative movement
'	Argument 4		Sets stop position
'					Permissible setting range
'					Absolute coordinates: -134,217,728 to +134,217,728
'					Relative coordinates -134,217,728 to +134,217,728 (other than 0)
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcMvPtoP(strCtrlName As String, intAxis As Integer, intCoodinate As Integer, dblStopPosition As Double)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	
	ExtAxis(intAxis - 1).Execute "MOVP", Array(intCoodinate, dblStopPosition)
	
End Sub

'-------------------------------------------------------------------------------------------------
'	Speed change during movement, stop position change
'========================================================================
'	Argument 1		Controller name
'	Argument 2		Axis No.
'	Argument 3		Sets motor movement change type
'					0: Changes to starting speed (FL speed) instantaneously
'					1: Changes to target speed (FH speed) instantaneously
'					2: Decelerates and changes to starting speed (FL speed)
'					3: Accelerates and changes to target speed (FH speed)
'					4: Changes movement speed and acceleration speed
'					5: Motor stop position change
'					6: Motor stop with PCS signal position change setting
'	Argument 4		Sets position coordinate type (Required only when argument 1 is 5)
'					0: Absolute movement
'					1: Relative movement
'	Argument 5		Sets stop position (Required only when argument 1 is 5)
'					Permissible setting range
'					Absolute coordinates: -134,217,728 to +134,217,728
'					Relative coordinates: -134,217,728 to +134,217,728 (other than 0)
'========================================================================
'-------------------------------------------------------------------------------------------------
Sub smcMvChange(strCtrlName As String, intAxis As Integer, intChangeType As Integer, intCoodinate As Integer, dblStopPosition As Double)
	Set Ctrl = Cao.Controllers(strCtrlName)
	Set ExtAxis(intAxis - 1) = Ctrl.AddExtension("Axis" & intAxis)
	
	ExtAxis(intAxis - 1).Execute "MCHG", Array(intChangeType, intCoodinate, dblStopPosition)
	
End Sub
