【正文】
臂, 開始工具, 目標(biāo)坐標(biāo), 目標(biāo)手臂, 目標(biāo)工具)例如:Real secssecs = PTPTime(P1, 0, 0, P2, 0, 1)Print Time to go from P1 to P2 is:, secsGo P1secs = PTPTime(P2, 0, 1)Print Time to go from P1 to P2 is:, secs示例程序:判斷和選擇最快速度達(dá)到目標(biāo)點(diǎn)的左右手姿勢(shì).Function MinMotionTime If TargetOK(P0)=True then If PTPTime(P2 /L, 0, 0) PTPTime(P2 /R, 0, 0) then Go P2 /L Else Go P2 /R Endif EndifFend2 CP運(yùn)動(dòng)(連續(xù)軌跡運(yùn)動(dòng))直線插補(bǔ)Move用直線插補(bǔ)動(dòng)作將手臂從當(dāng)前位置移動(dòng)至指定位置。Jump 指令的修飾: 拱形動(dòng)作在Jump指令后通過指定門形參數(shù)Cn(n=0~7),可以改變拱形的形狀Pass:是在目標(biāo)點(diǎn)的附近經(jīng)過,不停留目標(biāo)點(diǎn)而直接執(zhí)行下一個(gè)動(dòng)作指令的 PTP 動(dòng)作。Jump將機(jī)械手的手部先抬起至LimZ 值,然后使手臂水平移動(dòng),快要到目標(biāo)坐標(biāo)上空的時(shí)候使其下降移動(dòng)。以限定第三軸目標(biāo)坐標(biāo)Z=10的門形動(dòng)作移動(dòng)到P1點(diǎn)位置Z坐標(biāo)值為10的位置NOTE:Go與Jump的區(qū)別Jump與Go都是使機(jī)械手手臂用PTP動(dòng)作移動(dòng)的命令。機(jī)械手以“門形動(dòng)作”動(dòng)作到P1點(diǎn)2. Jump P1 LimZ 10 180。移動(dòng)到 X=50, Y=450, Z=0, U=30的位置也可以在目標(biāo)點(diǎn)編號(hào)中使用變量Integer ii = 0Go P(i) 有時(shí)候需要連續(xù)走多個(gè)點(diǎn)位置時(shí),也可以使用以下方式:Go P1,P2,P3,P4,P5Jump:功能:通過“門形動(dòng)作”使手臂手臂從當(dāng)前位置移動(dòng)至目標(biāo)坐標(biāo)。移動(dòng)到P1點(diǎn)U軸數(shù)值=30的位置Go P1 /L 39。移動(dòng)到當(dāng)前位置X方向加50mm的位置Go P1 39。請(qǐng)?zhí)貏e注意與周邊裝置的干涉。根據(jù)錯(cuò)誤代碼進(jìn)行處理 If Err = 2242 Then Print EResume 39。 Print Joint which caused error is , Era(errTask)39。 ErrorHandler: Print The Error code is , Err Print The Error Message is , ErrMsg$(Err) errTask = Ert If errTask 0 Then Print 發(fā)生錯(cuò)誤的任務(wù)為:, TaskInfo$(errTask, 1) Print 發(fā)生錯(cuò)誤時(shí)運(yùn)行的代碼行:, Erl(errTask)39。類似于Fend。觸發(fā)用戶自定義錯(cuò)誤 39。運(yùn)算錯(cuò)誤:除數(shù)為0 EndIf If Sw(1) Then Go XY(1000, 1000, 1000, 0) 39。錯(cuò)誤捕捉和處理 Call InitRobot OnErr GoTo ErrorHandler 39。這樣,即使發(fā)生錯(cuò)誤,也不會(huì)中斷任務(wù)的執(zhí)行,且可以自動(dòng)進(jìn)行錯(cuò)誤處理。但是,如果使用OnErr,為做到自動(dòng)地從錯(cuò)誤中恢復(fù),可以將控制移至錯(cuò)誤處理子程序。OnErr GoTo {標(biāo)簽 | 行編號(hào) | 0}通過 OnErr 用戶可以進(jìn)行錯(cuò)誤處理。需要使用Goto命令時(shí),注意僅在同一個(gè)子函數(shù)中Goto。注意: 在 1 個(gè)程序中,如果過多使用GoTo 命令,程序就會(huì)變得難懂,請(qǐng)注意。Do [ { While | Until } 條件式 ][語句][Exit Do][語句]Loop或使用以下格式。Move P3。Jump P1Case 3On 1。If Sw(1) = 1 ThenIf Sw(2) = 1 ThenPrint Input1 On and Input2 ONElsePrint Input1 On and Input2 OFFEndIfElseIf Sw(2) = 1 ThenPrint Input1 Off and Input2 ONElsePrint Input1 Off and Input2 OFFEndIfEndIf其他格式的示例If x = 10 And y = 3 Then GoTo 50If test = 10 Then Print Test FailedIf Sw(0) = 1 Or Sw(1) = 1 Then Print Everything OK2 分支選擇 使用Select語句,根據(jù)條件跳轉(zhuǎn)到不同的分支語句中.Select 表達(dá)式Case 項(xiàng)目語句[ Case 項(xiàng)目語句 ][Default語句]Send示例:Function MainInteger IFor I = 0 To 10Select ICase 0Off 1。語句T2...] [Else 語句F1 [。Sw(2)則讓暫停的Task1繼續(xù)運(yùn)行。(4) 編寫程序,由Main函數(shù)Xqt幾個(gè)無限循環(huán)的線程,通過Main函數(shù)根據(jù)不同的輸入條件控制其他線程的啟動(dòng)/停止/暫停/繼續(xù)和掛起。某個(gè)任務(wù)用完共用資源后,調(diào)出SyncUnlock 解除鎖定,使其他任務(wù)可使用此資源。急停時(shí)不中止的子程序:可以做一些后臺(tái)程序,如處理通訊、系統(tǒng)狀態(tài)處理等 Do Wait 1 Print This task still running when EmgStop Print 本任務(wù)急停時(shí)也能繼續(xù)運(yùn)行 LoopFendFunction task16_NoPause 39。 EndIf EndIf Print task C have wait , TaskInfo(task15_SubC, 5), s If Sw(2) = On Then Quit All LoopFendFunction task15_SubA Do Wait 1 Print task15_SubA Running LoopFendFunction task15_SubB Do Wait .8 Print task15_SubB Running LoopFendFunction task15_SubC Do Wait Sw(10) = On Wait 1 Print task_SubC running LoopFend7 任務(wù)的類型 參考上一節(jié),如進(jìn)行和上位機(jī)通訊時(shí),有時(shí)并不希望進(jìn)行通訊的任務(wù)暫停下來. 通過設(shè)定任務(wù)特殊的運(yùn)行類型,可以讓任務(wù)不受暫停,緊急停止等影響.任務(wù)運(yùn)行類型 任務(wù)運(yùn)行類型有NoEmgAbort(急停時(shí)不停止)和NoPause(不暫停).只需要在調(diào)用函數(shù)任務(wù)時(shí),: Xqt 函數(shù)名 , 函數(shù)類型 Xqt task16_NoPause, NoPause示例程序:Function task16_taskType 39。繼續(xù)運(yùn)行被暫停的子程序 If Sw(1) Then Halt task15_SubB Wait 1 Print A =, TaskInfo(task15_SubA, 3) Print B =, TaskInfo(task15_SubB, 3) If Sw(2) = On Then If TaskInfo(task15_SubA, 3) = 3 Then Print Rusume _SubA Resume task15_SubA。通過IO信號(hào)控制三個(gè)子程序的暫停,退出等 If Sw(0) = On Then Halt task15_SubA 39。對(duì)子程序/任務(wù)的控制 39。也可以對(duì)字符串進(jìn)行操作 Print input :, strIn$ strIn$ = 1234 5678 FendFunction task07withPara3 As Integer 39。 b = 0 For i = 0 To 3 Call task07withPara1(a, ByRef b) Print a=, a, b=, b Next Print pls input some string Input strA$ Call task07withPara2(ByRef strA$) Print Return string :, strA$ Print funtion return = , task07withPara3FendFunction task07withPara1(ByVal dataByVal As Integer, ByRef dataByRef As Integer) 39。帶參數(shù)的函數(shù)測(cè)試 39。設(shè)置CP運(yùn)動(dòng)(插補(bǔ)運(yùn)動(dòng))的加速度mm/s*s Fend編寫好函數(shù)之后,而不需要編寫重復(fù)的代碼.2 函數(shù)的調(diào)用 函數(shù)的調(diào)用有兩種方式:Call:將函數(shù)作為子程序調(diào)出。設(shè)定U軸旋轉(zhuǎn)的速度 SpeedS 1000 39。分別設(shè)置xy速度,Z軸上升速度,下降速度 Accel 100, 100 39。 Power Low 39。使用Date$以字符串類型返回當(dāng)前日期.練習(xí)操作(1) 設(shè)置定時(shí)器,計(jì)算從P1點(diǎn)走到P2點(diǎn)所需時(shí)間(2) 在某個(gè)應(yīng)用中,機(jī)械手會(huì)分別從P1,P2,P2,P3中哪一個(gè)點(diǎn)走到P0點(diǎn)最快,.四 函數(shù)和任務(wù)1 調(diào)用函數(shù) 以Function xxx(函數(shù)名)開頭,Fend結(jié)束,代表某一功能的一段代碼,我們稱之為函數(shù). 在編寫機(jī)械手程序時(shí),.Function InitRobot 39。s = Time(2) 39。Store the time in minutesh = Time(0) 39。Long h, m, s Time 12,0,0 ’設(shè)置當(dāng)前時(shí)間為12:00:00Time ’顯示當(dāng)前時(shí)間.Time(0) ’(1)顯示分鐘,Time(2)顯示秒鐘位.示例程序:Function main 三 時(shí)間/定時(shí)/計(jì)時(shí) 1定時(shí)器TMR ,一直處于計(jì)時(shí)狀態(tài). 通過TmReset (計(jì)時(shí)器編號(hào))讀取計(jì)時(shí)器的數(shù)值,即可實(shí)現(xiàn)計(jì)時(shí)的功能. 示例:需要計(jì)算某段工序的時(shí)間: TmReset 0 For i = 0 To 9 Move pL1 Move pL2 Move pL1 Move pL0 Next Print Spend time:, Tmr(0)2 等待語句Wait SW(1) = ON’等待輸入1導(dǎo)通 3’等待3S示例: Go P1 Wait 1 Go P2Wait語句中等待輸入條件時(shí),會(huì)觸發(fā)超時(shí).Wait SW(1) = ON,3If TW = ON then Print “等待SW(1)超過3S,超時(shí)!”Endif3 判斷條件超時(shí) 也利用If語句判斷和Tmr功能組合實(shí)現(xiàn)判斷等待的條件是否超時(shí)的功能. 示例: Tmreset 0 Do If sw(0) = on then Exit do Endif If Tmr(0) 3 then Print “等待SW(0)超過3S,超時(shí)” Exit Do Endif Loop4 時(shí)間/日期 當(dāng)需要知道系統(tǒng)時(shí)間,可以用Time/Date命令來實(shí)現(xiàn)。5S一次的間隔進(jìn)行閃爍。練習(xí)操作(1) 設(shè)計(jì)程序,讓輸出8和輸出9按照1S間隔,交替ON/OFF(2) 做一段控制紅綠燈的程序,讓紅燈亮30S,綠燈亮20S,黃燈閃爍亮3S。(4)內(nèi)存IO在程序啟動(dòng)/停止時(shí)不會(huì)自動(dòng)清理。避免零件跌落。當(dāng)輸出點(diǎn)設(shè)置為遠(yuǎn)程IO時(shí)變成了系統(tǒng)IO只受控制器本身系統(tǒng)狀態(tài)控制。6 IO注意要點(diǎn)(1) 默認(rèn)設(shè)置下,當(dāng)急停按下時(shí),所有的輸出點(diǎn)會(huì)關(guān)閉。虛擬IO功能 為了調(diào)試方便,也可以在實(shí)際連接控制器時(shí),將IO設(shè)置為虛擬IO。將2,5,6位全部關(guān)閉5 IO監(jiān)控與操作IO監(jiān)視器點(diǎn)擊工具欄按鈕可以打開IO監(jiān)視器,進(jìn)行IO監(jiān)視與操作。將2,5,6位全部關(guān)閉Out 0, amp。將0~7位全部關(guān)閉Out 1, 255 180。端口編號(hào)如下與位編號(hào)對(duì)應(yīng)。H0~amp。首先在用端口編號(hào)指定的組中指定輸出數(shù)據(jù)參數(shù)中特定的輸出模式。待機(jī)到0~7位全部開啟Out 功能:同時(shí)設(shè)定輸出8個(gè)輸出位格式:Out 端口編號(hào),輸出數(shù)據(jù) 端口編號(hào):構(gòu)成可使用輸出位的組;輸出數(shù)據(jù):用端口編號(hào)指定的組的輸出模式說明:端口編號(hào)與輸出數(shù)據(jù)的組合后同時(shí)設(shè)定8個(gè)輸出位。B00001111)=14 180。打印輸入位07的狀態(tài) Wait In(0) amp。 返回值為0~255范圍的整數(shù)值。輸入信號(hào)的檢測(cè)和等待時(shí)間判斷 Print 等待Sw(0)輸入 Wait Sw(0) = On Print 檢測(cè)到Sw(0)已輸入 Print 等待Sw(2) Wait Sw(2) = On, 5 Print 檢測(cè)到Sw(2)已輸入或Sw(2)等待超時(shí) TMOut 3 Wait Sw(1) = On