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