ALGO TEAM / CAN & J1939 REHBERİ
J1939 PGN nedir? 29-bit CAN ID, PDU1 ve PDU2 hesaplama
11 dakika · Güncelleme: 12 Eylül 2026J1939 29-bit CAN kimliğinden PGN, priority, source address ve destination address alanlarını çıkarın; PDU1 ve PDU2 farkını gerçek örneklerle öğrenin.
PGN / CAN ID Hesaplayıcıyı aç →PGN nedir?
PGN (Parameter Group Number), bir J1939 mesaj grubunun anlamını ve payload düzenini tanımlayan 18 bitlik numaradır. PGN mesajın hangi parametre grubunu taşıdığını söyler; SPN ise bu payload içindeki tek bir parametreyi tanımlar. Örneğin DM1 mesajının PGN değeri 65226'dır; DM1 içindeki arıza parametreleri SPN ve FMI alanlarıyla ayrılır.
PGN, 29-bit Extended CAN kimliğinin tamamı değildir. Priority ve source address CAN ID içinde bulunur ancak PGN'ye dahil değildir. PDU1 mesajlarında destination address de PGN'nin parçası değildir; PDU2 mesajlarında aynı byte group extension olarak yorumlanır ve PGN'ye katılır.
29-bit J1939 CAN ID alanları
J1939 kimliği soldan sağa priority, EDP/R, data page, PDU format, PDU specific ve source address alanlarına ayrılır. Priority değeri CAN arbitration sırasında önceliği etkiler; sayısal değer küçüldükçe öncelik yükselir. PF alanı mesajın PDU1 mi PDU2 mi olduğunu, PS alanının ise hedef adres mi yoksa group extension mı olduğunu belirler.
| Alan | Bitler | Görevi |
|---|---|---|
| Priority | 28–26 / 3 bit | Arbitration önceliği; PGN'ye dahil değildir |
| EDP/R | 25 / 1 bit | Extended data page veya reserved alanı; PGN'nin en yüksek bitidir |
| DP | 24 / 1 bit | Data page seçimi; PGN'ye dahildir |
| PF | 23–16 / 8 bit | PDU format; PDU1/PDU2 ayrımını belirler |
| PS | 15–8 / 8 bit | PDU1'de destination address, PDU2'de group extension |
| SA | 7–0 / 8 bit | Mesajı gönderen ECU'nun source address değeri |
PDU1 ve PDU2 farkı
PF değeri 0–239 arasındaysa mesaj PDU1'dir. PS byte'ı destination address olarak kullanılır; belirli bir ECU hedeflenebilir veya 0xFF global adresi seçilebilir. Hedef adres PGN'ye katılmadığı için PDU1 PGN'sinin en düşük byte'ı her zaman 0x00 kabul edilir.
PF değeri 240–255 arasındaysa mesaj PDU2'dir. Bu biçim yayın mesajları içindir ve PS byte'ı group extension olur. Group extension PGN'nin en düşük byte'ıdır; bu nedenle PDU2'de PS değeri PGN hesabına katılır.
| Özellik | PDU1 | PDU2 |
|---|---|---|
| PF aralığı | 0–239 / 0x00–0xEF | 240–255 / 0xF0–0xFF |
| PS anlamı | Destination address | Group extension |
| İletim | Hedefe özel veya global | Broadcast |
| PGN'nin düşük byte'ı | 0x00 | PS değeri |
CAN ID'den PGN nasıl hesaplanır?
Önce 29-bit kimlikten EDP/R, DP, PF, PS ve SA alanlarını ayırın. Ardından PF değerini kontrol edin. PF 240'tan küçükse PGN hesabında PS yerine 0 kullanın; PF 240 veya daha büyükse PS değerini group extension olarak ekleyin.
Genel formül aşağıdaki gibidir. GE değeri PDU1 için 0, PDU2 için PS değeridir. Kimliği yazılımda işlerken signed 32-bit kaydırmaların işaret üretmemesine dikkat edin; sonucu unsigned olarak ele alın ve 0x1FFFFFFF maskesiyle 29 bit içinde doğrulayın.
PGN = (EDP/R × 0x20000) + (DP × 0x10000) + (PF × 0x100) + GEGE = PF < 240 ? 0 : PSSA = CAN_ID & 0xFFPDU2 örneği: 0x18FECA00
0x18FECA00 kimliğinde priority 6, EDP/R 0, DP 0, PF 0xFE, PS 0xCA ve source address 0x00'dır. PF değeri 254 olduğu için mesaj PDU2'dir; PS byte'ı group extension olarak PGN'ye katılır. Sonuç PGN 0xFECA, yani decimal 65226'dır. Bu PGN DM1 aktif arıza mesajını tanımlar.
Aynı 0xFECA PGN'si 0x18FECA03 kimliğiyle gelirse mesaj grubu yine DM1'dir fakat source address 0x03 olur. Kayıt analizinde yalnız PGN'ye göre gruplamak, farklı ECU'ların mesajlarını birleştirebilir; PGN ile source address'i birlikte saklayın.
0x18FECA00 → priority 6 | PF 0xFE | GE 0xCA | SA 0x00PGN = 0xFECA = 65226PDU1 örneği: 0x18ECFF00
0x18ECFF00 kimliğinde priority 6, PF 0xEC, PS 0xFF ve source address 0x00'dır. PF değeri 236 olduğu için mesaj PDU1'dir. PS alanı global destination address'tir ve PGN hesabına katılmaz; bu nedenle sonuç 0xEC00, yani decimal 60416'dır. Bu PGN J1939 Transport Protocol Connection Management mesajını tanımlar.
Buradaki 0xFF değerini PGN'nin son byte'ı sanıp 0xECFF sonucuna ulaşmak yaygın bir hatadır. PDU1'de hedef adres değişse bile PGN değişmez: 0x18EC0300 kimliği de destination address 0x03 olan PGN 0xEC00 mesajıdır.
0x18ECFF00 → priority 6 | PF 0xEC | DA 0xFF | SA 0x00PGN = 0xEC00 = 60416PGN'den CAN ID oluşturma
Ters işlemde önce PGN'nin PF alanına bakın. PDU2 için PGN'nin düşük byte'ı group extension olarak doğrudan PS alanına yazılır. Örneğin PGN 0xFECA, priority 6 ve source address 0x00 seçildiğinde CAN ID 0x18FECA00 olur.
PDU1 için PGN'nin düşük byte'ı 0x00 olmalıdır ve destination address ayrıca seçilir. PGN 0xEC00, priority 6, destination 0xFF ve source address 0x00 değerleri 0x18ECFF00 kimliğini oluşturur. Priority, hedef ve kaynak adresi mesaj tanımıyla doğrulamadan gerçek bir ağa çerçeve göndermeyin.
PDU2: 0xFECA + priority 6 + SA 0x00 → 0x18FECA00PDU1: 0xEC00 + priority 6 + DA 0xFF + SA 0x00 → 0x18ECFF00Sık görülen J1939 PGN örnekleri
Aşağıdaki kısa liste hesaplama kontrolü içindir. PGN adı, payload yerleşimi, yayın periyodu ve SPN tanımları için projenizde geçerli lisanslı SAE J1939DA sürümünü, DBC dosyasını ve üretici dokümanını kullanın.
| PGN | Hex | Yaygın ad | PDU tipi |
|---|---|---|---|
| 59904 | 0xEA00 | Request | PDU1 |
| 60160 | 0xEB00 | Transport Protocol Data Transfer (TP.DT) | PDU1 |
| 60416 | 0xEC00 | Transport Protocol Connection Management (TP.CM) | PDU1 |
| 60928 | 0xEE00 | Address Claimed | PDU1 |
| 61444 | 0xF004 | Electronic Engine Controller 1 (EEC1) | PDU2 |
| 65226 | 0xFECA | Active Diagnostic Trouble Codes (DM1) | PDU2 |
Sık yapılan hatalar
- 29-bit J1939 kimliğini 11-bit Standard CAN kimliği gibi yorumlamak.
- PDU1 mesajında PS byte'ını PGN'nin düşük byte'ı sanmak.
- Hexadecimal ve decimal değerleri birbirine karıştırmak; örneğin 0xFECA ile 65226'nın aynı PGN olduğunu gözden kaçırmak.
- Priority veya source address değiştiğinde PGN'nin de değiştiğini varsaymak.
- Farklı source address'lerden gelen aynı PGN'yi tek ECU verisi gibi birleştirmek.
- PGN numarasını bulduktan sonra payload'ın otomatik olarak çözüldüğünü sanmak; SPN yerleşimi için doğru J1939DA/DBC sürümü gerekir.
CAN log analizinde pratik iş akışı
- Kayıtta Extended frame bilgisini, tam 29-bit CAN ID'yi, zaman damgasını, DLC'yi ve payload'ı koruyun.
- CAN ID'yi PGN / CAN ID Hesaplayıcıda çözerek priority, PF, PS, source address ve PDU tipini doğrulayın.
- PDU1 ise destination address'i; PDU2 ise group extension değerini ayrı kaydedin.
- PGN ve source address çiftine göre mesaj periyodunu, kayıpları ve payload değişimini inceleyin.
- Sinyal çözümlemesini doğru sürümde J1939DA, DBC veya üretici dokümanıyla yapın; sonucu gerçek sistem davranışıyla doğrulayın.
Kaynaklar ve kapsam
Bu rehber kamuya açık teknik açıklamalar temel alınarak özgün biçimde hazırlanmıştır. Resmî PGN/SPN tanımları ve proje kararları için lisanslı standardın güncel sürümünü esas alın.
