Difference between revisions of "Program Examples: WorkSpace areas"
(→Steps) |
|||
Line 22: | Line 22: | ||
}} | }} | ||
=Steps= | =Steps= | ||
+ | ==Step 1== | ||
+ | Make sure that the relevant XML file is within your project folder. <br> | ||
+ | For more information about WorkSpace area definitions, and what the XML file contains please refer to [[WorkSpace areas]] page. <br> | ||
+ | The XML file should be in this structure: | ||
+ | <syntaxhighlight lang='XML'> | ||
+ | |||
+ | <workspace_set> | ||
+ | <workspace number="1" name = "ToolCenter_pos"> | ||
+ | <origin x="450" y="-50" z="-50" yaw="0" pitch="0" roll="0"/> | ||
+ | <dimensions x="100" y="100" z="100"/> | ||
+ | <entry_points> | ||
+ | <point ws_num="3" x="0" y="0" z="50"/> | ||
+ | </entry_points> | ||
+ | <exit_points> | ||
+ | <point ws_num="2" x="0" y="100" z="50"/> | ||
+ | </exit_points> | ||
+ | <tolerance radius="5" /> | ||
+ | </workspace> | ||
+ | |||
+ | <workspace number="2" name = "First_pos"> | ||
+ | <origin x="-50" y="350" z="-50" yaw="0" pitch="0" roll="0"/> | ||
+ | <dimensions x="100" y="100" z="100"/> | ||
+ | <entry_points> | ||
+ | <point ws_num="1" x="100" y="0" z="50"/> | ||
+ | </entry_points> | ||
+ | <exit_points> | ||
+ | <point ws_num="3" x="0" y="0" z="50"/> | ||
+ | </exit_points> | ||
+ | <tolerance radius="5" /> | ||
+ | </workspace> | ||
+ | |||
+ | <workspace number="3" name = "Second_pos"> | ||
+ | <origin x="-50" y="-450" z="-50" yaw="0" pitch="0" roll="0"/> | ||
+ | <dimensions x="100" y="100" z="100"/> | ||
+ | <entry_points> | ||
+ | <point ws_num="2" x="0" y="100" z="50"/> | ||
+ | </entry_points> | ||
+ | <exit_points> | ||
+ | <point ws_num="1" x="100" y="100" z="50"/> | ||
+ | </exit_points> | ||
+ | <tolerance radius="5" /> | ||
+ | </workspace> | ||
+ | |||
+ | </workspace_set> | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | ==Step 2== | ||
+ | After XML created and located at project folder, send the following commands from CS terminal: <br> | ||
+ | <syntaxhighlight lang=freebasic> | ||
+ | --> SEND SCARAEX.XML ' Need to get "done" message back | ||
+ | --> Reset all | ||
+ | --> load STARTPRG.PRG | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | '''Now your system is ready to use WorkSpaces setting as you create in the XML file.''' | ||
+ | |||
+ | ==Step 3== | ||
+ | Create task for your robot, under WorkSpaces limitations, for example: <br> | ||
+ | |||
+ | <syntaxhighlight lang=freebasic> | ||
+ | |||
+ | |||
+ | dim shared lFlag as long | ||
+ | |||
+ | program | ||
+ | |||
+ | dim lLoadXMLSeting as long | ||
+ | dim lRobotID as long = scara1.ElementID | ||
+ | dim NumWSPC as long | ||
+ | dim lTemp as long | ||
+ | dim lSecTemp as long | ||
+ | dim locTempExLocation as generic location | ||
+ | dim locTempEnLocation as generic location | ||
+ | dim locExCurr as location of XYZR | ||
+ | dim locEnCurr as location of XYZR | ||
+ | |||
+ | withglobal scara1 | ||
+ | |||
+ | |||
+ | print RobotSetup | ||
+ | attach | ||
+ | pemax = 10 | ||
+ | |||
+ | lLoadXMLSeting = WSPC_PARSE_XML(lRobotID, "SCARAEX.XML") | ||
+ | NumWSPC = WSPC_GET_NUM(lRobotID) | ||
+ | |||
+ | if NOT lLoadXMLSeting then | ||
+ | print "WorkSpace definitions completed" | ||
+ | end if 'if there is an error - MC will throw it's message | ||
+ | |||
+ | print str$(NumWSPC) + " WSPC defined" | ||
+ | |||
+ | lTemp = WSPC_ACTIVATE_ALL(lRobotID) | ||
+ | if NOT lTemp then | ||
+ | print "All WSPC are activate" | ||
+ | else | ||
+ | print "Failed to activate all WSPC" | ||
+ | end if | ||
+ | |||
+ | print ExitSet(lRobotID, 1, 2, locTempExLocation) | ||
+ | print EntrySet(lRobotID, 2, 1, locTempEnLocation) | ||
+ | lTemp = CurrectLoc(locTempExLocation, locExCurr) | ||
+ | lSecTemp = CurrectLoc(locTempEnLocation, locEnCurr) | ||
+ | print RobotMovesFromWSPCto (lFlag, locExCurr, locEnCurr) | ||
+ | |||
+ | print ExitSet(lRobotID, 2, 3, locTempExLocation) | ||
+ | print EntrySet(lRobotID, 3, 2, locTempEnLocation) | ||
+ | lTemp = CurrectLoc(locTempExLocation, locExCurr) | ||
+ | lSecTemp = CurrectLoc(locTempEnLocation, locEnCurr) | ||
+ | print RobotMovesFromWSPCto (lFlag, locExCurr, locEnCurr) | ||
+ | |||
+ | print ExitSet(lRobotID, 3, 1, locTempExLocation) | ||
+ | print EntrySet(lRobotID, 1, 3, locTempEnLocation) | ||
+ | lTemp = CurrectLoc(locTempExLocation, locExCurr) | ||
+ | lSecTemp = CurrectLoc(locTempEnLocation, locEnCurr) | ||
+ | print RobotMovesFromWSPCto (lFlag, locExCurr, locEnCurr) | ||
+ | |||
+ | try | ||
+ | moves #{450, 300, 0,0} | ||
+ | catch else | ||
+ | print "Can't reach a point that is not defined within WorkSpace" | ||
+ | end try | ||
+ | |||
+ | |||
+ | sleep 10 | ||
+ | lTemp = WSPC_DEACTIVATE_ALL(lRobotID) | ||
+ | if NOT lTemp then | ||
+ | print "All WSPC deactivate" | ||
+ | else | ||
+ | print "Failed to deactivate all WSPC" | ||
+ | end if | ||
+ | |||
+ | detach | ||
+ | |||
+ | end program | ||
+ | |||
+ | |||
+ | function ExitSet (byval lRobotID as long, byval WSPCFrom as long, byval WSPCTo as long, exit_loc as generic location) as string | ||
+ | dim lTemp as long | ||
+ | |||
+ | lTemp = WSPC_FIND_EXIT(lRobotID, WSPCFrom, WSPCTo, exit_loc) | ||
+ | if NOT lTemp then | ||
+ | ExitSet = "exit point location setup succeeded" | ||
+ | lFlag = 1 | ||
+ | else | ||
+ | ExitSet = "exit point location setup failed" | ||
+ | lFlag = 0 | ||
+ | end if | ||
+ | |||
+ | end function | ||
+ | |||
+ | |||
+ | function EntrySet (byval lRobotID as long, byval WSPCTo as long, byval WSPCFrom as long, entry_loc as generic location) as string | ||
+ | dim lTemp as long | ||
+ | |||
+ | lTemp = WSPC_FIND_ENTRY(lRobotID, WSPCTo, WSPCFrom, entry_loc) | ||
+ | if NOT lTemp then | ||
+ | entrySet = "entry point location setup succeeded" | ||
+ | lFlag = 1 | ||
+ | else | ||
+ | entrySet = "entry point location setup failed" | ||
+ | lFlag = 0 | ||
+ | end if | ||
+ | |||
+ | end function | ||
+ | |||
+ | |||
+ | function RobotMovesFromWSPCto(byval lMotFlag as long, exit_Loc as generic location, entry_Loc as generic location) as string | ||
+ | try | ||
+ | if lMotFlag then | ||
+ | En = 1 | ||
+ | moves exit_Loc vcruise = 5 | ||
+ | while IsMoving <>0 | ||
+ | sleep 1 | ||
+ | end while | ||
+ | |||
+ | moves entry_Loc vcruise = 5 | ||
+ | while IsMoving <>0 | ||
+ | sleep 1 | ||
+ | end while | ||
+ | en = 0 | ||
+ | RobotMovesFromWSPCto = "movement completed" | ||
+ | else | ||
+ | RobotMovesFromWSPCto = "can't execute movement" | ||
+ | end if | ||
+ | |||
+ | catch else | ||
+ | RobotMovesFromWSPCto = "can't execute movement" | ||
+ | end try | ||
+ | |||
+ | end function | ||
+ | |||
+ | function CurrectLoc(old_Loc as generic location, new_Loc as generic location) as long | ||
+ | dim i as long | ||
+ | |||
+ | for i = 1 to 3 | ||
+ | new_Loc{i} = old_loc{i} | ||
+ | next | ||
+ | |||
+ | |||
+ | end function | ||
+ | |||
+ | |||
+ | function RobotSetup as string | ||
+ | dim i as long | ||
+ | dim genAxis as generic axis | ||
+ | for i = 1 to 4 | ||
+ | genAxis = SystemAxis(i) | ||
+ | attach genAxis | ||
+ | genAxis.pemax = 10 | ||
+ | genAxis.en = 1 | ||
+ | move genAxis 0 abs = 1 vcruise = 50 | ||
+ | while genAxis.ismoving<> 0 | ||
+ | sleep 1 | ||
+ | end while | ||
+ | genAxis.en = 0 | ||
+ | detach genAxis | ||
+ | |||
+ | next | ||
+ | |||
+ | |||
+ | RobotSetup = "Setup Done" | ||
+ | |||
+ | end function | ||
+ | |||
+ | </syntaxhighlight> |
Revision as of 07:56, 13 May 2018
WorkSpace Example
Description | Download |
It's recommended to download the example ZIP file, extract all the project files, open project with ControlStudio, and run the example by yourself. |
To run WorkSpace example:
- Upload all project files to MC
- Via CS terminal send the following – “SEND SCARAEX.XML” – NEED TO GET “done” MESSAGE
- Via CS terminal: “reset all” -> “load startprg.prg” -> “load WSPCONE.PRG” -> “STAS WSPCONE.PRG”
- Information message should appear in the Message Log panal.
NOTE | |
The information you should get from WSPCONE.PRG task refer to:
|
Steps
Step 1
Make sure that the relevant XML file is within your project folder.
For more information about WorkSpace area definitions, and what the XML file contains please refer to WorkSpace areas page.
The XML file should be in this structure:
<workspace_set>
<workspace number="1" name = "ToolCenter_pos">
<origin x="450" y="-50" z="-50" yaw="0" pitch="0" roll="0"/>
<dimensions x="100" y="100" z="100"/>
<entry_points>
<point ws_num="3" x="0" y="0" z="50"/>
</entry_points>
<exit_points>
<point ws_num="2" x="0" y="100" z="50"/>
</exit_points>
<tolerance radius="5" />
</workspace>
<workspace number="2" name = "First_pos">
<origin x="-50" y="350" z="-50" yaw="0" pitch="0" roll="0"/>
<dimensions x="100" y="100" z="100"/>
<entry_points>
<point ws_num="1" x="100" y="0" z="50"/>
</entry_points>
<exit_points>
<point ws_num="3" x="0" y="0" z="50"/>
</exit_points>
<tolerance radius="5" />
</workspace>
<workspace number="3" name = "Second_pos">
<origin x="-50" y="-450" z="-50" yaw="0" pitch="0" roll="0"/>
<dimensions x="100" y="100" z="100"/>
<entry_points>
<point ws_num="2" x="0" y="100" z="50"/>
</entry_points>
<exit_points>
<point ws_num="1" x="100" y="100" z="50"/>
</exit_points>
<tolerance radius="5" />
</workspace>
</workspace_set>
Step 2
After XML created and located at project folder, send the following commands from CS terminal:
--> SEND SCARAEX.XML ' Need to get "done" message back
--> Reset all
--> load STARTPRG.PRG
Now your system is ready to use WorkSpaces setting as you create in the XML file.
Step 3
Create task for your robot, under WorkSpaces limitations, for example:
dim shared lFlag as long
program
dim lLoadXMLSeting as long
dim lRobotID as long = scara1.ElementID
dim NumWSPC as long
dim lTemp as long
dim lSecTemp as long
dim locTempExLocation as generic location
dim locTempEnLocation as generic location
dim locExCurr as location of XYZR
dim locEnCurr as location of XYZR
withglobal scara1
print RobotSetup
attach
pemax = 10
lLoadXMLSeting = WSPC_PARSE_XML(lRobotID, "SCARAEX.XML")
NumWSPC = WSPC_GET_NUM(lRobotID)
if NOT lLoadXMLSeting then
print "WorkSpace definitions completed"
end if 'if there is an error - MC will throw it's message
print str$(NumWSPC) + " WSPC defined"
lTemp = WSPC_ACTIVATE_ALL(lRobotID)
if NOT lTemp then
print "All WSPC are activate"
else
print "Failed to activate all WSPC"
end if
print ExitSet(lRobotID, 1, 2, locTempExLocation)
print EntrySet(lRobotID, 2, 1, locTempEnLocation)
lTemp = CurrectLoc(locTempExLocation, locExCurr)
lSecTemp = CurrectLoc(locTempEnLocation, locEnCurr)
print RobotMovesFromWSPCto (lFlag, locExCurr, locEnCurr)
print ExitSet(lRobotID, 2, 3, locTempExLocation)
print EntrySet(lRobotID, 3, 2, locTempEnLocation)
lTemp = CurrectLoc(locTempExLocation, locExCurr)
lSecTemp = CurrectLoc(locTempEnLocation, locEnCurr)
print RobotMovesFromWSPCto (lFlag, locExCurr, locEnCurr)
print ExitSet(lRobotID, 3, 1, locTempExLocation)
print EntrySet(lRobotID, 1, 3, locTempEnLocation)
lTemp = CurrectLoc(locTempExLocation, locExCurr)
lSecTemp = CurrectLoc(locTempEnLocation, locEnCurr)
print RobotMovesFromWSPCto (lFlag, locExCurr, locEnCurr)
try
moves #{450, 300, 0,0}
catch else
print "Can't reach a point that is not defined within WorkSpace"
end try
sleep 10
lTemp = WSPC_DEACTIVATE_ALL(lRobotID)
if NOT lTemp then
print "All WSPC deactivate"
else
print "Failed to deactivate all WSPC"
end if
detach
end program
function ExitSet (byval lRobotID as long, byval WSPCFrom as long, byval WSPCTo as long, exit_loc as generic location) as string
dim lTemp as long
lTemp = WSPC_FIND_EXIT(lRobotID, WSPCFrom, WSPCTo, exit_loc)
if NOT lTemp then
ExitSet = "exit point location setup succeeded"
lFlag = 1
else
ExitSet = "exit point location setup failed"
lFlag = 0
end if
end function
function EntrySet (byval lRobotID as long, byval WSPCTo as long, byval WSPCFrom as long, entry_loc as generic location) as string
dim lTemp as long
lTemp = WSPC_FIND_ENTRY(lRobotID, WSPCTo, WSPCFrom, entry_loc)
if NOT lTemp then
entrySet = "entry point location setup succeeded"
lFlag = 1
else
entrySet = "entry point location setup failed"
lFlag = 0
end if
end function
function RobotMovesFromWSPCto(byval lMotFlag as long, exit_Loc as generic location, entry_Loc as generic location) as string
try
if lMotFlag then
En = 1
moves exit_Loc vcruise = 5
while IsMoving <>0
sleep 1
end while
moves entry_Loc vcruise = 5
while IsMoving <>0
sleep 1
end while
en = 0
RobotMovesFromWSPCto = "movement completed"
else
RobotMovesFromWSPCto = "can't execute movement"
end if
catch else
RobotMovesFromWSPCto = "can't execute movement"
end try
end function
function CurrectLoc(old_Loc as generic location, new_Loc as generic location) as long
dim i as long
for i = 1 to 3
new_Loc{i} = old_loc{i}
next
end function
function RobotSetup as string
dim i as long
dim genAxis as generic axis
for i = 1 to 4
genAxis = SystemAxis(i)
attach genAxis
genAxis.pemax = 10
genAxis.en = 1
move genAxis 0 abs = 1 vcruise = 50
while genAxis.ismoving<> 0
sleep 1
end while
genAxis.en = 0
detach genAxis
next
RobotSetup = "Setup Done"
end function