close

速度, 加減速設定

 
Integer slow, accSlow, accFast, fast, decSlow, decFast
Function accTest
    slow = 20     '低速的設置
    fast = 100    '高速的設置
    accSlow = 20  '低加速度的設置
    decSlow = 20  '低減速度的設置 
    accFast = 100 '高加速度的設置
    decFast = 100 '高減速度的設置
    Accel accSlow, decSlow
    Speed slow
    
    Accel accFast, decFast
    Speed fast
    

檔案寫入

'寫檔案練習
Function writeFileTest
    Integer fileNum, i
    fileNum = FreeFile
    '寫檔案 WOpen
    WOpen "Test.DAT" As #fileNum
    For i = 0 To 100
        Print #fileNum, i
    Next
    Close #fileNum
    ' 繼續寫 AOpen    
    AOpen "Test.DAT" As #fileNum
    For i = 101 To 200
        Print #fileNum, i
    Next
    Close #fileNum
Fend

知道目前座標位置及姿態  Print Here

Function whereAmI
     Print "###進料區###"
     Go InitPos
     Print Here
     
     Wait (2)
     Go InputTop
       Print Here
 
      Go InObj1PickFront
       Print Here
       
     Wait (2)
     Move InObj1Pick
       Print Here
 
     Wait (2)
     Move InObj1PickFront
       Print Here
 
      Go InputTop
      Print Here
      
      Go InitPos
     Print Here
 
Fend

跑完輸出結果, 每移動至新座標後, 列印出目前位置及姿態

動畫展示

###進料區###
 X:  415.000 Y:    0.000 Z:  570.000 U:    0.000 V:  -90.000 W: -180.000 /R /A /NF /J6F0 /J4F0 /0
 X:  298.526 Y: -288.283 Z:  570.000 U:    0.000 V:  -90.000 W:  136.000 /R /A /NF /J6F0 /J4F0 /0
 X:  452.691 Y:  -55.625 Z:  227.363 U:  -44.000 V:  -88.705 W:  180.000 /R /A /F /J6F0 /J4F0 /0
 X:  564.160 Y: -163.270 Z:  223.860 U:  -44.000 V:  -88.705 W:  180.000 /R /A /F /J6F0 /J4F0 /0
 X:  452.691 Y:  -55.625 Z:  227.363 U:  -44.000 V:  -88.705 W:  180.000 /R /A /F /J6F0 /J4F0 /0
 X:  298.526 Y: -288.283 Z:  570.000 U:    0.000 V:  -90.000 W:  136.000 /R /A /NF /J6F0 /J4F0 /0
 X:  415.000 Y:    0.000 Z:  570.000 U:    0.000 V:  -90.000 W: -180.000 /R /A /NF /J6F0 /J4F0 /0

Boolean 使用範例: 一維陣列

'Boolean 範例
Function booleanTest
    Integer i;
    Boolean A(10)
    Print "-----修改前-----------------"
    For i = 1 To 10
        Print A(i)
    Next
    Print "-----修改後-----------------"
    A(2) = True
    A(4) = True
    For i = 1 To 10
        Print A(i)
    Next
    Print "-----自定義列印-----------------"
    For i = 1 To 10
        If A(i) = True Then
            Print i, ":True"
        Else
            Print i, ":False"
        EndIf
    Next
 
Fend

輸出結果

-----修改前-----------------
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
-----修改後-----------------
 0
 -1
 0
 -1
 0
 0
 0
 0
 0
 0
-----自定義列印-----------------
 1:False
 2:True
 3:False
 4:True
 5:False
 6:False
 7:False
 8:False
 9:False
 10:False

Boolean 使用範例: 二維陣列

'Boolean 使用範例: 二維陣列
Function booleanTest2D
    Integer i, j;
    Boolean A(3, 3)
    Print "-----修改前-----------------"
    For i = 1 To 3
        For j = 1 To 3
            Print "(", i, j, ")", A(i, j)
        Next
    Next
    A(1, 2) = True
    Print "-----修改後-----------------"
    For i = 1 To 3
        For j = 1 To 3
            Print "(", i, j, ")", A(i, j)
        Next
    Next
Fend

輸出結果

-----修改前-----------------
( 1 1) 0
( 1 2) 0
( 1 3) 0
( 2 1) 0
( 2 2) 0
( 2 3) 0
( 3 1) 0
( 3 2) 0
( 3 3) 0
-----修改後-----------------
( 1 1) 0
( 1 2) -1
( 1 3) 0
( 2 1) 0
( 2 2) 0
( 2 3) 0
( 3 1) 0
( 3 2) 0
( 3 3) 0

偵測進入感興趣空間Box

定義4個感興趣空間Box

'Box 測試
Function boxShow
    Box 1, 600, 700, -300, -200, 0, 500
    Box 2, 500, 600, -400, -300, 0, 500
    Box 3, 400, 500, -500, -400, 0, 500
    Box 4, 300, 400, -600, -500, 0, 500
Fend

當手臂進入感興趣空間1時, 會清除感興趣空間1

動畫展示

Function boxTest
    Print "###進料區###"
    'Call boxShow
    
     Go InitPos
     Print Here
     
     Wait (2)
     Go InputTop
       Print Here
 
      Go InObj1PickFront
       Print Here
     If BoxDef(1) = True Then
        BoxClr 1
     EndIf
     
     Wait (2)
     Move InObj1Pick
       Print Here
 
     Wait (2)
     Move InObj1PickFront
       Print Here
    
          
      Go InputTop
      Print Here
      
      Go InitPos
     Print Here
Fend

Call 使用範例

image

新增副程式檔案名稱 Init

image

image

在Init.prg新增副程式 InitRobot

Function InitRobot
    If Motor = Off Then
        Motor On
    EndIf
    Power High
    Speed 50
    Accel 75, 75
Fend

在Main.prg新增副程式  GetInObj1

到進料區夾取Object #1

'到進料區夾取Object #1
Function GetInObj1
    Print "###進料區###"
    'Call boxShow
    
     Go InitPos
     Print Here
     
     Wait (2)
     Go InputTop
       Print Here
 
      Go InObj1PickFront
       Print Here
     If BoxDef(1) = True Then
        BoxClr 1
     EndIf
     
     Wait (2)
     Move InObj1Pick
       Print Here
 
     Wait (2)
     Move InObj1PickFront
       Print Here
    
          
      Go InputTop
      Print Here
      
      Go InitPos
     Print Here
Fend

主程式只需呼叫副程式InitRobot和GetInObj1

'Call呼叫副程式
Function CallSubroutine
    Call InitRobot
    Call GetInObj1
Fend

清除EPSON RC+ 7.0 的Run 視窗

' 清除EPSON RC+ 7.0 的Run 視窗
Function ClsTest
    Integer i
    Randomize '用於進行亂數系列的初始化。
    
    Do
        For i = 1 To 10
            Print Rnd(10)  '產生亂數 0~10 實數
        Next
        Wait 3
        Cls
    Loop
Fend

輸出結果

image

設置路徑運動 CP On/Off

一般點到點動作會像是下圖中(通常動作, CP Off),

若打開CP On, 則會變成路徑運動, 會將點到點變成一個連續軌跡運動, 不會發生停頓現象


image

CP 使用範例
CP On
Move P1
Move P2
CP Off


在IO標籤編輯器自訂輸入IO, 編號8~11:分別為取得進料區料號1~4

編輯完成後按下CTRL+S, 則在IO監視器可以看到剛才新贈的標籤

image

Xqt 執行某一個io任務


Oport 與Sw 的差異

Oport 與Sw 命令存在明顯差異。兩者都用於檢查I/O 狀態,但檢查的I/O 類型不同。Sw 命令用於檢
輸入位元。Oport 命令用於檢查標準及擴展硬體的輸出位元。這些硬體埠用於與控制器外部裝置進
行相互通訊的獨立輸出位元。

以下範例為監控輸入腳位8, 預設為False

操作展示

Function xqtTest
    Xqt 2, iotask
Fend
 
Function iotask
    Boolean flag
    flag = False '紀錄某個IO是否已經被啟動
    
    Do
      If Sw(8) = True And flag = False Then
        flag = True
        Print "啟動..."
      Else
          If Sw(8) = False Then
                flag = False
           Print "停止..."
          Else
             Print "執行中..."
          EndIf
      EndIf
    Wait 5
    Loop
Fend

根據I/O觸發, 加入對應手臂動作

操作展示

Sw 函數

用作返回指定輸入位元狀態的函數。


SetSw 用於設置虛擬I/O 的輸入。

SetSw 使用範例

setsw 2, on '將第2 個輸入位元設為ON

Time 函數

Print "The current time is:", Time$
arrow
arrow
    全站熱搜

    me1237guy 發表在 痞客邦 留言(0) 人氣()