Difference between revisions of "Program Examples:Single Axis Blending"

From SoftMC-Wiki
Jump to: navigation, search
(Created page with "{{Languages|Program_Examples:Group_Blending}} here is an example of using blended motion. we have a simulated XY table that moves in a rectangle contour. the motion is done w...")
 
(added)
Line 1: Line 1:
 
{{Languages|Program_Examples:Group_Blending}}  
 
{{Languages|Program_Examples:Group_Blending}}  
−
here is an example of using blended motion. we have a simulated XY table that moves in a rectangle contour. the motion is done with different blendingFactor: 0 / 1 / 2
+
here is an example of using blended motion for a single axis. the motion is done with different blendingFactor: 0 / 1 / 2
−
 
 
−
config.prg:
 
−
<syntaxhighlight lang="vb">
 
−
'------------------------------------------------------------------------------
 
−
' File:        CONFIG.PRG
 
−
' Purpose:    simulated XY configuration file
 
−
' Version:    1.00
 
−
' Author:      Eran Korkidi
 
−
' Description:
 
−
'------------------------------------------------------------------------------
 
−
 
 
−
 
 
−
Sys.NumberAxes = 14
 
−
common shared XYtable as group Axnm=a1 Axnm=a2 Model=1 'of xy
 
−
common shared xSimulatedSystem as long = 1
 
−
common shared xRealSystem as long = 0
 
−
common shared xActualSystem as long = 0 ' 1 = simulated  ,  0 = real
 
−
common shared dVelocityLimit as double
 
−
common shared dDrivePeMax as double
 
−
common shared dSec2msec as double = 1000
 
−
 
−
common shared num_Of_Motion_Drives as long =0
 
−
 
 
−
program
 
−
 
 
−
Load ETHERCAT.LIB
 
−
Load EC_USER.LIB
 
−
Load EC_CDHD.LIB
 
−
Load ECX_DIO8.LIB
 
−
Load EC_AI8ME.LIB
 
−
Load CPX_FB38.LIB
 
−
Load EC_HCNC.LIB
 
−
Load EK1100.LIB
 
−
Load TP_PARAM.LIB
 
−
Load TP_SIM.LIB
 
−
Load TP.LIB
 
−
 
 
−
A7.AxisName = CONV
 
−
 
 
−
sys.DoubleFormat = 1
 
−
sys.NoMotion = 1
 
−
Sys.Name = "Train_2_XY"
 
−
Print "MC is running: " Sys.Name
 
−
 
 
−
end program
 
−
 
 
−
</syntaxhighlight>
 
  
 
&nbsp;
 
&nbsp;
−
 
−
autoexec.prg:
 
 
<syntaxhighlight lang="vb">
 
<syntaxhighlight lang="vb">
−
'------------------------------------------------------------------------------
 
−
' File: AUTOEXEC.PRG
 
−
' Purpose: autoexec for XYportal
 
−
' Version: 1.00
 
−
' Author: Eran Korkidi
 
−
' Description:
 
−
' History: Created:  30.NOV.2015
 
−
'------------------------------------------------------------------------------
 
−
 
−
common shared xDoneAxSetupPrg as long = 0
 
−
common shared xDoneGroupPrg as long = 0
 
−
common shared xDoneConvPrg as long = 0
 
−
 
−
program continue
 
−
 
−
if xActualSystem = xRealSystem then
 
−
Load EC_SETUP.PRG
 
−
Stas EC_SETUP.PRG
 
−
while EC_SETUP.PRG.State <> 10
 
−
Sleep 10
 
−
end while
 
−
Unload EC_SETUP.PRG
 
−
end if
 
−
 
−
Load XY_setup.PRG
 
−
Stas XY_setup.PRG
 
−
while (NOT xDoneGroupPrg)
 
−
Sleep 1
 
−
end while
 
−
 
−
call TP_INIT
 
−
 
−
terminate program
 
−
 
−
</syntaxhighlight>
 
−
 
−
&nbsp;
 
−
 
−
XY_SETUP.PRG:
 
−
<syntaxhighlight lang="vb">
 
−
'-----------------------------------------------------------------------
 
−
' Program: SetupGantry.prg
 
−
' Author: Eran Korkidi
 
−
' Description: system setup  - GANTRY XYZ
 
−
' History: 14.APR.2015 Eran Korkidi created
 
−
'-----------------------------------------------------------------------
 
−
'
 
−
 
−
dim shared myprf as long = -1
 
−
dim shared gearRat_X as double = 1.0
 
−
dim shared gearRat_Y as double = 1.0
 
−
 
−
dim shared dAccCurrnetFactor as double
 
−
dim shared dJointVelFactor as double
 
−
dim shared dRobotVelFactor as double
 
−
dim shared lElementID as double
 
−
 
−
dim shared Jvmax as double = 360.0
 
−
dim shared AccVratio as double = 30.0
 
−
 
−
dim shared axisPitch[2] as double
 
−
 
−
program
 
−
 
−
dim omega as double = 10.0
 
−
dim i as long
 
−
dim k as long
 
−
 
−
call setupInit
 
−
 
−
if xActualSystem = xSimulatedSystem then
 
−
for i = 1 to 2
 
−
systemAxis(i).Simulated = TRUE
 
−
systemAxis(i).Dadd = i
 
−
Pos_Units[i] = 360000
 
−
next
 
−
else
 
−
for i = 1 to 2
 
−
if NOT systemAxis(i).Dadd then
 
−
systemAxis(i).Simulated = TRUE
 
−
systemAxis(i).Dadd = i
 
−
end if
 
−
Pos_Units[i] = 360000/axisPitch[i]/360
 
−
next
 
−
end if
 
−
 
−
with XYtable
 
−
 
−
En = FALSE
 
−
while En
 
−
Sleep 10
 
−
end while
 
−
 
−
Attach
 
−
Vord = 100
 
−
Print "STX Gantry - geometric setup"
 
−
 
−
J1.MotionBusVelocityScale = 0
 
−
J1.MotionBusVelocityBase = 1000 ' counts per sec matches CDHD
 
−
J2.MotionBusVelocityScale = 0
 
−
J2.MotionBusVelocityBase = 1000 ' counts per sec matches CDHD
 
−
 
−
J1.Abs = TRUE
 
−
J2.Abs = TRUE
 
−
J1.axisType = 1
 
−
J2.axisType = 1
 
−
J1.Pfac = gearRat_X * Pos_Units[J1.Dadd]
 
−
J2.Pfac = gearRat_Y * Pos_Units[J2.Dadd]
 
−
J1.Vfac = J1.Pfac/1000
 
−
J2.Vfac = J2.Pfac/1000
 
−
J1.Afac = J1.Vfac/1000
 
−
J2.Afac = J2.Vfac/1000
 
−
J1.Jfac = J1.Afac/1000
 
−
J2.Jfac = J2.Afac/1000
 
−
J1.Direction = 1
 
−
J2.Direction = 1
 
−
J1.Disp = 0.0
 
−
J2.Disp = 0.0
 
−
J1.Vmax = Jvmax 'mm/sec ' TBD
 
−
J2.Vmax = Jvmax 'mm/sec ' TBD
 
−
J1.Vospd = 1.2 * J1.Vmax
 
−
J2.Vospd = 1.2 * J2.Vmax
 
−
J1.Vcruise = 0.5 * J1.Vmax
 
−
J2.Vcruise = 0.5 * J2.Vmax
 
−
J1.Amax = J1.Vmax * AccVratio
 
−
J2.Amax = J2.Vmax * AccVratio
 
−
J1.Dmax = J1.Amax
 
−
J2.Dmax = J2.Amax
 
−
J1.Acc = J1.Amax
 
−
J2.Acc = J2.Amax
 
−
J1.Dec = J1.Dmax
 
−
J2.Dec = J2.Dmax
 
−
J1.Jmax = omega * J1.Amax
 
−
J2.Jmax = omega * J2.Amax
 
−
J1.Jerk = J1.Jmax
 
−
J2.Jerk = J2.Jmax
 
−
J1.Smooth = -1
 
−
J2.Smooth = -1
 
−
J1.prftype = myprf
 
−
J2.prftype = myprf
 
−
A1.PMin = -1.0
 
−
A1.PMax =  400.0
 
−
J1.PMin = -1.0
 
−
J1.PMax =  400.0
 
−
A2.PMin = -1.0
 
−
A2.PMax =  400.0
 
−
J2.PMin = -1.0
 
−
J2.PMax =  400.0
 
−
J1.PmaxEn = TRUE
 
−
J2.PmaxEn = TRUE
 
−
J1.PminEn = TRUE
 
−
J2.PminEn = TRUE
 
−
J1.positionerrorsettle = 0.1
 
−
J2.positionerrorsettle = 0.1
 
−
J1.PeMax = 20  'mm
 
−
J2.PeMax = 20  'mm
 
−
PeMax = Sqrt(J1.PeMax^2 + J2.PeMax^2 )  ' follwing error in mm (envelope)
 
−
J1.PositionRollOverEnable=0
 
−
J2.PositionRollOverEnable=0
 
−
 
−
Smooth = -1
 
−
prftype = myprf
 
−
Vfac = 1/1000
 
−
Afac = Vfac/1000
 
−
Jfac = Afac/1000
 
−
Vmax = Jvmax
 
−
Amax = max(J1.Amax,J2.Amax)
 
−
Dmax = max(J1.Dmax,J2.Dmax)
 
−
Jmax = max(J1.Jmax,J2.Jmax)
 
−
 
−
J1.PositionErrorDelay = 5.07
 
−
J2.PositionErrorDelay = 5.07
 
−
for i = 1 to 2
 
−
  for k = 1 to 2
 
−
if i = k then
 
−
  cplg[i][k] = 1
 
−
else
 
−
  cplg[i][k] = 0
 
−
end if
 
−
  next
 
−
next
 
−
Coupled = 1
 
−
Abs = 1
 
−
ConfigGroup
 
−
Vcruise = 0.5 * Vmax
 
−
Acc = Amax
 
−
Dec = Dmax
 
−
Jmax = Omega * Amax
 
−
Jerk= Jmax
 
−
PositionErrorSettle = 0.025 ' 25um
 
−
 
−
Detach
 
−
end with
 
−
 
−
Print ""
 
−
Print "-------------------------"
 
−
Print "XY portal - setup is done"
 
−
Print "-------------------------"
 
−
Print ""
 
−
 
−
end program
 
−
 
−
 
−
function max(byval a as double, byval b as double ) as double
 
−
  if a > b then
 
−
    max = a
 
−
  else
 
−
    max = b
 
−
  end if
 
−
end function
 
−
 
−
 
−
function min(byval a as double, byval b as double ) as double
 
−
  if a < b then
 
−
    min = a
 
−
  else
 
−
    min = b
 
−
  end if
 
−
end function
 
−
 
−
 
−
sub setupInit
 
−
axisPitch[1] = 1
 
−
axisPitch[2] = 1
 
−
end sub
 
−
</syntaxhighlight>
 
−
 
−
&nbsp;
 
  
−
XY_Blend.PRG:
 
−
<syntaxhighlight lang="vb">
 
 
'------------------------------------------------------------------------------
 
'------------------------------------------------------------------------------
−
' File:        <MyTask>.prg
+
' File:        BLEND.prg
−
' Purpose:    Just an example of a module header
+
' Purpose:    MC training for blending motion of a single axis
 
' Version:    1.00
 
' Version:    1.00
−
' Author:      <MyFullName>
+
' Author:      Eran Korkidi
−
' Description:
+
' History:    2021-08-04 Created
−
' History:    YYYY-MM-DD  <MyShortCut> V1.00
 
−
'              Created
 
 
'------------------------------------------------------------------------------
 
'------------------------------------------------------------------------------
  
−
' module global "constants"
 
−
 
−
 
−
' module global variables
 
  
  
 
program
 
program
  
−
dim i as long
+
Attach X
−
 
+
X.En = 1
−
Attach XYTABLE
+
Sleep 100
−
XYTABLE.En = 1
+
X.Abs = 1
−
while NOT XYTABLE.En
+
−
Sleep 1
+
X.CP = 20
−
end while
+
X.BlendingFactor = 80
−
call move1
+
Record X_MOT2.rec 10000 Gap=1 RecData = X.pcmd, X.VCMD, X.ismoving
−
call move2
+
X.BlendingMethod = 0
−
Detach XYTABLE
+
call executeMot
 +
X.BlendingMethod = 1
 +
call executeMot
 +
X.BlendingMethod = 2
 +
call executeMot
 +
RecordClose
 +
 +
Detach X
  
 
end program ' <MyTask>.prg
 
end program ' <MyTask>.prg
  
  
−
sub move1
+
sub executeMot
−
 
+
Move X 0 Vcruise=100
−
dim i as long
+
waitForMotion X
−
for i = 1 to 3
 
−
Move XYTABLE {300,300}
 
−
Move XYTABLE {0,0}
 
−
next
 
−
while XYTABLE.IsMoving
 
−
Sleep 1
 
−
end while
 
−
 
−
end sub
 
−
 
 
−
 
 
−
sub move2
 
−
 
 
−
XYTABLE.BlendingFactor = 80
 
−
XYTABLE.Cp = 20
 
−
 
 
−
Move XYTABLE {0,0}
 
−
while XYTABLE.IsMoving
 
−
Sleep 1
 
−
end while
 
−
 
−
XYTABLE.BlendingMethod = 0
 
−
Record blend_0.rec 10000 Gap = 1 RecData = A1.Pcmd, A2.Pcmd, A1.Vcmd, A2.Vcmd
 
 
RecordOn
 
RecordOn
−
Move XYTABLE {0,100}
+
Sleep 100
−
Move XYTABLE {100,100}
+
Move X 50 Vcruise=20
−
Move XYTABLE {100,0}
+
Sleep 500
−
Move XYTABLE {0,0}
+
Move X 100 Vcruise=20
−
while XYTABLE.IsMoving
+
waitForMotion X
−
Sleep 1
+
Sleep 100
−
end while
+
RecordOff
−
RecordClose
 
−
 
 
−
XYTABLE.BlendingMethod = 1
 
−
Record blend_1.rec 10000 Gap = 1 RecData = A1.Pcmd, A2.Pcmd, A1.Vcmd, A2.Vcmd
 
−
RecordOn
 
−
Move XYTABLE {0,100}
 
−
Move XYTABLE {100,100}
 
−
Move XYTABLE {100,0}
 
−
Move XYTABLE {0,0}
 
−
while XYTABLE.IsMoving
 
−
Sleep 1
 
−
end while
 
−
RecordClose
 
−
 
 
−
XYTABLE.BlendingMethod = 2
 
−
Record blend_2.rec 10000 Gap = 1 RecData = A1.Pcmd, A2.Pcmd, A1.Vcmd, A2.Vcmd
 
−
RecordOn
 
−
Move XYTABLE {0,100}
 
−
Move XYTABLE {100,100}
 
−
Move XYTABLE {100,0}
 
−
Move XYTABLE {0,0}
 
−
while XYTABLE.IsMoving
 
−
Sleep 1
 
−
end while
 
−
RecordClose
 
−
 
 
 
end sub
 
end sub
  
 
</syntaxhighlight>
 
</syntaxhighlight>

Revision as of 10:24, 4 August 2021

Language: English  • 中文(简体)‎

here is an example of using blended motion for a single axis. the motion is done with different blendingFactor: 0 / 1 / 2

 

'------------------------------------------------------------------------------
' File:        BLEND.prg
' Purpose:     MC training for blending motion of a single axis
' Version:     1.00
' Author:      Eran Korkidi
' History:     2021-08-04  Created
'------------------------------------------------------------------------------



program

	Attach X
	X.En = 1
	Sleep 100
	X.Abs = 1
	
	X.CP = 20
	X.BlendingFactor = 80
	Record X_MOT2.rec 10000 Gap=1 RecData = X.pcmd, X.VCMD, X.ismoving
		X.BlendingMethod = 0
		call executeMot
		X.BlendingMethod = 1
		call executeMot
		X.BlendingMethod = 2
		call executeMot
	RecordClose
	
	Detach X

end program ' <MyTask>.prg


sub executeMot
	Move X 0 Vcruise=100
	waitForMotion X
	RecordOn
		Sleep 100
		Move X 50 Vcruise=20
		Sleep 500
		Move X 100 Vcruise=20
		waitForMotion X
		Sleep 100
	RecordOff
end sub