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
ID : 789