Kanca
Çoğu kişi KUKA'nın KRL dilini RAPID'in birebir çevirisi sanır: komut isimleri değişmiş, mantık aynı kalmış. Aslında ayrım daha köklü — KUKA bir programı baştan iki ayrı dosyaya böler, ABB'nin RAPID'i tek bir modülde tutar.
Ne oldu
Bir KRL programı iki dosyadan oluşur:
.src— çalıştırılan mantık: hangi hareket önce, hangi koşul kontrol edilecek..dat— veri bildirimleri: hedef noktaların, çerçevelerin sayısal değerleri.
RAPID'de bir robtarget'ın sayısal değeri de mantığı da aynı modülün
içinde durabilir; KRL bu ikisini kasıtlı olarak ayırır. Pratik sonucu:
bir teknisyen .dat dosyasındaki bir nokta koordinatını, .src
dosyasındaki hareket mantığına dokunmadan güncelleyebilir.
Hareket komutları. RAPID'in MoveJ / MoveL ayrımının KRL'deki
karşılığı PTP ve LIN:
DEF ProgramAdi ( )
PTP P1 VEL=100%
LIN P2 CONT VEL=0.5 M/S
END
PTP (point-to-point), eklem uzayında interpolasyon yapar — RAPID'deki
MoveJ ile aynı fikir, farklı isim. LIN, uç noktayı Kartezyen
uzayda düz bir çizgide götürür — MoveL'in karşılığı. Üçüncü bir
hareket türü CIRC (dairesel), RAPID'deki MoveC'ye karşılık gelir.
Nokta sonunda durup durmama, RAPID'deki fine / zXX (bölge/zone
verisi) ikilisine karşılık gelir — ama KRL bunu ters yönden kurar.
KRL'de tam durma varsayılandır: hiçbir şey yazmazsan robot o noktada
durur. Yumuşak geçiş istiyorsan CONT işaretini eklersin; yaklaşmanın ne
kadar geniş olacağı ayrıca $APO sistem değişkeniyle (C_DIS mesafe,
C_PTP eklem yüzdesi gibi ölçütlerle) belirlenir.
Bu, dikkat edilmesi gereken bir fark: ABB ve FANUC tarafında tam durmanın
fine / FINE diye açık bir adı var, KRL'de ise adı olan şey
yaklaşmadır (CONT), durmanın değil. Aynı davranışı iki dil zıt
varsayılanlarla ifade ediyor.
$BASE ve $TOOL. RAPID'de bir hedefi hangi çerçeveye göre
okuyacağını wobj ile, hangi uç aletle çalıştığını tool0 gibi bir
araç tanımıyla belirtiyordun. KRL'de bunlar ayrı komut argümanları
değil, FRAME tipinde birer sistem değişkeni: $BASE aktif iş
parçası çerçevesini, $TOOL aktif alet merkez noktasını (TCP) tutar.
Bir hareket komutu çalışmadan önce bu iki değişkenin doğru
ayarlanmış olması gerekir — RAPID'de bunu her MoveJ/MoveL
satırında \WObj:= ile açıkça yazarken, KRL'de bu örtük bir global
durumdur.
Gerçek dünyada
Bu örtük/açık farkı somut bir riske dönüşür: KRL'de $BASE veya
$TOOL bir önceki programdan yanlış değerde kalmışsa, sonraki hareket
komutu hiçbir hata vermeden YANLIŞ bir çerçeveye göre çalışır. RAPID'de
her hareket satırının kendi \WObj:= argümanını taşıması bu hatayı
satır bazında görünür kılar. İki tasarımın da kendi ödünleşimi var:
KRL daha az tekrar yazım ister, RAPID her satırda niyeti daha açık
gösterir.
Dene
Sonraki
Sıradaki ders, hiç kendi diline sahip olmayan bir robotu gösteriyor: Mecademic, RAPID veya KRL gibi bir dosya biçimi yerine düz metin komutlarını doğrudan bir ağ soketinden okuyor.