Program Examples: WorkSpace areas
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:
|
NOTE | |
For more information about WorkSpace area definitions, and what the XML file contains please refer to WorkSpace areas page. |
Steps
Step 1
Make sure that the relevant XML file is within your project folder.
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