46
9. Bölüm KRL ile Robot Programlama

9. Bölüm - Hitit

  • Upload
    others

  • View
    61

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 9. Bölüm - Hitit

9. Bölüm

KRL ile Robot Programlama

Page 2: 9. Bölüm - Hitit
Page 3: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

213

9.1. KRL ile Robot Programlamaya Giriş

KRL (KUKA Robot Language) derleyici prensibiyle çalışan Pascal ve Basic dillerine benzer yapısal bir

programlama dilidir. Robot Programı, robota ve çevre birimlerine birtakım hareket ve kontrol işlemlerini yapması

amacıyla yazılan komutlar dizisi olarak tanımlanmaktadır.

Endüstriyel Robot Sistemleri ile Otomasyon İhtiyacının karşılanmasına yönelik programlama stratejisi genel

anlamda Problem Tanımı, Tasarım, Test ve Uygulama aşamalarından oluşmaktadır. Bu doğrultuda Endüstriyel

Robotların programlanmasına yönelik olarak Şekil 9.1’de verilen akış şemasına uygun olarak hareket edilmesi hem

sistem insan güvenliği açısından büyük önem taşımaktadır.

Otomasyon sisteminde Endüstriyel Robot kullanılmasının gerekliliğinin belirlenebilmesi amacıyla, problemin doğru

anlaşılması, ihtiyaçların belirlenmesi ve çözüme yönelik analizin iyi bir şekilde yapılması gerekmektedir. Gerekli

araştırma ve analiz yapıldıktan sonra, yapılması istenen işin kotarılması veya çözülmesi istenen problemin

çözümüne yönelik olarak ayrıntılı algoritmalar hazırlanmalıdır. Algoritma Analizi yapılarak, çözüme cevap veren

algoritma için KRL dilinde kodlama yapılmalıdır.

Programlama stratejisinin en önemli kısmı Test aşamasından oluşmaktadır. KUKA Endüstriyel Robotlar için test

işlemi güvenliğin ön planda tutulduğu T1 ve T2 çalışma modlarında gerçekleştirilmektedir. Test aşamasında

başarısız olunarak istenen sonuca ulaşılamadığı durumlarda tasarım aşamasının yeniden gözden geçirilmesi ve

programlamanın yeniden yapılması gerekmektedir. Test aşamasında Başarılı olunması durumunda Uygulama

aşamasına geçilerek, AUT ve EXT AUT çalışma modlarında geliştirilen programın çalıştırılması söz konusu

olabilmektedir.

Genel olarak programlama dilleri, Program Yazım Kurallarına ilave olarak aşağıdaki temel konuları içermektedir:

Veri Tipleri ve Değişkenler

Operatörler

Karar ve Çevrim Kontrol Komutları

Altprogramlar

Şekil 9.1. Endüstriyel Robot Programlama Stratejisi

TASARIM

Analiz, Algoritma, Kodlama

UYGULAMA

AUT ve EXT AUT

Çalışma Modları

PROBLEM

Endüstriyel Robot Sistemleri ile

Otomasyon İhtiyacı

Başarılı

TEST

T1 T2

Çalışma Modları

Başarısız

Page 4: 9. Bölüm - Hitit

ERPE-METEG

214

9.2. Veri Tipleri ve Değişkenler

Değişkenler, program içerisinde değerleri değişebilen veri yapılarıdır. Değişkenler tanımlanma durumuna göre

bellekte belirli bir yer adreslerler. Değişkenlerin ne şekilde bir veriyi bellekte tutacağı ve sahip olacağı bellek

büyüklüğü tanımlandığı veri tipine bağlı olarak değişebilmektedir.

KRL dilinde değişkenlerin tanımlanması ve kullanımında dikkat edilmesi gereken durumlar şunlardır:

Bir değişken kullanılmadan önce mutlaka uygun bir veri tipi ile tanımlanmalıdır.

Değişkenler tanımlanma yeri ve şekline göre Lokal ve Global olarak tanımlanabilmektedir.

Lokal değişkenler sadece tanımlandıkları program veya altprogram içerisinde geçerlidirler.

Global değişkenler, config.dat, machine.dat vb. sistem dosyalarında tanımlanırlar. Ayrıca Global

değişkenler, ‘Global’ anahtar sözcüğü eklenerek lokal bir dosya içerisinde de tanımlanabilirler.

SRC kaynak kod dosyasında tanımlanan değişkenler, ilgili program veya altprogram sonlandığında

varlıklarını yitirirler ve kendilerine ayrılmış bellek yerini iade ederler.

DAT veri dosyasında tanımlanan değişkenlerin güncel değerleri kalıcıdır.

KRL dilinde değişken ve diğer yapılara isim verilirken dikkat edilmesi gereken birtakım kurallar mevcuttur:

İsimlendirmede İngilizce (A-Z) küçük-büyük harfler, 0..9 arası rakamlar, "_" ve "$" özel karakterler

kullanılabilmektedir.

Bir isim en fazla 24 karakter uzunluğunda olabilmektedir.

İsimlendirmede bazı programlama dillerinde olduğu gibi Büyük – Küçük harf ayrımı yoktur.

İsimlendirmede FOR, WHILE OUT vb. özel bir kullanımı olan KUKA Rezerv kelimeleri

kullanılmamalıdır.

İsimlendirme ilk karakter hiçbir zaman rakam olmamalıdır.

9.2.1. KRL Veri Tipleri KRL’de basit veri tipleri Tablo 9.1’de görülmektedir.

Tablo 9.1. KRL basit veri tipleri

Basit Veri Tipleri Anahtar Kelime Değer Aralığı Örnek

Tamsayı INT 4 Byte

-231

+231

-1 -100, 0, 500

Kesirli Sayı REAL 1.1x10-38

3.4x10+38

-0.00001, 0.123, 9.17

Mantık BOOL TRUE / FALSE TRUE

Karakter CHAR ASCII Karakterleri ‘H’, ‘İ’, ‘T’, ‘İ’, ‘T’

Page 5: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

215

9.2.2. Değişkenlerin Tanımlanması, Geçerlilik Alanları ve Süreleri Değişkenler tanımlandıkları bellek yeri ve şekline göre;

Lokal

Global

olmak üzere iki farklı sınıfa ayrılmaktadırlar ve buna bağlı olarak da geçerlilik alan ve süreleri de değişmektedir.

Tablo 9.2’de lokal ve global değişkenlere ait özellikler verilmektedir.

Tablo 9.2. Lokal ve Global Değişken Özellikleri

Değişken

Türü

Geçerlilik

Alanı Tanımlanma Yeri Geçerlilik Süresi

Global Tüm

Programlar

Sistem Dosyaları (config.dat, machine.dat) Lokal ortamda Global olarak tanımlama

Her Zaman

Lokal

Sadece

Tanımlanan

Robot Programı

Program Dosyası (*.src) (Çalışma Zamanı/Run-Time)

Program Seçili olduğu sürece

Data Dosyası (*.dat) Her Zaman

Global Değişkenler, programcı tarafından tanımlanabilen ve tüm programlarda geçerli olmakla birlikte değerlerini

her zaman koruyan değişkenlerdir. Şekil 9.2’de Global değişken tanımlama örnek programları görülmektedir.

Global değişkenler config.dat, machine.dat vb. bir sistem dosyasında veya lokal veri listesinde Global değişken

olarak tanımlanabilmektedir.

Config.Dat sistem dosyasında

Global değişken tanımlama

DAT dosyasında

Global değişken tanımlama

Şekil 9.2. Global Değişken Tanımlama

DEFDAT $CONFIG

...

;===========================

; Userdefined Types

;===========================

;===========================

; Userdefined Externals

;===========================

;===========================

; Userdefined Variables

;===========================

DECL INT Sayac = 100

DECL REAL Sicaklik

DECL BOOL Durum

DECL CHAR Sembol

...

ENDDAT

DEFDAT MY_PROG PUBLIC

EXTERNAL DECLARATIONS

DECL GLOBAL INT Sayac

DECL GLOBAL REAL Sicaklik

DECL GLOBAL BOOL Durum

DECL GLOBAL CHAR Sembol

...

ENDDAT

Page 6: 9. Bölüm - Hitit

ERPE-METEG

216

Lokal Değişkenler, sadece tanımlandığı endüstriyel robot uygulama programı içerisinde geçerli olan değişkenlerdir.

Lokal değişkenler SRC veya DAT dosyalarında tanımlanabilmektedirler. Şekil 9.3’te Lokal değişken tanımlama

örnek programları görülmektedir.

SRC dosyası içerisinde tanımlanan Lokal Değişkenler, Çalışma Zamanı (Run-Time) değişkenler olarak ifade

edilebilmektedir. Yani bir değişken SRC dosyası içerisinde tanımlanmışsa; ilgili programın seçim (Select) özelliği

devam ettiği sürece değişkenin de varlığı devam eder. Aksi takdirde ilgili programın seçim (Select) özelliği

kalktığında değişkenin de varlığı sona erer.

DAT dosyası içerisinde tanımlanan Lokal Değişkenler, sadece tanımlandığı program dosyasında geçerlidir. Ancak

bu şekilde tanımlanan değişkenler, ilgili programın seçim (Select) özelliği kalksa bile varlıklarını devam ettirirler ve

değerlerini korurlar.

SRC dosyasında Lokal değişken tanımlama

DAT dosyasında Lokal değişken tanımlama

Şekil 9.3. Lokal Değişken Tanımlama

DEF MY_PROG ( )

DECL INT Sayac

DECL REAL Sicaklik

DECL BOOL Durum

DECL CHAR Sembol

INI

Sayac = 5

Sicaklik = 10.5

Durum = FALSE

Sembol = "A"

...

END

DEFDAT MY_PROG

EXTERNAL DECLARATIONS

DECL INT Sayac = 5

DECL REAL Sicaklik

DECL BOOL Durum

DECL CHAR Sembol

...

ENDDAT

Page 7: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

217

9.2.3. Diziler (Arrays)

Dizi (Array) aynı tipte verilerin bir arada saklandığı veri yapısıdır. Dizi elemanına erişimde dizi adı ve indis

kullanılır.

KRL dilinde dizilerin en fazla 3 boyutlu olarak tanımlanmasına izin verilmektedir:

Tek Boyutlu Dizler (Dizi)

İki Boyutlu Diziler (Matris)

Üç Boyutlu Diziler (Prizma)

Tek Boyutlu Diziler

Tek boyutlu diziler, n elemanlı gözden oluşan ve Dizi halinde ifade edilen veri yapılarıdır. Şekil 9.4’te Tek Boyutlu

Dizi yapısı, tanımı ve kullanımı görülmektedir.

Dizi

1 2 3 4 5

Dizi

1 2 3 4 5

15 20 30 40 50

Tanımlamada kullanılan indis değeri n ise; dizinin ilk elemanına 1, son elemanı da n değeri ile erişilir.

Şekil 9.4. Tek Boyutlu Dizi yapısı, tanımı ve kullanımı

Tek Boyut Dizi

Dizi [5]

...

DECL INT Dizi[5]

DECL INT i

...

Dizi[1] = 15

...

FOR i = 2 TO 5

Dizi[i] = i * 10

ENDFOR

...

Page 8: 9. Bölüm - Hitit

ERPE-METEG

218

İki Boyutlu Diziler İki boyutlu diziler, satır ve sütunlardan oluşan ve matris (Tablo) halinde ifade edilen veri yapılarıdır. Şekil 9.5’te İki

Boyutlu Dizi yapısı, tanımı ve kullanımı görülmektedir.

Matris 1 2

1

2

Matris 1 2

1 10 20

2 20 40

Şekil 9.5. İki Boyutlu Dizi yapısı, tanımı ve kullanımı

2. Boyut Matris

Matris [1, 2] 1. Boyut

...

DECL INT Matris [2,2]

DECL INT i,j

...

Matris [1,2] = 15

...

FOR i = 1 TO 2

FOR j = 1 TO 2

Matris [i,j] = i*j*10

ENDFOR

ENDFOR

...

Page 9: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

219

Üç Boyutlu Diziler Üç boyutlu diziler, X – Y – Z boyutlarından oluşan ve prizma halinde ifade edilen veri yapılarıdır. Şekil 9.6’da Üç

Boyutlu Dizi yapısı, tanımı ve kullanımı görülmektedir.

Şekil 9.6. Üç Boyutlu Dizi yapısı, tanımı ve kullanımı

1. Boyut

2. Boyut

3. Boyut

Prizma

Prizma [1, 4, 2]

Prizma [2, 3, 1]

...

DECL INT Prizma [3,4,2]

DECL INT i,j,k

...

Prizma [1,2,1] = 25

...

FOR i = 1 TO 3

FOR j = 1 TO 4

FOR j = 1 TO 2

Prizma[i,j,k] = i+j+k

ENDFOR

ENDFOR

ENDFOR

...

Page 10: 9. Bölüm - Hitit

ERPE-METEG

220

9.2.4. Sistem Değişkenleri

KRL dilinde kullanılmak üzere endüstriyel robot sistemine yönelik olarak çalışan birçok Sistem Değişkeni

bulunmaktadır. Tablo 9.3’te başlıca Sistem Değişkenleri verilmiştir.

KRL dilinde kullanılan sistem değişkenlerinin başlıca ortak özellikleri şunlardır:

Sistem değişkenleri her zaman geçerlidir ve değerini korur.

Sistem değişkenleri her zaman sorgulanabilir.

Sistem değişkenleri her zaman “$” karakteri ile başlar.

Tablo 9.3. Başlıca Sistem Değişkenleri

Sistem Değişkeni Açıklamalar Örnek Kullanımlar

$ACT_TOOL Ön Çalışmadaki Aktif TOOL numarası

(1..16)

$ACT_TOOL = 3

Alet_No = $ACT_TOOL

$ACT_BASE Ön Çalışmadaki Aktif BASE numarası

(1..32)

$ACT_BASE = 5

Base_No = $ACT_BASE

$POS_ACT

Güncel Kartezyen Robot Pozisyonu (E6POS)

(Read Only)

$POS_ACT

BASE koordinat sistemine göre TCP pozisyonunu

E6POS tipinde tanımlar:

X, Y, Z (mm)

A, B, C ()

X = $POS_ACT.X

$AXIS_ACT

Güncel Aksa-Özgü Robot Pozisyonu (E6AXIS)

$AXIS_ACT

Aks açı veya pozisyonlarını E6AXIS tipinde verir:

A1..A6 (mm veya )

E1..E6 (mm veya )

$AXIS_ACT = {A1 0.0, A2 -120.0, A3 120.0, A4 0.0, A5 90.0,

A6 0.0, E1 0.0, E2 0.0, E3 0.0, E4 0.0, E5 0.0, E6 0.0}

xA1 = $AXIS_ACT.A1

$POS_INT

Interrupt Durumunda Kartezyen Robot Pozisyonu

$POS_INT

Interrupt durumunda BASE koordinat sistemine

göre TCP pozisyonunu E6POS tipinde verir:

X, Y, Z (mm)

A, B, C ()

Not: Base 0 ise World Koordinat Sistemi geçerlidir.

X = $POS_INT.X

$AXIS_INT

Interrupt Durumunda Aksa-Özgü Robot Pozisyonu

(E6AXIS)

$AXIS_ACT

Interrupt durumunda Aks açı veya pozisyonlarını

E6AXIS tipinde verir:

A1..A6 (mm veya )

E1..E6 (mm veya )

xA1 = $AXIS_INT.A1

Page 11: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

221

$VEL_ACT

Güncel Yol (Path) Hızı

$VEL_ACT = Velocity

Velocity m/sn

0.0 .. $VEL_MA.CP

IF $VEL_ACT>1.0 THEN

ENDIF

$VEL_AXIS

Ön Çalışmada Robot Aks Hızları

$VEL_AXIS[n] = Velocity

n Aks Numarası (1..6)

Velocity % (1..100)

R1\Mada\$machine.dat dosyasında tanımlı olan

$VEL_AXIS_MA maksimum aks hızının

%’si olarak programlanmış aks hızını içerir.

IF $VEL_ AXIS [1]>50 THEN

ENDIF

$OV_PRO

Program Override, program çalışması süresince robot

hızıdır.

Program Override, programlanmış hızın yüzdesi olarak

belirlenir.

Robot Güncel Hızı (Program Override)

$OV_PRO = Override

Override % (0..100) (Default:100)

Not: T1 modunda her zaman için hız 250 mm/sn’dir.

$OV_PRO = 20

$OV_PRO = 75

Po_hiz = $OV_PRO

$OV_ROB

Robot Güncel Hızı (Robot Override)

(Read Only)

$OV_ROB = Override

Override % (0..100)

Robot Override, program çalışmasında güncel robot

hızıdır. Robot Override, $OV_PRO program

Override’ın azaltılmış bir fonksiyonu olarak belirlenir.

ro_hiz = $OV_ROB

$NUM_IN $IN sistem değişkeninde mevcut dijital Input sayısı N = $NUM_IN

$NUM_OUT $OUT sistem değişkeninde mevcut dijital Output sayısı N = $NUM_OUT

$IN

Dijital Giriş

$IN[n]

n Input Numarası

1..4096 (KSS 8.1)

1..8192 (KSS 8.2 ve üzeri)

Geri Dönüş Değeri TRUE/FALSE

Durum = $IN[1]

$OUT

Dijital Çıkış

$OUT[n] = State

n Output Numarası

1..4096 (KSS 8.1)

1..8192 (KSS 8.2 ve üzeri)

State TRUE/FALSE

$OUT[1] = FALSE

$OUT[2] = TRUE

$ANIN

Analog Giriş

(Read Only)

$ANIN[n]

n 1..32

Geri Dönüş Değeri -1.0 .. +1.0

veri = $ANIN[1]

Page 12: 9. Bölüm - Hitit

ERPE-METEG

222

$ANOUT

Analog Çıkış

$ANOUT[n] = Value

n 1..32

Value -1.0 .. +1.0

$ANOUT[1] = 0.5

$ADVANCE

Ön Çalışmadaki maksimum hareket komutu sayısı

$ADVANCE = Value

Value 0..5 (Default:3)

Not: $ADVANCE değişkeninin değeri 0 olması

durumunda Ön Çalışma mümkün değildir.

$ADVANCE = 3

$MODE_OP

Endüstriyel Robot Çalışma Modu

$MODE_OP = Operating mode

Operating

mode

#T1, #T2, #AUT, #EX, #INVALID

IF $MODE_OP == #T1 THEN

$MOT_TEMP

Aks Mevcut Motor Sıcaklığı

$MOT_TEMP[axis_number]

axis_number 1..6 (A1..A6)

7..12 (E1..E6)

Geri Dönüş

Değeri (Kelvin, 12Kelvin toleransta)

Konfigüre edilmeyen akslar için

değer 0’dır.

T = $MOT_TEMP[1]

$TIMER

Timer Çevrim Süresi Ölçme

$TIMER[n] = Time

n Timer Numarası (1..32)

Time Süre (ms)

Default : 0

T = $TIMER[1]

$TIMER_STOP

Timer Başlatma ve Durdurma

$TIMER_STOP[n] = State

n Timer Numarası (1..32)

State TRUE: Timer Durdurma

FALSE: Timer Başlatma

$TIMER_STOP[1] = TRUE

$INTERPRETER

Interpreter (Yorumlayıcı) Seçimi

$ INTERPRETER = Tip

Tip 0 veya 1 (Default:1)

0: Submit Interpreter

Editörde Seçili SUB program görüntülenir.

1: Robot Interpreter

Editörde Seçili hareket programı

görüntülenir.

$INTERPRETER = 1

Page 13: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

223

9.3. Operatörler

Operatörler, ifade içerisindeki değişken ve diğer ifadelere uygulandığında yeni değerlerin elde edilmesini sağlayan

ve kendilerine özel sembolik gösterimleri olan sözdizimleridir. Operatörler genel olarak 4 farklı sınıfta yer

almaktadırlar (Tablo 9.4):

Aritmetik Operatörler

Karşılaştırma Operatörleri

Mantıksal Operatörler

Bitsel Operatörler

Tablo 9.4. Operatörler

Operatör Sınıfı Operatör Açıklama Örnek Kullanım

Aritmetiksel

+ Toplama c = a + b

- Çıkarma c = a - b

* Çarpma c = a * b

/ Bölme c = a / b

Karşılaştırma

== Eşit a == b

<> Farklı a <> b

> Büyük a > b

>= Büyük Eşit a >= b

< Küçük a < b

<= Küçük Eşit a <= b

Mantıksal

NOT DEĞİL Not (a==5)

AND VE (a>5) AND (b<5)

OR VEYA (a==5) OR (b<5)

EXOR ÖZEL-VEYA (a==5) EX-OR (b<5)

Bitsel

(Bitwise)

B_NOT Bitsel DEĞİL ‘HF0’ B_NOT (‘H0F’)

B_AND Bitsel VE ‘H02’ (‘H12’ B_AND ‘H0F’)

B_OR Bitsel VEYA ‘H1F’ (‘H12’ B_OR ‘H0F’)

B_EXOR Bitsel ÖZEL-VEYA ‘H1D’ (‘H12’ B_EXOR ‘H0F’)

Aritmetik Operatörlere yönelik olarak işlem sonuçlarının alacağı veri tipleri Tablo 9.5’te görülmektedir.

Tablo 9.5. Aritmetik İşlem Sonuç Veri Tipleri

Operatör INT REAL

INT INT REAL

REAL REAL REAL

Page 14: 9. Bölüm - Hitit

ERPE-METEG

224

Şekil 9.7’de verilen örnekte operandların veri tipine bağlı olarak işlem sonucunun aldığı veri tipleri örneklenmiştir.

Mantıksal Operatörlere yönelik Doğruluk Tablosu Tablo 9.6’da görülmektedir.

Tablo 9.6. Mantıksal Operatör Doğruluk Tablosu

A

B

NOT A

NOT B

A AND B

A OR B

A EXOR B

False False True True False False False

False True True False False True True

True False False True False True True

True True False False True True False

Şekil 9.7. Aritmetik İşlem Sonuçlarının Alacağı Veri Tipleri

DEF Aritmetik_Operatorler()

DECL INT A,B,C,D,E

DECL REAL K,L,M

INI

A = 2 ;A=2

B = 9.8 ;B=10

C = 9.50 ;C=10

D = 9.48 ;D=9

E = 7/4 ;E=1

K = 3.5 ;K=3.5

L = 1.0 ;L=1.0

M = 3 ;M=3.0

A = A * E ;A=2

B = B - ’HB’ ;B=-1

E = E + K ;E=5

K = K * 10 ;K=35.0

L = 10/4 ;L=2.0

L = 10/4.0 ;L=2.5

L = 10/4. ;L=2.5

L = 10./4 ;L=2.5

E = 10./4. ;E=3

M = (10/3) * M ;M=9.0

END

Page 15: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

225

Operatör işlem önceliği Tablo 9.7’de görülmektedir. Bir ifade içerisindeki aynı önceliğe sahip operatörler için

Soldan-Sağa doğru işlem önceliği söz konusudur.

Tablo 9.7. Operatörler Önceliği

Öncelik Sırası Operatör

1 NOT B_NOT

2 * /

3 + -

4 AND B_AND

5 EXOR B_EXOR

6 OR B_OR

7 == <> > >= < <=

Şekil 9.8’de karşılaştırma ve mantıksal operatörlerin ifade içerisinde çoklu kullanımları örneklenmiştir.

Şekil 9.8. Çoklu Karşılaştırma ve Mantıksal Operatör kullanımı

...

DECL BOOL A, B, C, D

...

A = FALSE ;A = FALSE

B = NOT A ;B = TRUE

C = (A AND B) OR (A EXOR B) ;C = TRUE

D = NOT NOT C ;D = TRUE

...

...

DECL BOOL A, B, C, D

...

A = 10 > 20 ; A=FALSE

B = 5/2 == 2 ; B=TRUE

C = ((A == B) <> (1 <= 1.001)) == FALSE ; C=FALSE

D = "A" < "Z" ; D=TRUE

...

Page 16: 9. Bölüm - Hitit

ERPE-METEG

226

Şekil 9.9’da Bitsel (Bitwise) operatörlerin kullanımı örneklenmiştir.

Şekil 9.9. Bitsel Operatör kullanımı

DECL INT A

...

A = B_NOT 5 ; A = -6

A = B_NOT 'H05' ; A = -6

A = B_NOT 'B00000101' ; A = -6

A = B_NOT "A" ; A = 66

A = 12 B_AND 6 ; A = 4

A = 12 B_OR 6 ; A = 14

A = 12 B_EXOR 6 ; A = 10

...

Page 17: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

227

9.4. Standart Fonksiyonlar

Fonksiyonlar, parametrik olarak aldıkları verileri işleyerek elde ettiği sonucu geri döndüren yapılardır.

Fonksiyonların bir adı ve parametrik olarak aldıkları bağımsız değişkenleri mevcuttur. Fonksiyonların yapısı gereği

bir veya daha fazla sayıda giriş parametresi alırken geriye döndürdüğü tek bir değer mevcuttur.

Programlama ihtiyacına göre hem programcı tarafından kodlanan fonksiyonlardan hem de hazır Standart

Fonksiyonlardan yararlanmak mümkündür. KRL dilinde kullanılan bazı Standart Matematiksel Fonksiyonlar Tablo

9.8’de verilmiştir.

Tablo 9.8. KUKA Matematiksel Standart Fonksiyonlar

Fonksiyon Açıklama Örnek Kullanım

ABS(x) Mutlak Değer 5 ABS (-5)

SQRT(x) Kök Alma 3 SQRT (9)

SIN(x) Sinüs 0.5 SIN (30)

COS(x) Kosinüs 0.5 COS (60)

TAN(x) Tanjant 1 TAN (45)

ACOS(x) Ark Kosinüs 60 ACOS (0.5)

ATAN2(y, x) Ark Tanjant 45 ATAN2 (0.5, 0.5)

Şekil 9.10’da Sin(X) ve Cos(X) fonksiyonun kullanımına yönelik KRL kod örneği görülmektedir.

Şekil 9.10. KRL dilinde Sin(X) ve Cos(X) fonksiyonu kullanımı

DEF s_Sin_Cos()

; Lokal Değişken Tanımları -----

DECL A6POS PB

INI

; HOME Pozisyonuna Git ---------

PTP HOME Vel= 50 % DEFAULT

; Başlangıç Noktasına Git ------

PTP PA Vel= 50 % DEFAULT

; Hedef Noktası Hesapla --------

PB.X = PA.X

PB.Y = PA.Y + Cos (30) * 200

PB.Z = PA.Z + Sin (30) * 200

; Hedef Noktasına Doğrusal Git -

LIN PB

; HOME Pozisyonuna Git ---------

PTP HOME Vel= 50 % DEFAULT

END

PA

PB

30

PC

.

+Z

-Z

-Y +Y

+X

- X

b

a

𝐶𝑜𝑠 ∝=𝑏

𝑐 𝑆𝑖𝑛 ∝ =

𝑎

𝑐

Page 18: 9. Bölüm - Hitit

ERPE-METEG

228

9.5. Karar ve Çevrim Kontrol Komutları

Diğer programlama dillerinde olduğu gibi, KRL dilinde de program akışının kontrol edilmesi amacıyla kullanılan

çeşitli özelliklerde karar ve çevrim kontrol komutları Tablo 9.9’da sınıflandırılmıştır.

Tablo 9.9. Karar ve Çevrim Kontrol Komutları

Karar Kontrol Komutları

Şartlı Dallanmalar (IF)

Çoklu Dallanmalar (SWITCH) (IF THEN ELSE IF …)

Çevrim Kontrol Komutları

Sonsuz Çevrimler (LOOP)

Sayaç Çevrimleri (FOR)

Dışlayıcı Çevrimler (WHILE)

Dışlayıcı Olmayan Çevrimler (REPEAT / UNTIL)

9.5.1. Karar Kontrol Komutları

Karar kontrol komutları, program akışının yönlendirilmesi amacıyla kullanılmaktadır. Karar verme işlemlerinde

başta Karşılaştırma ve Mantık Operatörleri olmak üzere çeşitli operatörlerden yararlanılmaktadır.

Şartlı Dallanmalar (IF)

IF komutu; belirtilen şarta göre program akışını yönlendirerek, ilgili program satırı ya da bloğunun çalıştırılmasını

sağlayan kontrol komutudur. IF komutları iç-içe kullanılabilmektedir.

IF komutunun kullanılmasına yönelik akış şeması ve program kodları Şekil 9.11’dE görülmektedir. (a) örneğinde IN

1 girişi TRUE olması durumunda robot tarafından P3 noktasına PTP hareketi gerçekleştirilmektedir, aksi takdirde

bir alt satırdan program çalıştırılmaya devam edecektir. (b) örneğinde ise; IN 30 girişi TRUE olması durumunda

robot tarafından P3 noktasına, FALSE olması durumunda ise P4 noktasına PTP hareketi gerçekleştirilmektedir.

Page 19: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

229

Şekil 9.11. IF Şartlı Dallanma komutu

...

IF $IN[1]==TRUE THEN

PTP P3

ELSE

PTP P4

ENDIF

...

(b)

...

IF $IN[1]==TRUE THEN

PTP P3

ENDIF

...

(a)

IF …

THEN

… ELSE

ENDIF

TRUE

FALSE IF …

THEN

ENDIF

TRUE

FALSE

Page 20: 9. Bölüm - Hitit

ERPE-METEG

230

Çoklu Dallanma (IF / ELSE IF / ELSE / ENDIF )

IF dallanma komutlarının iç içe kullanılması ile çoklu dallanma yapmak da mümkündür. IF komutu ile çoklu

dallanma yapılmasına yönelik program kodları Şekil 9.12’de görülmektedir. Örnekte Konum değişkenin değerine

göre koşulun sağlandığı program bölümü çalıştırılmaktadır. Konum değeri 1 ise robot tarafından P5 noktasına, 2 ise

P6 noktasına PTP hareketi gerçekleştirilmektedir. Eğer Konum değerine eşit bir seçenek bulunamazsa ELSE

satırındaki ERROR_MSG() adlı altprogram çalıştırılmaktadır.

Şekil 9.12. IF/ELSE IF/ELSE komutu

DECL INT Konum

...

IF (Konum==1) THEN

PTP P3

ELSE IF (Konum==2) THEN

PTP P4

ELSE IF (Konum==3) THEN

PTP P5

ELSE

ERROR_MSG()

ENDIF

...

Page 21: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

231

Çoklu Dallanma (SWITCH )

Switch çoklu dallanma komutu, program akışının çoklu yönlendirilmesi amacıyla kullanılan bir karar

kontrol komutudur. SWITCH komutunun kullanılmasına yönelik program kodları Şekil 9.13’te görülmektedir.

Örnekte Konum değişkenin değerine göre CASE durum seçeneklerinden eşlenen program bölümü çalıştırılır.

Konum değeri 1 ise robot tarafından P5 noktasına, 2 ise P6 noktasına PTP hareketi gerçekleştirilmektedir. Eğer

Konum değerine eşit bir CASE bulunamazsa DEFAULT satırındaki ERROR_MSG() adlı altprogram

çalıştırılmaktadır.

Şekil 9.13. SWITCH çoklu dallanma komutu

...

DECL INT Konum

...

SWITCH Konum

CASE 1

PTP P5

CASE 2

PTP P6

DEFAULT

ERROR_MSG()

ENDSWITCH

SWITCH …

CASE 1

… CASE 2

ENDSWITCH

CASE n

… DEFAULT

1 2 n Diğer

Page 22: 9. Bölüm - Hitit

ERPE-METEG

232

9.5.2. Çevrim Kontrol Komutları

Sonsuz Çevrim (LOOP)

Sonsuz çevrim, bir program bloğunun herhangi bir şart aranmaksızın sonsuz kez tekrarlanmasını sağlamaktadır.

Sonsuz çevrimden istenirse; EXIT fonksiyonu kullanılarak çıkmak mümkün olabilmektedir. LOOP komutunun

kullanılmasına yönelik program kodları Şekil 9.14’te görülmektedir. EXIT komutu kullanılmayan (a) örneğinde, P1

ve P2 noktalarına yapılan PTP hareketi sürekli tekrar edilmektedir. EXIT komutu kullanılan (b) örneğinde ise; Input

7 girişi TRUE olarak anahtarlanıncaya kadar P1 ve P2 noktalarına yapılan PTP hareketi sürekli tekrar edilmektedir.

Şekil 9.14. LOOP sonsuz çevrim kontrol komutu

LOOP

PTP P1 Vel=50% PDAT1

PTP P2 Vel=50% PDAT2

ENDLOOP

LOOP

PTP P1 Vel=50% PDAT1

PTP P2 Vel=50% PDAT2

IF $IN[7]==TRUE THEN

EXIT

ENDIF

ENDLOOP

(a) (b)

ENDLOOP

Çevrim Bloğu

LOOP

Page 23: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

233

Sayaç Çevrimi (FOR)

FOR Sayaç Çevrimi sayesinde, bir program bloğu tanımlanan sayı kadar tekrarlanabilmektedir. FOR çevriminde

komutların tekrar edilme sayısı bir sayaç değişkeni (iteratör) yardımıyla kontrol edilmektedir. Şekil 9.15’te FOR

sayaç çevrim komutu kullanımı anlatılmaktadır. Burada i iteratör değeri 1 başlayıp n değerini alana kadar her i

değeri için ilgili program bloğu çalıştırılmaktadır.

FOR komutunun kullanılmasına yönelik program kodları incelendiğinde;

(a) örneğinde verilen FOR çevriminde, i değişkeninin 1’den 5’e kadar alacağı 1, 2, 3, 4, 5 değerleri için

çalıştırılacaktır. Çevrimin her turunda i ile temsil edilen çıkış TRUE değerine anahtarlanmaktadır.

(b) örneğinde verilen FOR çevriminde, STEP -2 kullanımı sayesinde i değişkeninin 10’dan 4’e kadar

alacağı 10, 8, 6, 4 değerleri için çalıştırılacaktır. Çevrimin her turunda i ile temsil edilen çıkış TRUE

değerine anahtarlanmaktadır.

Şekil 9.15. FOR sayaç çevrim kontrol komutu

DECL INT i

FOR i=1 TO 5

$OUT[i] = TRUE

ENDFOR

DECL INT i

FOR i=10 TO 4 STEP -2

$OUT[i] = TRUE

ENDFOR

(a) (b)

Çevrim Bloğu

ENDFOR

FOR i = 1 TO n

Page 24: 9. Bölüm - Hitit

ERPE-METEG

234

Dışlayıcı Çevrim (WHILE)

WHILE dışlayıcı (önceden kontrollü) çevrimler, şart ifadesi TRUE sonuç verdiği sürece program bloğunun

çalıştırıldığı çevrimlerdir. WHILE çevrimlerinde şart kontrolü çevrim başında yapılmaktadır. Dolayısıyla şart

sağlanmıyorsa çevrim içerisindeki komutlar hiç çalıştırılmayabilir. WHILE komutunun kullanılmasına yönelik

program kodları Şekil 9.16’da görülmektedir. Burada IN 22 girişi TRUE olduğu sürece, ilgili program bloğundaki

komutlar çalıştırılmaktadır.

Şekil 9.16. WHILE dışlayıcı çevrim kontrol komutu

WHILE $IN[22]==TRUE

$OUT[17]=TRUE

$OUT[18]=FALSE

PTP HOME

ENDWHILE

Çevrim Bloğu

ENDWHILE

TRUE

FALSE WHILE …

Page 25: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

235

Dışlayıcı Olmayan Çevrimler (REPEAT / UNTIL)

REPEAT / UNTIL dışlayıcı olmayan (sonradan kontrollü) çevrimlerde şart kontrolü çevrim sonunda yapılmaktadır.

Bundan dolayı bu çevrimlerde, program bloğu bir kez çalıştırıldıktan sonra şart kontrolü yapılmaktadır. Dolayısıyla

REPEAT / UNTIL dışlayıcı olmayan (sonradan kontrollü) çevrimler şart ne olursa olsun en az bir kez

çalıştırılmaktadır. Çevrim sonundaki şart ifadesi TRUE sonuç verene kadar program bloğu yeniden çalıştırılır.

REPEAT / UNTIL komutunun kullanılmasına yönelik program kodları Şekil 9.17’de görülmektedir. Burada IN 22

girişi TRUE olana kadar, ilgili program bloğundaki komutlar çalıştırılmaktadır.

Şekil 9.17. REPEAT/UNTIL dışlayıcı olmayan çevrim kontrol komutu

REPEAT

$OUT[17]= TRUE

$OUT[18]= FALSE

PTP HOME

UNTIL $IN[22]== TRUE

Çevrim Bloğu

TRUE

FALSE UNTIL

REPEAT

Page 26: 9. Bölüm - Hitit

ERPE-METEG

236

9.6. Altprogramlar

Altprogram, yapısal programlama dillerinde, konu ile ilgili program satırlarının bir arada bir blok içerisinde

yazılmasıdır. Tüm komutların tek program içerisinde yazılması yerine belirli süreçlerin, hesapların veya işlemlerin

ayrı ayrı altprogramlar halinde yazılması, geliştirilen programın daha basit ve kullanılışlı olmasını ile anlaşılırlığının

artırılmasını sağlamaktadır.

Yapısal programlama gereği Altprogram kullanımları program geliştirmede çeşitli avantajlar sağlamaktadır:

Ana programın kısalması ile birlikte anlaşılırlık artmaktadır.

Altprogramların program içerinde birden fazla kullanılması ile birlikte genel program boyu kısalmaktadır.

Programlama işi kolaylaşmaktadır.

Altprogramlar iki tipte tanımlanabilmektedir:

Lokal (Local) Altprogramlar

Genel (Global) Altprogramlar

9.6.1. Lokal Altprogramlar

Lokal Altprogramlar, bir program içerisinde tanımlanmış program bölümleridir. Şekil 9.18’de Ana_Prg() içerisinde

Alt_Prg1() ve Alt_Prg2() olmak üzere 2 tane altprogram tanımı görülmektedir.

Lokal Altprogram kullanılmasına ilişkin temel kurallar şunlardır:

Bir program modülündeki SRC dosyası en fazla 255 Lokal Altprogramdan oluşabilmektedir.

En çok 20 Lokal Altprogram iç içe tanımlanabilmektedir.

Lokal Altprogramlar defalarca çağrılabilmektedir.

Lokal Altprogram adı sonrasında “( )” parantezleri kullanılmalıdır.

Lokal Altprogram yürütüldükten sonra, çağrıldığı satırdan sonraki satıra bir geri dönüş gerçekleşir.

Lokal Altprogramın kendisine ait SRC ve DAT dosyası mevcut değildir. Bu nedenle Lokal Altprogram

içerisinde tanımlanan Nokta koordinatları, Ana Programa ait DAT dosyasında kaydedilmektedir.

Şekil 9.18. Lokal Alt Program Tanımlama

DEF Ana_Prg( )

END

________________

DEF Alt_Prg1( )

END

________________

DEF Alt_Prg2( )

END

Page 27: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

237

9.6.2. Global Altprogramlar

Mevcut SRC ve DAT dosyası olan tüm bağımsız robot programları gerçekte birer Global Altprogramdır. Bu

doğrultuda bağımsız bir robot programı, başka bağımsız bir robot programı içerisinde Global Altprogram olarak

kullanılabilmektedir. Şekil 9.19’da Rob_Prg3() robot programı içerisinde Rob_Prg1() ve Rob_Prg2() olmak üzere 2

tane robot programı altprogram olarak kullanılmaktadır.

Şekil 9.19. Global Alt Program Tanımlama

Global Altprogram kullanılmasına ilişkin temel kurallar şunlardır:

Global Altprogramların kendilerine ait SRC ve DAT dosyaları mevcuttur.

Global Altprogramlar birkaç kez çağrılabilmektedir.

En fazla 20 Global Altprogram iç içe tanımlanabilmektedir.

Her bir programın Nokta koordinatları kendilerine ait DAT dosyasında kaydedilmektedir ve sadece ilgili

programda kullanılabilmektedir.

Global Altprogram adı sonrasında “( )” parantezleri kullanılmalıdır.

Global Altprogram yürütüldükten sonra, çağrıldığı Ana Programın ilgili satırından sonraki satıra bir geri

dönüş gerçekleşir.

9.6.3. Altprogramların Sonlandırılması

RETURN komutu kullanılmak suretiyle bir altprogram sonlandırılabilmektedir. Bu durumda program akışı

altprogramı çağırmış olan program parçasına geri döner. Şekil 9.20’de RETURN komutu kullanılarak belirlenen

şarta bağlı olarak altprogramın sonlandırılması görülmektedir.

Şekil 9.20. Return ile Altprogram sonlandırma

DEF Rob_Prg1( )

END

DEF Rob_Prg2( )

END

DEF Rob_Prg3( )

Rob_Prg1()

Rob_Prg2()

END

DEF Ana_Prg( )

; Bu ana programdır

...

Lokal_Prg( )

...

END

DEF Lokal_Prg( )

...

IF $IN[12]==FALSE THEN

RETURN ; Ana programa geri dönüş

ENDIF

...

END

Page 28: 9. Bölüm - Hitit

ERPE-METEG

238

9.6.4. Altprogramlarda Parametre Kullanımı

Robot programları geliştirilirken Altprogramlara parametrik değer gönderimi mümkündür. Tablo 9.10’da görüldüğü

gibi Parametre aktarımında IN ve OUT olmak üzere 2 farklı tanım kullanılarak, Değer veya Referans olarak

kullanım mümkün olmaktadır. Parametre sayısının birden fazla olması durumunda ise, tanım sırasına dikkat

edilmesi gerekmektedir.

Tablo 9.10. Altprogram Parametre Aktarma Türleri

Parametre Aktarma Türü Açıklama

IN “Call by Value”

Değişken değeri sadece Ana Programdan Alt Programa aktarılır.

OUT

“Call by Reference”

Değişken değeri önce Ana Programdan Alt Programa aktarılır. Alt Program

sonlandığında değişken değeri Ana Programa geri aktarılır.

Şekil 9.21’de altprogramlarda parametre aktarımına yönelik kodlama formatı görülmektedir.

Şekil 9.21. Altprogramda Parametre Aktarımı

DEF Ana_Prg()

Hesapla(x, y)

END

_________________________

DEF Hesapla(a:IN, b:OUT)

END

Page 29: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

239

9.6.5. Altprogramların Fonksiyon Olarak Kullanılması

Altprogramların geriye değer döndürmesi istenildiğinde, Fonksiyon olarak kullanılmaları da mümkündür.

Fonksiyonlar, ana program ya da başka bir altprogram tarafından çağrılabilen, RETURN ile geriye tek bir değer

döndüren ve ayrıca bir veri tipine sahip olan altprogramlardır. Ancak tanımlanmasına bağlı olarak geriye değer

döndürüp döndürmeyeceği belirlenebilmektedir. Fonksiyondan geri dönen değer, fonksiyonun çağrıldığı ve adının

geçtiği yere getirilir. Bu nedenle fonksiyon adının bir ifade içerisinde kullanılması gereklidir. Şekil 9.22’de bir

fonksiyon tanımı ve çağrılmasına yönelik kodlar verilmiştir.

Şekil 9.22. Altprogramların Fonksiyon olarak kullanılması

DEF Ana_Prg()

DECL REAL Konum, Veri

Konum = Hesap(Veri)

END

DEFFCT REAL Hesap(Veri:IN)

DECL REAL Konum, Veri

RETURN(Konum) END

Page 30: 9. Bölüm - Hitit

ERPE-METEG

240

9.7. Uygulamalar

No Konu

U

9-1 KRL Dilinde Hareket Komutları Uygulaması

(PTP, LIN ve CIRC)

Endüstriyel Robot kolunun PA noktasından PB noktasına gitmesini PTP, LIN ve CIRC hareket komutlarını

kullanarak programlayınız.

Uyarılar:

1. Hareket komutlarını manuel olarak kodlamak için Kullanıcı Grubu Expert (Uzman) olmalıdır.

2. Endüstriyel Robotu T1 çalışma moduna alınız.

Açılamalar:

1. PTP, LIN ve CIRC komutlarını kullanarak ilgili programı yazınız. PTP hareket komutu için %50, LIN

ve CIRC komutları için 0.5m/sn hız verilerini kullanınız.

2. Programı T1 modunda Test ediniz.

3. Gerekli güvenlik tedbirlerini aldıktan sonra programı AUT çalışma modunda deneyiniz.

4. CIRC komutunda kullanılan CA(Circle Angle) değeri ve işaretine göre hareket miktarı ve yönünün

değiştiğini gözlemleyiniz.

Page 31: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

241

Uygulama Programı

DEF s_Motion_KRL( ) DECL E6POS PA, Paux, PB

INI

; HOME Pozisyonuna Git ------------------

PTP HOME Vel= 100 % DEFAULT

; PA Baslagic Noktasi (ORIGIN) -------------

PA.x = 400

PA.y = -100

PA.z = 700

; Paux Yardimci Nokta (AUXILIARY) ------------

Paux.x = 400

Paux.y = 0

Paux.z = 800

; PB Son Nokta (END) -----------------------

PB.x = 400

PB.y = 100

PB.z = 700

; Uygulama - A

PTP PA ;Origine Git (PTP Aksa Özgü Hareket Komutu)

LIN PB ;LIN Rota Hareket Komutu

; Uygulama - B

PTP PA ;Origine Git

CIRC Paux, PB, CA 90 ;CIRC Rota Hareket Komutu (CA:Circle Angle)

; Uygulama - C

PTP Po ;Origine Git

CIRC Paux, PB, CA -90 ;CIRC Rota Hareket Komutu (CA:Circle Angle)

; Uygulama - D

PTP Po ;Origine Git

CIRC Paux, PB, CA 360 ;CIRC Rota Hareket Komutu (CA:Circle Angle)

; HOME Pozisyonuna Git ------------------

PTP HOME Vel= 100 % DEFAULT

END

Page 32: 9. Bölüm - Hitit

ERPE-METEG

242

No Konu

U

9-2

Endüstriyel Robot Programında

Malzeme Ayrıştırma Uygulaması

(Sensör/Gripper)

Yukarıda görüldüğü gibi; Robotun P1 noktasından aldığı malzemeyi, ‘Siyah/Siyah Değil’ olma durumuna göre

P2 (Kirli-Siyah) ve P3(Temiz-Siyah Değil) farklı noktalara götürüp bırakması ve sonra PHOME konumuna

gitmesi sağlanacaktır.

Uygulama Görüntüleri

Kırmızı (Temiz) Kapak için Uygulama

Siyah (Kirli) Kapak için Uygulama

Page 33: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

243

Akış Şeması

Başla

Bitir

P1 - Noktasına Git

Malzeme

Siyah (Kirli) mı?

Malzeme Rengini Öğren

P2 (Kirli) - Noktasına Git P3 (Temiz) - Noktasına Git

Malzemeyi Bırak

(Gripper Aç)

P4 (HOME) - Noktasına Git

Evet

Malzemeyi Al

(Gripper Kapat)

Hayır

Page 34: 9. Bölüm - Hitit

ERPE-METEG

244

Uygulama Programı

DEF s_Kapak_Ayristir( )

; Lokal Değişken Tanımları -------------------------------------

DECL BOOL KONTROL ; Renk Kontrolü

DECL E6POS P ; Koordinat

INI

; HOME Pozisyonuna Git -----------------------------------------

PTP HOME Vel= 50 % DEFAULT

;Referans Noktasına Git ----------------------------------------

P.X = 277

P.Y = 327

P.Z = 474

P.A = -130

P.B = 0

P.C = 179

PTP P

; Sensörle Kapağa Yaklaş ---------------------------------------

P.X = P.X + 30

LIN P

; Renk Bilgisini Öğren -----------------------------------------

KONTROL=$IN[1]

; Kapaktan Uzaklaş ---------------------------------------------

P.X = P.X – 30

LIN P

; Kapak üstü mesafeye çık --------------------------------------

P.Z = P.Z + 30

LIN P

; Kapak alma üst pozisyonuna git -------------------------------

P.X = P.X + 113

P.Y = P.Y + 30

LIN P

;Gripper AÇ ----------------------------------------------------

SET GRP 1 State=OPN GDAT3

; Kapak alma alt pozisyonuna git -------------------------------

P.Z = P.Z - 26

LIN P

;Gripper KAPAT -------------------------------------------------

SET GRP 1 State=CLO GDAT4

; Yeniden Kapak alma üst pozisyonuna git -----------------------

P.Z = P.Z + 26

LIN P

; Renk Durumuna Göre Lokal Altprogram Seç ----------------------

IF KONTROL THEN ; Temiz Bırak PTP Ptemiz Vel=50 % PDAT1 Tool[0] Base[0]

SET GRP 1 State=OPN GDAT1

ELSE ; Kirli Bırak

PTP Pkirli Vel=50 % PDAT2 Tool[0] Base[0]

SET GRP 1 State=OPN GDAT2

ENDIF

; HOME Pozisyonuna Git --------------------------------------

PTP HOME Vel= 50 % DEFAULT

END

Page 35: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

245

No Konu

U

9-3

Karar ve Çevrim Kontrol Komutlarının

Robot Programlarında Kullanılması

(Çevrimsel Kapak Ayrıştırma)

Robotun Platform üzerinde P1, P2, P3 ve P4 noktalarında bulunan 4 adet Kırmızı ve Siyah renkli Kapağa

Koordinat Öteleme İşlemi yaparak sırasıyla erişip renklerini ayrıştırarak aldığı kapağı, ‘Siyah/Siyah Değil’

olma durumuna göre Pkirli (Kirli-Siyah) ve Ptemiz (Temiz-Siyah Değil) farklı noktalara götürüp bırakması

ve sonra PHOME konumuna gitmesi sağlanacaktır.

Açıklamalar:

1. Bu uygulama için FOR çevrimi ve Koordinat Öteleme İşlemi kullanılacaktır.

2. Uygulama programına göre kapaklar arasında 87 mm mesafe vardır.

3. Renk Belirleme Sensörü, Gripper üzerinde olup, 1 numaralı INPUT’a bağlıdır. ‘Siyah ve Diğer Renk’

olarak ayırabilmektedir.

Siyah Renk ise FALSE $IN[1]

Değilse ise TRUE $IN[1]

Page 36: 9. Bölüm - Hitit

ERPE-METEG

246

Uygulama Görüntüleri

Page 37: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

247

Uygulama Programı

DEF s_Cevrimsel_Kapak_Ayristir( )

; Lokal Değişken Tanımları -------------------------------------

DECL INT TUR ; Çevrim Iteratörü

DECL BOOL KONTROL ; Renk Kontrolü

DECL E6POS P

INI

; HOME Pozisyonuna Git -----------------------------------------

PTP HOME Vel= 50 % DEFAULT

FOR TUR=1 TO 4

P.X = 277 ;Referans Noktasına Git

P.Y = 327 - (TUR - 1) * 87 ; Kapaklararası Mesafe:87 mm

P.Z = 474

P.A = -130

P.B = 0

P.C = 179

PTP P

P.X = P.X + 30 ; Sensörle Kapağa Yaklaş

LIN P

KONTROL=$IN[1] ; Renk Bilgisini Öğren

P.X = P.X – 30 ; Kapaktan Uzaklaş

LIN P

P.Z = P.Z + 30 ; Kapak üstü mesafeye çık

LIN P

P.X = P.X + 113 ; Kapak alma üst pozisyonuna git

P.Y = P.Y + 30

LIN P

;Gripper AÇ ------------------------------------

SET GRP 1 State=OPN GDAT3

P.Z = P.Z - 26 ; Kapak alma alt pozisyonuna git

LIN P

;Gripper KAPAT ---------------------------------

SET GRP 1 State=CLO GDAT4

P.Z = P.Z + 26 ; Yeniden Kapak alma üst pozisyonuna git

LIN P

IF KONTROL THEN ; Renk Durumuna Göre Lokal Altprogram Seç

TEMIZ_BIRAK()

ELSE

KIRLI_BIRAK()

ENDIF

;------------------------------------------------------------

ENDFOR

; HOME Pozisyonuna Git ------------------------------------------

PTP HOME Vel= 50 % DEFAULT

END

DEF TEMIZ_BIRAK() PTP Ptemiz Vel=50 % PDAT1 Tool[0] Base[0]

SET GRP 1 State=OPN GDAT1

PTP HOME Vel=100 % DEFAULT

END

DEF KIRLI_BIRAK() PTP Pkirli Vel=50 % PDAT2 Tool[0] Base[0]

SET GRP 1 State=OPN GDAT2

PTP HOME Vel=100 % DEFAULT

END

Page 38: 9. Bölüm - Hitit

ERPE-METEG

248

No Konu

U

9-4

Çevrim Kontrol Komutlarının

Robot Programlarında Kullanılması

(Sarmal Labirent Çizimi)

Yukarıda görüldüğü gibi; Robotun kağıt seviyesine inerek Sarmal Labirent çizmesi ve sonrasında PHOME

konumuna gitmesi sağlanacaktır.

Akış Şeması

Başla

Bitir

Yazma Noktasına Git

Sarmal Labirent Çiz

FOR X = 1 TO 10

P.X = P.X + TUR * 10 - 5

LIN NOKTA

P.Y = P.Y + TUR * 10 - 5

LIN NOKTA

P.X = P.X + TUR * (-10)

LIN NOKTA

P.Y = P.Y + TUR * (-10)

LIN NOKTA

ENDFOR

Kalemi Yukarı Kaldır

(Yazma PASİF)

P.Z = P.Z + 10

PHOME - Noktasına Git

Kalemi Aşağı İndir

(Yazma AKTİF)

P.Z = P.Z - 10

Page 39: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

249

Uygulama Programı

DEF s_Labirent( )

; Lokal Değişken Tanımları ----------------

DECL INT X, Y, XO, YO, ZO

DECL E6POS P

INI

; HOME Pozisyonuna Git --------------------

PTP HOME Vel= 50 % DEFAULT

; Orijin Noktası Belirle ------------------

XO = 400

YO = 200

ZO = 364 ; Yazma Temas Değeri

; Orijin Noktasına Git --------------------

P.X = XO

P.Y = YO

P.Z = ZO + 10

PTP P

; Kalemi Aşağı İndir (YAZMA AKTİF)---------

P.Z = P.Z - 10

LIN P

; Sarmal Labirent Çizilir -----------------

FOR X=1 TO 10 P.X = P.X + TUR * 10 - 5

LIN NOKTA

P.Y = P.Y + TUR * 10 - 5

LIN NOKTA

P.X = P.X + TUR * (-10)

LIN NOKTA

P.Y = P.Y + TUR * (-10)

LIN NOKTA

ENDFOR

; Kalemi Yukarı Kaldır (YAZMA PASİF) ------

P.Z = P.Z + 10

LIN P

; HOME Pozisyonuna Git --------------------

PTP HOME Vel= 50 % DEFAULT

END

Page 40: 9. Bölüm - Hitit

ERPE-METEG

250

No Konu

U

9-5

Standart Fonksiyonlarla

Trigonometrik Eğrilerin Çizilmesi

(Sinüs Eğrisi)

Yukarıda görüldüğü gibi; Robotun kağıt seviyesine inerek Sinüs Eğrisini çizmesi ve sonrasında PHOME

konumuna gitmesi sağlanacaktır.

Akış Şeması

Başla

Bitir

Yazma Noktasına Git

Sinüs Eğrisi Çiz

FOR X=1 TO 360

Y = SIN(X)* 100

P.X = XO + X

P.Y = YO + Y

LIN P C_DIS

ENDFOR

Kalemi Yukarı Kaldır

(Yazma PASİF)

P.Z = P.Z + 10

PHOME - Noktasına Git

Kalemi Aşağı İndir

(Yazma AKTİF)

P.Z = P.Z - 10

Page 41: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

251

Uygulama Programı

DEF s_Sinus_Egrisi()

; Lokal Değişken Tanımları ----------------

DECL INT X, Y, XO, YO, ZO

DECL E6POS P

INI

; HOME Pozisyonuna Git --------------------

PTP HOME Vel= 50 % DEFAULT

; Orijin Noktası Belirle ------------------

XO = 250

YO = 200

ZO = 700

; Orijin Noktasına Git --------------------

P.X = XO

P.Y = YO

P.Z = ZO + 100

PTP P

; Kalemi Aşağı İndir (YAZMA AKTİF)---------

P.Z = P.Z - 100

LIN P

; Sinus Eğirisi Çizilir--------------------

FOR X=1 TO 360

Y = SIN(X)* 100 ; Y = COS(X)* 100

P.X = XO + X

P.Y = YO + Y

LIN P C_DIS

ENDFOR

; Kalemi Yukarı Kaldır (YAZMA PASİF) ------

P.Z = P.Z + 100

LIN P

; HOME Pozisyonuna Git --------------------

PTP HOME Vel= 50 % DEFAULT

END

Page 42: 9. Bölüm - Hitit

ERPE-METEG

252

No Konu

U

9-6 Altprogramların Robot Programlarında Kullanılması

Yukarıda görüldüğü gibi; Robotun P1 noktasından aldığı malzemeyi, P2 noktasına götürüp bırakması ve sonra

PHOME konumuna gitmesi sağlanacaktır.

Not: Kapak Taşıma uygulamasını Global ve Lokal Altprogram tanımlarından yararlanarak ayrı ayrı

gerçekleştiriniz.

Uygulama Programı

(1. Çözüm Yöntemi: Global Altprogram Tanımları ile Programlama)

DEF Kapak_Tasi( )

INI

; HOME Pozisyonuna Git ------------------

PTP HOME Vel=50 % DEFAULT

; Sonsuz Cevrim -------------------------

LOOP

Kapak_Al() ; Global Altprogram

Kapak_Birak() ; Global Altprogram

; Cevrim Cikis Kontrolu -----

IF $IN[7] THEN

EXIT

ENDIF

; ---------------------------

ENDLOOP

; HOME Pozisyonuna Git -----------------

PTP HOME Vel=50 % DEFAULT

END

Page 43: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

253

DEF Kapak_Birak( )

INI

; HOME Pozisyonuna Git ------------------

PTP HOME Vel= 50 % DEFAULT

PTP P2 Vel=50 % PDAT1 Tool[0] Base[0]

; Gripper AÇ ------------------

SET GRP 1 State = OPN GDAT1

; HOME Pozisyonuna Git ------------------

PTP HOME Vel= 50 % DEFAULT

END

DEF Kapak_Al( )

INI

; HOME Pozisyonuna Git ------------------

PTP HOME Vel= 50 % DEFAULT

PTP P1a Vel=50 % PDAT1 Tool[0] Base[0]

; Gripper AÇ (Garanti)---------

SET GRP 1 State = OPN GDAT1

; Input 1’i Bekle--------------

WAIT FOR ( IN 1 '' )

LIN P1b Vel=0.5 m/s CPDAT1 Tool[0] Base[0]

; Gripper KAPAT ---------------

SET GRP 1 State = CLO GDAT2

LIN P1c Vel=0.5 m/s CPDAT2 Tool[0] Base[0]

; HOME Pozisyonuna Git ------------------

PTP HOME Vel= 50 % DEFAULT

END

Page 44: 9. Bölüm - Hitit

ERPE-METEG

254

Uygulama Programı

(2. Çözüm Yöntemi: Lokal Altprogram Tanımları ile Programlama)

DEF Kapak_Tasi( )

INI

; HOME Pozisyonuna Git ------------------

PTP HOME Vel=50 % DEFAULT

; Sonsuz Cevrim -------------------------

LOOP

Kapak_Al() ; Lokal Altprogram

Kapak_Birak() ; LOkal Altprogram

; Cevrim Cikis Kontrolu -----

IF $IN[7] THEN

EXIT

ENDIF

; ---------------------------

ENDLOOP

; --------------------------------------

; HOME Pozisyonuna Git -----------------

PTP HOME Vel=50 % DEFAULT

END

DEF Kapak_Al( )

;

; Kapak Alma Lokal Altprogramı buraya yazılır.

;

END

DEF Kapak_Bırak( )

;

; Kapak Bırakma Lokal Altprogramı buraya yazılır.

;

END

Page 45: 9. Bölüm - Hitit

9. Bölüm: KRL ile Robot Programlama

255

9.8. Bölüm Çalışma Soruları

Soru 1. Aşağıdakilerden hangisi KRL dilinde değişken tanımlama işleminde kullanılan Basit Veri Tiplerinden biri

değildir?

a) INT b) FLOAT c) BOOL d) NOT

Soru 2. Aşağıdakilerden hangisi KRL dilinde ÇEVRİM-DÖNGÜ oluşturmada kullanılan komutlardan biri

değildir?

a) LOOP/ENDLOOP b) IF/ENDIF c) FOR/ENDFOR d) WHILE/ENDWHILE

Soru 3. Aşağıdakilerden hangisinde KRL dilinde kullanılan KARAR-KONTROL komutları doğru olarak

verilmiştir?

a) IF ve LOOP b) LOOP ve FOR c) IF ve SWITCH d) IF ve AND

Soru 4. Aşağıda KRL dilinde yazılmış programa göre hangi dijital çıkışlar için TRUE değeri verilmiş olur?

a) 10, 9, 8, 7, 6, 5 b) 10, 8, 6 c) 10, 5 d) Hiçbiri

Soru 5. Aşağıda verilen KRL programı için aşağıdaki ifadelerden hangisi yanlıştır?

a) ABC( ) ana programdır

b) Program *.SRC (Source) uzantılı dosya içerisinde tutulmaktadır

c) XXX( ) Global altprogramdır

d) Programın adı ABC’dir

...

FOR i=10 TO 5 STEP -2

$OUT[i] = TRUE

ENDFOR

...

DEF ABC()

END

________________

DEF XXX()

END

________________

DEF YYY()

END

Page 46: 9. Bölüm - Hitit

ERPE-METEG

256

Soru 6. Aşağıda verilen KRL programına göre, 1 numaralı Input (Giriş) değeri FALSE iken IF/ENDIF komutu

nasıl çalışır?

a) P1 noktasına Doğrusal Rota hareketi ile gidilir

b) P1 noktasına Noktadan Noktaya Aksa özgü hareket ile gidilir.

c) P1 noktasına Dairesel Rota hareketi ile gidilir

d) P1 noktasına gidilmez.

Soru 7. Aşağıdaki KRL kodlarından hangisi Endüstriyel Robot Flanş pozisyonunu mevcut durumuna göre X

ekseni etrafında 30 döndürür?

a) b) c) d)

P.X = P.C + 30

PTP P

P.C = 30

PTP P

P.C = P.C + 30

PTP P

P.X = P.X+ 30

PTP P

Soru 8. Programcı tarafından tanımlanabilen, tüm programlarda geçerli olan ve değerini her zaman koruyan

değişkenlere ne ada verilmektedir?

a) Lokal Değişkenler b) Global Değişkenler c) Sistem Değişkenleri c) Mutlak Değişkenler

Soru 9. Aşağıdakilerden hangisi Sistem Değişkenlerinin özelliklerinden değildir?

a) Sistem değişkenleri her zaman “$” karakteri ile başlar.

b) Sistem değişkenleri her zaman sorgulanabilir.

c) Sistem değişkenleri her zaman geçerlidir ve değerini korur.

c) Sistem değişkenleri programcı tarafından tanımlanabilir.

Soru 10. Aşağıdakilerden hangisi KRL dilinde çevrimden çıkmak için kullanılan komuttur?

a) RETURN b) HALT c) EXIT c) GO

...

IF $IN[1]==FALSE THEN

PTP P1

ELSE

LIN P1

ENDIF

...