Program Examples: WorkSpace areas

From SoftMC-Wiki
Jump to: navigation, search
Language: English

TOP2.png

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. Download.png

To run WorkSpace example:

  1. Upload all project files to MC
  2. Via CS terminal send the following – “SEND SCARAEX.XML” – NEED TO GET “done” MESSAGE
  3. Via CS terminal: “reset all” -> “load startprg.prg” -> “load WSPCONE.PRG” -> “STAS WSPCONE.PRG”
  4. Information message should appear in the Message Log panal.
NOTE-Info.svgNOTE

The information you should get from WSPCONE.PRG task refer to:

  • loactions definition
  • Movements status
  • WSPC status
NOTE-Info.svgNOTE
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