<< 前へ        次へ >>

ID : 789

Detect機能

Detect機能とはI/Oの信号入力時のロボット座標を保存する機能です。

入力するI/O信号はHand I/Oの入力信号もしくはMini I/Oの入力信号です。ただし、Mini I/Oの専用入力信号は指定できません。

ロボット座標はポジション型ジョイント型同次変換型のデータを選択し、グローバル変数に格納します。

Detect機能は"DetectOn"コマンドを実行すると指定したポートのバッファを初期化し、機能を有効にします。機能有効時には指定した入力信号が入った時の現在位置をバッファに格納します。"DetectOff"コマンドを実行するとバッファのデータを指定したグローバル変数に格納し、機能を無効にします。

バッファはポート番号とエッジ指定の組み合わせによって識別され、別々に作成されます。

機能の流れ

1

"DetectOn"コマンドの実行で機能が有効になります。

2

指定した入力信号を検出すると内部のバッファに位置データが格納されます。

3

"DetectOff"コマンドの実行でバッファを指定したグローバル変数に書き込みます。

Detect機能のサンプルプログラム1

Pick & Placeです。円形のワークをPickする前に手先につけたセンサによりワークの中心位置を取得し、位置修正します。

<Pro1.pcs>

#Include "Chuck_Unchuck.pcs"
#Define Home P(200,0,200,180,0,180,-1)	'ホームポジション
#Define SenserToolNum 10	'センサーのツール番号
Sub Main
	Dim PickPos As Position	'ワーク(Pick)の位置
	Dim PlacePos As Position	'ワーク(Place)の位置
	PickPos = P(300,0,100,180,0,180,-1)	'大体このあたりの位置だけどずれあり
	PickPos = GetCenter(PickPos)	'位置修正プログラム
	if PickPos = P(0,0,0,0,0,0,-1) Then Exit Sub
	TakeArm
	
	'Pick
	Approach P, PickPos, 50
	Move L, PickPos
	Call Func_Chuck(On)	'把持
	Depart L, 50, Speed = 50
	
	'Place
	Approach P, PlacePos, 50, Speed = 50
	Move L, PlacePos, Speed = 50
	Call Func_Chuck(Off)	'置く
	Depart L, 50
	Move P, Home
End Sub

Function GetCenter(ByVal pPos As Position) As Position
	'引数pPosは大枠基準となる位置(円形のワーク上にある)
	'この位置からX、Y軸方向に+/-100mmの範囲で動作します。
	'トリガI/Oは128番ポート
	'取得個数格納変数:I[10]
	Dim pGloNum As Integer = 10	'センサ位置取得用P型グローバル変数番号
	Dim xPos As Single
	Dim yPos As Single
	Dim LastPos As Position	'直前の位置を格納
	Dim LastToolNum As Integer	'直前のTool番号を格納
	LastPos = CurPos
	LastToolNum = CurTool
	I[10] = 0	'取得個数格納変数をRESET
	TakeArm
	ChangeTool SenserToolNum	'センサー用ツール座標に変更

	'X方向のセンシング
	Move P, Dev(pPos, P(-100,0,0))
	DetectOn 128, 257, pGloNum, 2, 10, 2	'DETECT機能On
	Draw L, V(200,0,0), Speed = 10	'X方向へ移動
	DetectOff 128, 2	'DETECT機能Off
	If I[10] <> 2 Then GoTo NotSense	'取得できていなかったら中止
	xPos = 0.5 * (PosX(P[pGloNum + 0]) + PosX(P[pGloNum + 1]))
	
	'Y方向のセンシング
	Move P, Dev(pPos, P(0,-100,0))	
	DetectOn 128, 257, pGloNum, 2, 10, 2	'DETECT機能On
	Draw L, V(0,200,0), Speed = 10	'Y方向へ移動
	DetectOff 128, 2	'DETECT機能Off
	If I[10] <> 2 Then GoTo NotSense	'取得できていなかったら中止
	yPos = 0.5 * (PosY(P[pGloNum + 0]) + PosY(P[pGloNum + 1]))
	
	'もとの状態に
	ChangeTool LastToolNum
	Move P, LastPos

	LetX pPos = xPos	'x代入
	LetY pPos = yPos	'y代入
	GetCenter = pPos
	Exit Function

NotSense:	'感知できなかったときは初期値を返す
	GetCenter = P(0,0,0,0,0,0,-1)
	
End Function

Detect機能のサンプルプログラム2

ハンドにつけたセンサでワークの有無を調べてからワークを取りに行くプログラム

<SearchAndPickPlace.pcs>

'!TITLE "DETECT機能のサンプルプログラム"

#Define CountIValNum 3
#Define WorkPosPValNumStart 20
#Define pcsPosition 257
#Define SenserIONum 128
#Define MaxCount 10
#Define ScanStartPos P(800.00, 0.00, 50, -104.02, 90.00, -104.02, 5)
#Define ScanEndPos P(800.00, 0.00, 600, -104.02, 90.00, -104.02, 5)
#Define SenserToolNum 3
#Define HandToolNum 4
#Define Home P(466.64, 0.00, 558.33, 100.47, 90.00, 100.47, -1 )
#Define PlacePos P(0.00, 800.00, 100.00, 42.59, 90.00, 133.40, 1 )
'#Include "Chuck_Unchuck"

Sub Main
	Dim n As Integer	' カウンタ

	Takearm
	Move P, Home

	' SCAN
	Changetool SenserToolNum
	Move P, ScanStartPos
	DetectOn SenserIONum, pcsPosition, WorkPosPValNumStart, MaxCount, CountIValNum
	Move L, ScanEndPos,speed = 10 
	DetectOff 128
	
	' 正常にスキャンできなかったときは
	If i[CountIValNum] = -1 Then GoTo ScanErr
	
	'スキャンできた位置それぞれに取りに行く
	For n = WorkPosPValNumStart To (WorkPosPValNumStart + i[CountIValNum] -1)
		Call PickAndPlace(p[n])
	Next

	Exit Sub	

ScanErr:	'正常なScanができなかったときの処理
	'Statements
End Sub

Sub PickAndPlace(ByVal TargetPos As Position)
	Dim LastToolNum As Integer
	LastToolNum = CurTool
	Dim LastWorkNum As Integer
	LastWorkNum = CurWork

	TakeArm
	ChangeTool HandToolNum

	' PICK
	Approach p, TargetPos, 30
	Move L, TargetPos, Speed = 20
	Call FuncChuck(On)
	Depart L, 350 , Speed = 20

	' PLACE
	Move L, PlacePos
	Call FuncChuck(Off)
	Depart L, 30 , Speed = 20
	
	ChangeTool LastToolNum
	ChangeWork LastWorkNum
	Move P, Home

End Sub

関連項目

DetectOnDetectOffHand I/OMini I/O

ID : 789

<< 前へ        次へ >>