J1939 Nedir? SAE J1939 Protokolü, PGN, SPN ve Araç Verisi Okuma

SAE J1939, kamyon, otobüs, tarım ve iş makinelerindeki motor, şanzıman, fren ve gösterge gibi kontrol ünitelerinin CAN hattı üzerinde konuştuğu ortak dildir. CAN yalnızca mesajı taşır; hangi mesajın motor devri, hangisinin araç hızı olduğunu ve verinin nasıl ölçekleneceğini J1939 tanımlar. Bu sayede farklı üreticilerin cihazları aynı hatta birbirini anlar. Bu rehberde 29 bitlik kimliğin yapısını, PGN ve SPN kavramlarını, sık kullanılan mesajları, adres almayı, arıza kodlarını ve araç verisini HMI ekranda göstermeyi anlatıyoruz. CAN’in temelleri için önce CANBus Nedir? rehberimize bakabilirsiniz.

J1939 nedir?

J1939, Amerikan otomotiv mühendisleri birliği SAE’nin ağır ticari araçlar ve makineler için yayımladığı bir üst protokoldür. Fiziksel taşıyıcı olarak CAN 2.0B kullanır: 29 bitlik genişletilmiş kimlik, çoğunlukla 250 kbit/s (J1939-11) ve yeni araçlarda 500 kbit/s (J1939-14) hat hızı.

Standart birkaç bölümden oluşur:

Otomobillerde kullanılan OBD-II / UDS’ten farklı olarak J1939, yalnızca arıza teşhisi için değil araçtaki tüm kontrol ünitelerinin sürekli haberleşmesi için tasarlanmıştır. Gösterge paneli, motor devrini teşhis cihazı gibi sorarak değil, motor beyninin düzenli olarak yayınladığı mesajı dinleyerek öğrenir.

29 bitlik kimliğin yapısı

29 bitlik J1939 kimliğinin alanları: 3 bit öncelik, 1 bit EDP, 1 bit DP, 8 bit PDU Format, 8 bit PDU Specific ve 8 bit kaynak adresi; örnek 0x0CF0040029 bitlik CAN kimliği (bit 28 → 0)Örnek: 0x0CF00400Öncelik3 bit28263R250DP240PDU Format (PF)8 bit23160xF0PDU Specific (PS)8 bit1580x04Kaynak adresi (SA)8 bit700x00PGN = 0xF004 (61444) · EEC1, motor kontrolüen yüksek 0, en düşük 70x00 = motorPF < 240 (PDU1): PS hedef adresidir · PF ≥ 240 (PDU2): PS grup uzantısıdır, mesaj herkese yayınlanır
Öncelik, PGN ve kaynak adresi 29 bitlik CAN kimliğine yerleştirilir. Kimliği okurken önce DP ve PF’ye, sonra PS’ye bakılır.

J1939 mesajının kimliği üç ana parçadan oluşur: öncelik, PGN ve kaynak adresi. Öncelik 0 ile 7 arasındadır; 0 en yüksektir. Motor kontrol mesajı EEC1 öncelik 3 ile, çoğu durum mesajı öncelik 6 ile gönderilir. CAN’de küçük kimlik hattı kazandığından öncelikli mesaj hat yoğunken bile gecikmez.

PGN (Parameter Group Number), DP, PF ve PS alanlarından oluşan 18 bitlik numaradır ve mesajın ne olduğunu söyler. PF alanının değeri iki mesaj türünü ayırır:

Örnekteki 0x0CF00400 kimliği şöyle okunur: 0x0C → öncelik 3; 0xF0 ve 0x04 → PGN 0xF004 (61444, EEC1); 0x00 → kaynak adresi 0, yani motor. Aynı mesajı gösterge paneli de alır, teşhis cihazı da; kaynak adresi mesajı kimin gönderdiğini belirtir, kimin alacağını değil.

PGN ve SPN: mesaj ve parametre

Bir PGN en çok 8 baytlık bir mesajdır ve içinde birden fazla parametre taşır. Her parametrenin bir SPN’si (Suspect Parameter Number) vardır. J1939-71 her SPN için şunları tanımlar:

Örnek: motor devri SPN 190, EEC1 mesajının 4. ve 5. baytındadır, 0,125 rpm/bit çözünürlüğündedir. Baytlar 4 = 0xE0, 5 = 0x2E geldiyse ham değer 0x2EE0 = 12 000, motor devri 12 000 × 0,125 = 1 500 rpm’dir.

Çok baytlı değerler düşük bayt önce (little-endian) gönderilir; 4. bayt düşük, 5. bayt yüksek bayttır. Bir parametre için veri yoksa tüm bitler 1 gönderilir (0xFF, 0xFFFF); 0xFE hata anlamına gelir. Bu değerler gerçek ölçüm gibi işlenmemelidir.

Sık kullanılan mesajlar

Aşağıdaki mesajlar hemen her ağır araçta bulunur; gösterge paneli ve telematik cihazları en çok bunları okur:

PGNAdParametre (SPN)Yeri ve ölçeği
61444 (0xF004)EEC1Motor devri (190)4–5. bayt · 0,125 rpm/bit
65262 (0xFEEE)ET1Soğutma suyu sıcaklığı (110)1. bayt · 1 °C/bit, −40 °C ofset
65265 (0xFEF1)CCVSAraç hızı (84)2–3. bayt · 1/256 km/h per bit
65276 (0xFEFC)Dash DisplayYakıt seviyesi (96)2. bayt · %0,4/bit
65263 (0xFEEF)EFL/P1Motor yağ basıncı (100)4. bayt · 4 kPa/bit
65271 (0xFEF7)VEP1Akü gerilimi (168)7–8. bayt · 0,05 V/bit
65253 (0xFEE5)HOURSToplam motor saati (247)1–4. bayt · 0,05 h/bit
65226 (0xFECA)DM1Aktif arıza kodlarıLamba durumu + 4 baytlık DTC’ler

Soğutma suyu örneği: ET1’in 1. baytı 0x7E = 126 geldiyse sıcaklık 126 − 40 = 86 °C’dir. Ofseti unutmak en sık yapılan hesap hatasıdır.

Mesajların gönderim aralıkları da standarttır: EEC1 10–20 ms’de bir, CCVS 100 ms’de bir, ET1 ve Dash Display saniyede bir yayınlanır. Bir cihaz bu mesajları ne kadar sık okuyacağına kendisi karar verir.

Yayın ve Request: veri nasıl istenir?

J1939’da veri iki yolla alınır. Çoğu mesaj düzenli aralıklarla yayınlanır; dinleyen cihaz hiçbir şey göndermeden veriyi alır. Yayınlanmayan ya da nadiren gönderilen bir PGN ise Request mesajıyla (PGN 59904, 0xEA00) istenir: 3 baytlık veri alanına istenen PGN yazılır, hedef adres ilgili cihaz ya da 255’tir.

Uzak I/O modüllerinde de aynı iki yaklaşım görülür: SmartIO CANLink stream modunda durumlarını seçilen aralıkta yayınlar, sorgu–cevap modunda ise yalnızca Request geldiğinde yanıt verir.

Address Claim: cihazlar adresini nasıl alır?

Her J1939 cihazının 0–253 arasında bir kaynak adresi olmalıdır; 254 “adres yok”, 255 “herkes” anlamındadır. Motor (0), şanzıman (3), fren (11), gösterge paneli (23) ve üst yapı kontrolcüsü (33) gibi temel cihazların adresleri standartta sabittir; 128–247 aralığı dinamik olarak alınabilen adreslerdir.

Cihaz hatta katılırken Address Claim mesajı (PGN 60928, 0xEE00) ile “bu adres benim” der. Mesajın 8 baytlık veri alanında cihazın NAME’i taşınır: üretici kodu, cihaz işlevi, sektör grubu ve seri numarası gibi alanlardan oluşan 64 bitlik kimlik.

Üreticiye özel mesajlar: Proprietary A ve B

Standartta tanımlı olmayan veriler için J1939 iki alan ayırır. Proprietary A (PGN 61184, 0xEF00) PDU1 türündedir ve belirli bir cihaza gönderilir; Proprietary B (PGN 65280–65535, 0xFF00–0xFFFF) PDU2 türündedir ve yayınlanır. İçeriğini üretici belirler.

Uzak I/O modülleri, üst yapı kontrolcüleri ve özel sensörler verilerini çoğunlukla Proprietary B ile gönderir. Örneğin bir I/O modülü dijital girişlerini 0xFF10, analog girişlerini 0xFF12 PGN’iyle yayınlayabilir; ana cihaz çıkış komutlarını Proprietary A ile ya da ayrı bir Proprietary B PGN’iyle gönderir. Aynı hatta birden fazla modül farklı kaynak adresleriyle çalışır; PGN’ler aynı kalabilir çünkü kimliğin içinde kaynak adresi de vardır.

8 bayttan uzun veriler: Transport Protocol

Bir CAN mesajı 8 bayt taşır; bileşen kimliği, yazılım sürümü ya da birden fazla arıza içeren DM1 gibi veriler bundan uzundur. J1939-21 bunları Transport Protocol ile parçalara böler: TP.CM (PGN 60416) mesajı aktarımı duyurur, TP.DT (PGN 60160) mesajları 7’şer baytlık parçaları taşır; en çok 1 785 bayt gönderilebilir.

Her mesajı 8 bayta sığdırmak, hem alıcının hem gönderenin işini kolaylaştırır; uzak I/O modüllerinde grup başına tek bir 8 baytlık mesaj kullanılmasının nedeni budur.

Arıza kodları: DM1 ve DTC

Aktif arızalar DM1 mesajıyla (PGN 65226) saniyede bir yayınlanır. İlk 2 bayt uyarı lambalarının durumunu (kırmızı stop, sarı uyarı, koruma, arıza), sonraki her 4 bayt bir DTC’yi taşır:

Tek arıza 8 bayta sığar; birden fazla arıza varsa DM1, Transport Protocol ile BAM olarak gönderilir. Geçmiş arızalar DM2 (PGN 65227) ile okunur. Gösterge ekranında SPN ve FMI’yi okunabilir metne çevirmek için J1939-71 sözlüğünden küçük bir tablo yeterlidir.

J1939, CANopen ve ham CAN farkları

ÖzellikSAE J1939CANopenHam CAN
Kimlik29 bit; öncelik + PGN + kaynak adresi11 bit; işlev kodu + düğüm numarası11 ya da 29 bit; anlamı kullanıcı belirler
Hız250 / 500 kbit/s10 kbit/s – 1 Mbit/sSerbest
Veri sözlüğüJ1939-71 ile standart (SPN)Nesne sözlüğü ve cihaz profilleriYok
Adres yönetimiAddress Claim ile dinamikDüğüm numarası sabit (1–127)Yok
Ağ yönetimiYok (her cihaz bağımsız yayınlar)NMT master ve düğüm durumlarıYok
Tipik kullanımKamyon, otobüs, iş ve tarım makineleriEndüstriyel otomasyon, asansör (CiA 417)Makine içi özel ağlar

Araç hattına bağlanacak bir cihaz J1939 konuşmalıdır; kapalı bir makine ağında ise ham CAN ya da CANopen daha sade olabilir. İki modu da destekleyen cihazlar hem araçta hem makinede kullanılır.

AirHMI ile J1939: araç verisini ekranda gösterme

Bir HMI ekranın J1939 hattından veri göstermesi için üç şey gerekir: hattı dinleyip yalnızca gerekli PGN’leri süzen bir CAN arabirimi, SPN’leri gerçek değere çeviren küçük bir hesap ve bu değerleri gösteren bir arayüz.

Kablolamada CAN kuralları aynen geçerlidir: bükümlü çift, hattın iki ucunda 120 Ω sonlandırma, kısa ara bağlantılar. Araç hattında sonlandırma genellikle zaten vardır; ekrana ya da modüle ikinci bir sonlandırma eklemeyin.

Sık yapılan hatalar

Sorun giderirken bir USB–CAN arayüzü ve J1939 çözen bir izleme yazılımı en hızlı yoldur: hattaki PGN’leri, kaynak adreslerini ve gönderim aralıklarını birkaç saniyede gösterir.

J1939 çözümlerimizi inceleyin

Araç verisini ekranda göstermek, üst yapı ekipmanını CAN hattından yönetmek ya da mevcut bir ekrana J1939 eklemek için ürünlerimizi inceleyin. Projeniz için doğru yapılandırmayı seçmekte yardım isterseniz bize yazın.

AirHMI Mobile SmartIO CANLink CANBus – UART Modülü

İlgili Rehberler

İlgili Ürünler