CANopen Haberleşme Protokolü
CANopen nedir ? CANopen aileleri ve türevleri nedir ? CANopen Kontrol ve Durum Wordleri nedir ? CANopen nasıl çalışır ? Bu ve benzeri sorulara yanıt aradığımız CANopen Haberleşme Protokolü Yapısı ve Çalışma Sistemi Nedir adlı yazımızla karşınızdayız.
Başlayalım.
CANopen Haberleşmesi
Canopen, otomasyonda kullanılan gömülü sistemler için bir iletişim protokolü ve cihaz profili özelliğidir.
Canopen, G-MAS ve sürücüler tarafından kullanılan bir iletişim protokolüdür. Otomasyon Organizasyonunda CiA-Can tarafından standartlaştırılmıştır.
Her CanOpen cihazında bir nesne sözlüğü vardır – okunabilen ve üzerine yazılabilen desteklenen nesnelerin listesi.
Bu nesneler cihaz davranışını gösterir ve değiştirir.
Temel kurallar
Nesne sözlüğü – Bir cihaz tarafından desteklenen nesnelerin listesi. Bazı nesneler zorunludur ve bazıları isteğe bağlıdır, ancak her nesne standart olarak tanımlanır.
Her nesnenin bir dizini (adresi) ve alt dizini (girişi) vardır.
Örneğin ; 0x608F nesnesinin üç girişi vardır – 0, 1, 2 alt dizinleri.
Obejct girişlerinin veri tipi, varsayılan değer ve erişim tipi (RO RW) standart olarak tanımlanmıştır.
CAN ID – Her sürücünün CAN veriyolunda belirli bir kimliği vardır.
Belirli bir sürücüyü ele almak için, G-MAS’ın Sürücü Kimliğini COB Kimliğine eklemesi gerekir; böylece pratikte G-MAS, ID 1 olan bir sürücüye bir SDO gönderdiğinde, CAN KİMLİĞİ 0x601 ile gönderir. ve CAN ID 0x581’i (Drive 2 için 0X602 ve 0x582) alır ve cevaplar
Sürücü kimlikleri aralığı 1-127.
Fonksiyon Kod Listesi ;
COB | Fonksiyon Kodu | CAN-ID Sonucu |
NMT | 0000B | 0 (0000H ) |
SYNC | 0001B | 128 (080H) |
TIME | 0010B | 256 (100H) |
CAN Sniffer ;
Can bus trafiğini izlemek için kullanılan yazılımsal ve donanımsal yardımcı bir programdır.
Örnek olarak ;
0 00000601 8 23 FF 60 00 00 00 00 00 5606.678380 R
0 00000601 ; COB-ID
Data Bitlerinin sayısı : 8 data bitlerin maksimum rakamıdır.
23… 00 ; data bit mesajlarıdır.
5606…. R : Zaman ; gönderilen mesajın zamanını içerir.
DS301 ve Türevleri
CANopen aygıtları ailelere bölünmüştür.
Her bir aile kendisine ait object dictionary(nesne sözlüğü) ve spesifik tanımlamalara sahiptir.
En temel aile ise ; DS301 ailesidir.
Diğer tüm aileler bu aileden türemişlerdir.
DS301- CAN cihazlarının basit ailesidir.Temel kuralları (PDOs , SDOs vb) içerir ve temel obje sözlüğünü, DS301 aygıtları desteklemektedirler. (örnek obje 0x1000 ‘cihaz tipi’ gibi)
DS301 Ailesi Türevleri ;
DS402 Servo sürücüler ; Örnek olarak Elmo sürücüler için , ek nesne desteğine ihtiyaç duyulmaktadır.Örnek ; pozisyon bilgisi – obje 0x6064
DS401 Giriş Çıkışlar ; Bu cihazlar dijital ya da analog olarak giriş çıkışlara sahiptir ve kullanıcılar çıkışlara yazabilir ya da inputları okuyabilirler.Bu cihazlarda çıkışlara yazabilmek adına nesne desteğine ihtiyaç duyabilmektedirler.
DS406 Enkoderler ; Bu cihazlar önceden tanımlanmış methodlar üzerinden pozisyon bilgisini gönderirler.Kullanıcılar , bu pozisyonları uygulama amaçları için kullanabilirler.
DS402 Profili
DS402 cihazları farklı işlem modlarında çalışabilmektedirler.G-MAS , sürücünün hangi modda çalışmak istediğine karar verebilir.,
NC – G-MAS : Kücük önceden belirli zaman aralıklarında sürücü pozisyonlarını periyodik olarak göndererek sürücü pozisyonunu kontrol eder.Hareket profile G-MAS tarafından ölçülür.
Dağınık—G-MAS : Hareketi sıralı olarak yönetmez , sadece spesifik hareket verileri olan ; Hız , Hızlanma süresi , hedef pozisyon gibi dataları gönderir ve sürücünün çalışmaya hazır hale gelmesini bekler.Hareket profile sürücü tarafından ayarlanır.
DS402 hareket profillerini tanımlar ve bu NC ya da Dağınık şeklinde olabilir.
NMT (Network Management) – Ağ Yönetimi
Sürücüler dahili haberleşme durumuna sahiptir ki böylece G-MAS tarafından kontrol edilebilmektedirler.
Resim üzerinde ağ döngüsünü inceleyebilirsiniz.
NMT için COB ID 0x0 olarak verilmektedir ve bu sebeple de bizim mesajın içerisinde Node ID’yi belirtmemiz gerekmektedir.
NMT mesaj yapısı 2 Byte’dır ve şu şekildedir -> |Komut|Node ID|
G-MAS haberleşme üzerinde bir sürücü algılandığında , makinenin durumuna göre bir NMT (remote nodu başlat) gönderilmesi gerekmektedir.
NMT Komutları ;
1 – Remote nod’u başlat
2 – Remote nod’u durdur
128 – Ön çalışma durumuna gir
129 – Nod’u resettle
130 – Haberleşmeyi resettle
CAN sniffer üzerinden beraber neler olduğuna bakalım ;
Nod , heartbeat ön yükleme mesajını gönderir.
0 00000701 1 00 17508.107790 R
COB ID -> 0x701 sürücü 1’in heartbeat mesajını içerir.
1 ise , data bitidir.
00 ise ön yükleme durumudur.
G-MAS NMT (Remote nod’u başlat) gönderir.
0 00000000 2 01 01 17508.108560 R
NMT’nin COB ID’si -> 0x00000
2 ise data bitleridir.
01 ; Komuttur ve 0x01 -> remote nod’u başlat anlamındadır.
Node ID – 0x01’dir.
Artık sürücü çalışmaya hazır durumdadır.

HEARTBEAT Nedir ?
DS301 HeartBeat protokolünü tanımlar.
Bu protokolde , sürücü HeartBeat mesajlarını G-MAS’a gönderir.
G-MAS HeartBeat’leri her bir cihaz için gözlemler.
Eğer HeartBeat kaybolursa , G-MAS kullanıcıyı uyarmak adına hata verebilir.
Cihazın HeartBeat göndermesi için konfigürasyonu konusunda , G-MAS’ın SDO’yu yüklemesi gerekmektedir ve HeartBeat periyodunu konfigüre etmelidir.
CAN cihazı HeartBeat gönderdiğinde aynı zamanda dahili durumunuda göndermektedir.
HeartBeat COB ID’si ise 0x7000’dür.
Mesaj yapısı ise ; 1 byte’dır.
İlk bit (Most Significant bit) saklıdır ve daima 0’dır.
Diğer yedi bit ise sürücü durumunu içermektedir.
Bu yedi bit için ;
0 – Ön yükleme : Sürücü açıldığında , ilk heartbeat’I gönderir ve bu G-MAS’ın ağ üzerinde ki sürücüyü tanımasını , bulmasını sağlar.
4 – Duruş : Tüm haberleşme durur.Burada sürücü sadece NMT mesajlarını kabul eder ve sadece HeartBeatleri gönderir.
5 – Operasyonel : Sürücü tüm çalışma için tam olarak hazırdır.Burada sürücü tüm tipteki mesajları alır ve gönderir.
6 – Çalışma Öncesi : Sürücü bu durumda iken PDO’ları kabul etmez.
CAN Sniffer üzerinde Heartbeat nasıl görünmektedir ?
00000701 1 05 6877.559220 R
COB ID (00000701) – 0x701 anlamı , sürücü 1 heartbeat mesajı gönderir.
1 – data byte sayısıdır.
State(05) : Sürücü durum 5 olan operasyonel durumdadır.
Acil Durum
Sürücüde bir hata meydana geldiğinde G-MAS acilen durmalıdır.Bunun sebebi ise Acil durum mesajının verilmesi gerektiğindendir.
Sürücü acil durum mesajını üç bilgi alanıyla gönderir ve bunlar arızanın ne olduğu hakkında bize fikir sağlarlar.
|eec|er|msef|
0 1 2 3 7
Eec : Acil durum hata kodu
Er : Hata registerı
Msef : Spesifik üretici hata kodu
G-MAS acil durum mesajını aldıktan sonra sürücü durumunu hata duruşu durumuna değiştirir.
Hata giderildikten sonra da G-MAS NMT reset komutunu yollayabilir ve normal olarak çalışmasına devam edebilir.
Şimdi birlikte sürücüden gelen acil durum mesajına bir bakalım ;
0 00000081 8 10 82 21 00 00 00 00 00 …!… 5703.092070 R
0x81 : 1 numaralı eksenden gelen acil durum mesajının COB ID’sidir.
8 : data bitleridir.
10 82 : Acil durum kodudur.0x8210 ile Hata registerı 0x21’in anlamı konfigüre edilmemiş RPDO’ya erişim girişimidir.
Üretici spesifik hata kodu ise ; 0x 00 00 00 00 00
SDO (Service Data Object ) : Servis Data Objesi
SDO , CAN haberleşmesinde kullanılan en yaygın mesajlardan birisidir ve nesneye direk erişim sağlar.
Kullanıcı , G-MAS üzerinden sürücüye SDO gönderdiğinde , bu SDO şu iki SDO’dan birisi olabilir ;
SDO Yükleme ; Nesne girişini kullanıcı yazmak ister
SDO Çekme ; Kullanıcı girişi okumak ister.
G-MAS yükleme ya da çekme isteğini yollar ve sürücü olumlu yada olumsuz olarak cevap verir.Olumsuz cevap (SDO Abort) , daima neden olumsuz olduğuna dair cevapla birlikte döner.
Olumsuz cevap genel olarak nesne/giriş olmadığında ya da diğer bir spesifik sebepten dolayı geri dönmektedir.
SDO Komut Kodu : Hangi türde SDO olduğuna karar verir (Yükleme / Çekme / Cevap / İstek vb.)
Komu kodu mesaj datasının içerisinde 3 most significant bit içerir.
Yaygın SDO Komut Kodları :
1 – Yükleme isteğini başlatır (G-MAS tarafı)
2 – Çekme isteğini başlatır (G-MAS tarafı)
3 – Yükleme isteğini başlatır (Sürücü tarafı)
2 – Çekme isteğini başlatır (Sürücü tarafı)
4 – SDO Abort(Hata) cevabı
SDO yükleme mesaj yapısında ;
İlk bit komutu (yükleme/çekme/istek/cevap) tutar.
1-3 numaralı bitler index’i tutar ve nesnenin alt indexlerini tutarlar.(multiplexer olarak adlandırılırlar)
4-7 numaralı bitler , G-MAS mesajı icerisinde data bitleridir ve yüklemede kullanılırlar.(tüm bitler kullanılmak durumunda değildirler)
4-7 numaralı bitler , sürücü mesajı içerisinde saklıdırlar ve mesaj olumsuz olduğunda yani başarısız olduğunda neden olduğuna dair ilgili kodu içerisinde tutarlar.
CAN Sniffer log üzerinde SDO yüklemeleri nasıldır ?
Yükleme (download) İsteği (G-MAS Tarafı) :
0 00000601 8 2B 85 60 00 34 12 00 00 12733.838310 R
COB ID 601 , G-MAS sürücüye , bu sürücüde ID = 1 , SDO göndermiştir.
8 ise , gönderilen data bitleridir.
0x2B = 0010 1011 ise komut kodu içerisinde üç most significant bitlerdir.Ve 1 ise yükleme isteğini başlattır.
Index : 0x6085 (obje numarasıdır).Hızlı duruş duruş zamanıdır.
Alt-İndex : 0x0 (giriş numarasıdır)
Data : 0x00 00 12 34
Yükleme İsteği (Sürücü Tarafı ) :
0 00000581 8 60 85 60 00 00 00 00 00 12733.537650 R
CAN ID 581 anlamı , sürücü ID=1 cevap vermektedir.
8 gönderilen data bitlerinin sayısıdır.
0x60 : 0110 0000 , Komut kodu içerisinde ki üç most significant bittir ve komut kodu-3’ün anlamı yükleme cevabını başlattır.
Index : 0x6085 (hızlı duruş duruş zamanı)
Alt-İndex : 0x0
Data : 0x00 00 00 00 – Olumlu cevaplarda daima 0’dır , SDO başarısız olduğunda da olumsuz cevap kodudur.
Not : SDO yüklemelerine benzer olarak , komutun ilk biti ve 1-3 nolu bitleri index ve alt-index olarak mesajlardır.
G-MAS mesajı içerisindeki 4-7 bitleri saklıdır (data gönderimi gerekli değildir).Bu bitler sürücü mesajı içerisinde gerekli dataları tutar.
G-MAS Çekme(Upload) İsteği Gönderimi ;
0 00000602 8 40 85 60 00 00 00 00 00 6912.343960 R
COB ID – 0x602 anlamı , G-MS ID=2 olan sürücüye SDO’yu gönderir.
8 ise , data byte sayısıdır.
0x40 = 0100 0000 – komut kodu 2’dir ve SDO çekme isteği anlamındadır.
Index ; 0x6085 (hızlı duruş duruş zamanıdır)
Alt-Index ; 0x00
Data ; Saklıdır (daima 0)
Sürücü bu duruma nasıl cevap verir ?
0 00000582 8 42 85 60 00 34 12 00 00 6912.344580 R
COB ID – 0x582 anlamı , sürücü ID = 2 olarak cevaplar.
8 ise data bitleridir.
0x42 = 0x0100 0010 ; komut kodu 2’dir ve anlamı SDO çekme cevabıdır.
Index ; 0x6085 (hızlı duruş duruş zamanıdır)
Alt index ; 0x00
Data ; 0x00 00 12 34
SYNC – Senkronizasyon Objesi
Bu mesaj , G-MAS tarafından gönderilen ve senkronizasyonu amaçlayan bir mesajdır.
Sürücü seviyesinde , SYNC mesajları PDO’ları senkronize eder.
TPDO için ; Senkronizasyon yayıma uyar.
RPDO için ; Senkronizasyon , PDO işlemlerine uyar.
G-MAS , SYNC mesajlarını sürücüye göndermek istediği zaman , SYNC gönderme periyotlarında ne olacağını bildirir(SDO yüklemesi tarafından).
G-MAS periyodik olarak SYNC mesajlarını CAN-BUS üzerinden gönderir ve bunu herkes görebilir.
SYNC mesajları tüm sürücülere adreslenmiştir ve bu sebeple de COB ID , sürücü ID’sini içermez.
SYNC mesajları için COB ID , 0x80’dir.
CAN Sniffer log üzerinden SYNC mesajlarının nasıl göründüğüne bir bakalım ;
00000080 0 2484.192160 R
COB ID : 0x80 anlamı ,SYNC mesajı tüm sürücülere gönderilmiştir ve adreslenmiştir.
Data : Datanın herhangi bir önemi yokken , daima 0’dır.
PDO – Proses Data Objesi
SDO’lar çok geneldir ve sadece normal bir SDO mesajı 4 byte içermektedir.
Bu genelliği korumak amacıyla PDO’lar yaratılmıştır.
PDO mesajları sadece datayı içerir.
2 tip PDO bulunmaktadır.
RPDO ; PDO -> G-MAS sürücüye gönderir.
TPDO ; PDO -> Sürücü G-MAS’a gönderir.
G-MAS & Sürücü hangi obje/giriş mesajının gönderildiğini bize nasıl söyler ?
PDO Mapping ; G-MAS DS301 protokolüne göre çeşitli SDO’lar gönderir ve ötesinde ise sürücü hangi methodla PDO’ları göndermek ya da almak istediğini belirler.
Sürücü ya da G-MAS PDO’yu aldığında , sürücü ya da G-MAS hedefini ve amacını bilir.
Örneğin ; Elmo sürücüler ve G-MAS , 4 tip PDO kullanılır.
PDO1 ; Hareket kontrolünde kullanılır.
PDO2 ; binary interpreter mesajları kullanır.
PDO3/4 ; kullanıcı amaçları için saklıdır.G-MAS 15 TPDO haritası ve 5 RPDO haritası sağlar.
Profil Pozisyonunda ; G-MAS haritaları RPDO1’dan hedef pozisyon ve kontrol wordüne kadar varsayılan değerdedir.TPDO1 ise pozisyon anlık değeri ve durum wordüne haritalanmıştır.
CAN Sniffer log üzerinden ;
G-MAS RPDO1’I ID=1 olan sürücüye gönderir.
00000201 6 A0 01 00 06 00 13478.020790 R
Sürücü TPDO1 ile cevaplar ;
00000181 6 A0 86 01 00 31 02 13478.021510 R
Not : Sürücü önceden hangi byte’ların kontrol word ile ilişkili olduğunu ve hangilerinin hedef pozisyon ile ilgili olduğunu , G-MAS’ın PDO gönderilmenden önce PDO haritasını uygulamasından dolayı bilir.
PDO’lar senkron ve asenkron olarak gönderilebilir.
Method ise , PDO haritası tarafından kararlaştırılmaktadır.
RPDO , G-MAS tarafından gönderilebilir.Şu iki durum ;
- Her bir SYNC mesajı ile
- Nesne değerindeki her bir değişimle
TPDO , Sürüde gönderilebilir.Şu üç durum ;
- Her bir SYNC mesajı ile
- Nesne değerindeki her bir değişimle
- Timer değeri tarafından
Kontrol Word :
Kontrol word’ü -> Nesne 0x6040 alt index 0
Bu çok önemli bir nesnedir.G-MAS kontrol word ile sürücü çalışma komutları gönderir.(örnek ;set motor on )
16 bit içerisinde her bir bit bir role sahiptir ve sürücü davranışına etki eder.
Bit 0 (LSB) : Çalış
Bit 1 : Voltaj aktif
Bit 2 : Acil duruş
Bit 3 : Çalışmaya Hazır
Bit 4-6 : Spesifik çalışma modu
Bit 7 : Hata reset
Bit 8 : Duruş(Halt)
Bit 9 : Spesifik çalışma modu
Bit 10 : Saklıdır
Bit 11 -15 (MSB) : üreticiye ait spesifik bitler
Durum Word :
Durum Wordü ; Nesne 0x6041 alt-index 0
Bu da diğer bir önemli nesnedir.Sürücü kendi durumunu bu nesneye yükler.Böylece örnek vermek gerekirse G-MAS sürücü durumunu bilir.
Durum word yapısı ;
Bit 0 (LSB) : Çalışmaya hazır
Bit 1 : Hazır
Bit 2 : Çalışma Etkin
Bit 3 : Hata
Bit 4 : Voltaj etkin
Bit 5 : Hızlı duruş
Bit 6 : Hazır değil
Bit 7 : Uyarı
Bit 8 : üretici özel bit
Bit 9 : remote
Bit 10: Hedefe ulaşıldı
Bit 11 : Dahili limit aktif
Bit 12 – 13 : Spesifik çalışma modu
Bit 14 – 15 : üretici özel bitleri
CANopen Haberleşmesi Sonuç :
Bugün CANopen hakkında birtakım bilgileri sizlere aktarmaya ve mantığını beraber kavramaya çalıştık.Umuyorum faydalı bilgiler edinmişsinizdir.
Yine ilgili konuda örneklerimize ve incelemelerimize devam etmek niyetindeyiz.
Bizi takipte kalın ;
İyi Çalışmalar