00 MIL-STD-1553 nedir?
MIL-STD-1553, ABD Savunma Bakanlığı (DoD) tarafından 1973'te yayımlanan askeri avionik seri veri bus standardıdır. Bugün F-35, Eurofighter ve Patriot füze sistemlerinde kritik görev verisi bu protokol üzerinden taşınır.
1973'te MIL-STD-1553A olarak yayımlanan standart, 1978'de kapsamlı biçimde güncellenerek MIL-STD-1553B adını aldı. Bu revizyon hâlâ geçerliliğini korumakta ve dünya genelinde askeri platform avioniklerinin fiili standardı konumundadır. NATO Notice 1 ve Notice 2 ekleriyle genişletilmiştir.
| Platform | Kullanım alanı | Bus sayısı |
|---|---|---|
| F-16 Fighting Falcon | Uçuş kontrol bilgisayarı, radar, silah yönetimi | 2 (dual redundant) |
| F-35 Lightning II | Eski avionik arayüzleri, silah ara yüzleri (ARINC 664 ile birlikte) | 4+ |
| M1 Abrams MBT | IVIS (Inter-Vehicular Information System), ateş kontrol | 1–2 |
| Patriot PAC-3 | Radar ve füze fırlatıcı arası iletişim | 2 |
| AH-64 Apache | Avionik arka düzlemi, TADS/PNVS entegrasyonu | 2 |
| Hubble Uzay Teleskopu | Yük verisi, güç sistemi telemetrisi | 1 (uzayda redundancy farklı) |
| GPS IIR Uyduları | Komuta/telemetri alt sistemi | 1 |
MIL-STD-1553A ile 1553B farkları
İki revizyon arasındaki temel farklılıklar pratik uygulamayı doğrudan etkiler:
MIL-STD-1553, 1970'lerin başında Rockwell ve McDonnell Douglas mühendislerinin F-15 Eagle için geliştirdiği avionik bus konseptinden doğmuştur. Dönemin teknoloji kısıtlamaları göz önünde bulundurulduğunda, 1 Mbps ve dual-redundant yapısıyla son derece ilerici bir tasarımdı. F-35 gibi modern platformlarda hâlâ kullanılması, standardın ne kadar sağlam tasarlandığının kanıtıdır.
01 Fiziksel katman
MIL-STD-1553B'nin fiziksel katmanı ağır EMI ortamlarında güvenilir iletişimi garanti edecek şekilde tasarlanmıştır. Diferansiyel şielded twisted pair, transformer izolasyonu ve Manchester II kodlama bu garantinin temelini oluşturur.
Kablo ve sinyal özellikleri
Bus Controller ─────────────────────────────────────────────
│ Shielded Twisted Pair (78Ω nominal) │
└──┬─────────┬──────────┬──────────┬────── ┘
Stub │ Stub │ Stub │ Stub │
(RT1) │ (RT2) │ (RT3) │ (BM) │
[T-Coup] │[T-Coup] │[T-Coup] │[T-Coup] │
│ │ │ │
[RT1 LRU] [RT2 LRU] [RT3 LRU] [Monitor]
| Parametre | Değer | Açıklama |
|---|---|---|
| Veri hızı | 1 Mbps sabit | Manchester II biphasic encoding |
| Kablo empedansı | 70–85 Ω (nom. 78 Ω) | Shielded twisted pair, MIL-C-17 tip |
| Ana bus uzunluğu | Maks. 100 ft (30,5 m) | Stub uzunluklarına bağlı olarak değişir |
| Stub uzunluğu (direct) | Maks. 1 ft (0,3 m) | Transformer stub önerilir |
| Stub uzunluğu (transformer) | Maks. 20 ft (6,1 m) | Transformer coupling ile |
| Sinyal seviyesi (ana bus) | 18–27 V peak-to-peak diferansiyel | Transmitter çıkışı |
| Sinyal seviyesi (stub) | 6–20 V peak-to-peak | Transformer attenuation sonrası |
| Alıcı eşiği | Min. 1,2 V diferansiyel | Geçerli sinyal algılama eşiği |
| Maks. RT sayısı | 31 (adres 0–30) | Adres 31 broadcast için ayrılmış |
Manchester II Biphasic Encoding
1553B, saat gömülü Manchester II kodlamasını kullanır. Her bit, bit süresinin ortasında zorunlu geçiş içerir. Bu sayede ayrı bir saat hattına gerek yoktur:
Bit-1 (logic 1): ─────╮╰───── (high-to-low geçiş = 1)
Bit-0 (logic 0): ─────╯╭───── (low-to-high geçiş = 0)
↑
bit süresi ortası (500 ns @ 1 Mbps)
Sync pattern (Command/Status): 3 µs geçişsiz + 1,5 µs → 1,5 µs
Sync pattern (Data): 1,5 µs → 1,5 µs + 3 µs geçişsiz
Transformer coupling vs. direct stub
Askeri platformlarda (özellikle uçak ve füze sistemlerinde) transformer coupling zorunludur. Direct stub, şiddetli EMI ortamlarında veri bozulmasına ve common-mode arıza yayılımına yol açabilir. MIL-STD-461 EMC gereksinimlerini karşılamak için mutlaka transformer izolasyonu kullanın.
02 Word yapıları
MIL-STD-1553B'de üç farklı word tipi bulunur: Command Word, Data Word ve Status Word. Her word 20 bit uzunluğundadır: 3-bit sync + 16-bit bilgi + 1-bit odd parity.
Command Word (CW)
Bus Controller (BC) tarafından Remote Terminal'e (RT) gönderilir. Her mesaj bir Command Word ile başlar.
┌──────────┬──────────────┬───┬──────────────────┬──────────────────┬──────┐
│ SYNC │ RT ADDRESS │T/R│ SUBADDRESS / │ WORD COUNT / │ PAR │
│ (3 bit) │ (5 bit) │(1)│ MODE CODE (5b) │ MODE CODE (5b) │ (1b) │
└──────────┴──────────────┴───┴──────────────────┴──────────────────┴──────┘
bit 19-17 bit 16-12 11 10-6 5-1 0
Data Word (DW)
16 bit veri içerir. BC→RT veya RT→BC yönünde taşınır. Bir mesajda 1–32 data word bulunabilir.
┌──────────┬────────────────────────────────────────────────────────┬──────┐
│ SYNC │ DATA (16 bit) │ PAR │
│ (3 bit) │ MSB ←──────────────────────────────────→ LSB │ (1b) │
└──────────┴────────────────────────────────────────────────────────┴──────┘
Data sync: 1,5µs-high / 1,5µs-low (Command/Status sync'in tersi)
Status Word (SW)
Remote Terminal, kendisine gelen Command Word'e yanıt olarak Status Word gönderir. BC mesajın başarıyla alındığını bu word ile öğrenir.
┌──────┬─────────┬──┬──┬──┬────┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
│SYNC │RT ADDR │ME│IN│SR│RES │BC│BY│SF│DB│RE│ RESERVED │P │
│(3b) │(5b) │ │ │ │(4b)│ │ │ │ │ │ │ │
└──────┴─────────┴──┴──┴──┴────┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
| Bit | Alan | Açıklama |
|---|---|---|
| 16–12 | RT Address | Yanıt veren RT'nin adresi (Command Word ile eşleşmeli) |
| 11 | Message Error (ME) | Geçersiz mesaj alındı (parity hatası, sync hatası, illegal CW vb.) |
| 10 | Instrumentation (IN) | Status word'ü command word'den ayırt etmek için — 1553B'de her zaman 0 |
| 9 | Service Request (SR) | RT, BC'nin dikkatini çekmek istiyor (interrupt benzeri) |
| 8–5 | Reserved | Uygulama özel — standart mesajlarda 0 olmalı |
| 4 | Broadcast Received (BC) | RT en son broadcast mesajı aldı |
| 3 | Busy (BY) | RT şu an veri hazır değil, tekrar dene |
| 2 | Subsystem Flag (SF) | RT'ye bağlı alt sistem arızası var |
| 1 | Dynamic Bus Control (DB) | RT, bus kontrolünü almak istiyor |
| 0 | Terminal Flag (TF) | RT'nin kendisi arızalı |
Parity MIL-STD-1553B'de odd parity kullanır: 16 veri biti + 1 parity bitinin toplamı daima tek sayı olmalıdır. Bu, hatalı sinyallerin veya iletim bozulmalarının kolayca tespit edilmesini sağlar. Ancak 2 bit hata (çift sayıda) tespiti bu yöntemle mümkün değildir; bu nedenle dual-redundant bus yapısı ek güvenilirlik katmanı sunar.
03 Bus topolojisi ve aktörler
MIL-STD-1553B bir command/response protokolüdür: Bus Controller merkezi otorite rolünü üstlenir, Remote Terminal'ler yalnızca BC komutu üzerine yanıt verir.
Temel aktörler
Dual Redundant Bus (Bus A / Bus B)
════════════════════ BUS A ══════════════════════
│ │ │ │ │
[BC] [RT1] [RT2] [RT3] [BM]
│ │ │ │ │
════════════════════ BUS B ══════════════════════
Transformer Coupling: Her RT her iki bus'a da ayrı transformer ile bağlı.
Normal operasyon: BC Bus A'yı kullanır.
Arıza senaryosu: Bus A bozulursa BC otomatik Bus B'ye geçer.
Failover süresi: Tipik <100 µs (uçuş kontrol uygulamalarında kritik).
Dual redundant yapı, F-35 gibi platformlarda "mission-critical" güvenilirlik gereksinimini karşılar. ABD Savunma Bakanlığı MIL-HDBK-1553 belgesi, bus seçim stratejilerini ve arıza işleme prosedürlerini detaylandırır.
Bus A ve Bus B kablolarını her zaman fiziksel olarak birbirinden izole yönlendir — farklı kablo kanalları, farklı bölmeler. Her iki kablonun aynı hasar noktasından (serpinti, yangın, mekanik darbe) etkilenmesi dual redundancy'yi anlamsız kılar. Bu gereksinim MIL-STD-1553B Notice 2'de açıkça belirtilmiştir.
Stub bağlantı yöntemleri
| Yöntem | Maks. stub uzunluğu | İzolasyon | Kullanım |
|---|---|---|---|
| Direct Stub | 0,3 m (1 ft) | Yok | Lab/test ortamı |
| Transformer Stub | 6,1 m (20 ft) | DC izole, yüksek CMRR | Uçak, füze, uzay araçları |
| Transformer Couple (bus tap) | Gömülü T-coupler | Tam izolasyon | Tek-kart avionik entegrasyonu |
04 Mesaj formatları
MIL-STD-1553B beş temel mesaj formatı tanımlar. Her format, word'lerin belirli bir sıra ve yönde iletilmesini zorunlu kılar.
BC → RT (Bus Controller'dan Remote Terminal'e)
BC gönderir → [CW: RT_addr, T/R=0, SA, WC]
BC gönderir → [DW1] [DW2] ... [DWn] (1–32 data word)
RT yanıtlar → [SW: RT_addr, status bits]
Toplam süre: ~20 µs (1 CW + 1 SW + 2 DW için)
RT → BC (Remote Terminal'den Bus Controller'a)
BC gönderir → [CW: RT_addr, T/R=1, SA, WC]
RT gönderir → [SW: RT_addr, status bits]
RT gönderir → [DW1] [DW2] ... [DWn]
RT → RT (Peer Transfer)
BC gönderir → [CW: RT_rx, T/R=0, SA, WC] (alıcı RT'ye receive komutu)
BC gönderir → [CW: RT_tx, T/R=1, SA, WC] (verici RT'ye transmit komutu)
RT_tx gönderir → [SW: RT_tx_addr, ...]
RT_tx gönderir → [DW1] ... [DWn]
RT_rx gönderir → [SW: RT_rx_addr, ...] (son status)
Broadcast
BC gönderir → [CW: addr=31 (11111b), T/R=0, SA, WC]
BC gönderir → [DW1] [DW2] ... [DWn]
(RT'ler Status Word GÖNDERMEz — broadcast mesajda yanıt yok)
Mode Code mesajları
Subaddress 00000 veya 11111 olduğunda Data Word yerine Mode Code komutu iletilir. Mode Code, RT'nin davranışını kontrol eder:
| Mode Code | İsim | Açıklama |
|---|---|---|
| 00000 | Dynamic Bus Control | BC rolünü RT'ye aktar (aktif uçuş kontrolü için kritik) |
| 00001 | Synchronize | RT'nin dahili saatini eşitle |
| 00010 | Transmit Status Word | RT'den anlık status al |
| 00011 | Initiate Self Test | RT'de built-in test (BIT) başlat |
| 00100 | Transmitter Shutdown | RT verici devre dışı (arıza izolasyonu) |
| 00101 | Override Transmitter Shutdown | Vericiyi yeniden etkinleştir |
| 01000 | Reset Remote Terminal | RT'yi başlangıç durumuna getir |
| 10000 | Transmit Vector Word | RT'nin hata vektörünü oku |
| 10001 | Synchronize with Data Word | Ek veri ile senkronizasyon |
| 10010 | Transmit Last Command | RT'nin son aldığı CW'yi geri gönder |
F-16 Fly-By-Wire sisteminde Dynamic Bus Control mode code kritik rol oynar: Birincil uçuş bilgisayarı (PFCS) devre dışı kalırsa yedek bilgisayar (DAFCS) Dynamic Bus Control aracılığıyla bus yönetimini devralır. Bu aktarım 4 ms'nin altında tamamlanır — pilot fark etmeden.
05 Linux MIL-STD-1553 sürücüleri
Linux altında MIL-STD-1553 donanımı çoğunlukla PCIe, PMC veya PCI-X kart üzerinden erişilir. Birkaç farklı sürücü ekosistemi mevcuttur.
AIM GmbH Linux sürücüsü
AIM GmbH (Artisan Intelligence for Measurements), militan-grade MIL-STD-1553 kartları için kapsamlı bir Linux API sunar.
# AIM Linux driver paketi kurulumu (DKMS tabanlı):
tar -xzf aim-mil1553-linux-driver-v4.x.tar.gz
cd aim-mil1553-driver/
sudo make install
# Modül yükleme:
sudo modprobe aim_mil1553
# Kart tespiti:
dmesg | grep aim
# [ 5.123] aim_mil1553: AIM MIL-STD-1553 board detected at PCI 0000:03:00.0
# [ 5.124] aim_mil1553: 2 channels, Bus A + Bus B, RT capability: 31
# Cihaz dosyaları:
ls /dev/aim1553_*
# /dev/aim1553_0 /dev/aim1553_1
DDC (Data Device Corporation) Linux API
DDC, dünya genelinde en yaygın 1553 kart üreticilerinden biridir. BU-65170 ve BU-69090 serisi kartlar için kapsamlı C API sağlar.
/* DDC acecard / emace API başlıkları */
#include "ddc_api.h"
#include "ace.h"
int main(void) {
DDC_HANDLE hDev;
ACE_BC_MSG msg;
DDC_UINT16 data[2] = { 0xDEAD, 0xBEEF };
/* Kartı aç: ilk kart, kanal 0 */
hDev = aceOpen(0, 0);
if (hDev == DDC_INVALID_HANDLE) {
fprintf(stderr, "Kart açılamadı\n");
return -1;
}
/* BC modunu etkinleştir */
aceSetMode(hDev, ACE_MODE_BC);
/* Mesaj yapısını doldur: RT3, Subaddress 5, 2 data word, Bus A */
memset(&msg, 0, sizeof(msg));
msg.wBCCtrlWrd = ACE_BCCTRL_CHL_A; /* Bus A kullan */
msg.wCmdWrd1 = aceBuildCmdWrd(3, /* RT adresi = 3 */
0, /* T/R = 0 (receive) */
5, /* Subaddress = 5 */
2); /* Word count = 2 */
memcpy(msg.aDataWrds, data, sizeof(data));
/* Mesajı gönder ve yanıt bekle */
aceBC_SendMsg(hDev, &msg);
aceBC_WaitForResponse(hDev, &msg, 100); /* 100 ms timeout */
/* Status Word'ü kontrol et */
if (msg.wStsWrd1 & ACE_STSWRD_ME) {
printf("RT3: Message Error\n");
} else {
printf("RT3 başarıyla yanıt verdi\n");
}
aceClose(hDev);
return 0;
}
Açık kaynak: mil1553 kernel modülü
# Açık kaynak mil1553 modülü (CERN / BE-CO-HT geliştirmesi):
git clone https://github.com/GSI-CS-CO/mil-std-1553-linux-driver.git
cd mil-std-1553-linux-driver/
make && sudo make install
# Modül yüklendi mi?
lsmod | grep mil1553
# Cihaz arayüzü:
ls -la /dev/mil1553_0
# ioctl ile BC mesaj gönderme (raw C ioctl):
# ioctl(fd, MIL1553_SEND_MSG, &msg_struct);
# ioctl(fd, MIL1553_RECV_MSG, &msg_struct);
06 Yazılım simülasyonu
Gerçek donanım olmadan 1553 protokolünü simüle etmek için Python kütüphaneleri ve Wireshark dissector kullanılabilir. Bu araçlar geliştirme ve protokol öğrenimi için idealdir.
py1553 kütüphanesi
pip install py1553
from py1553 import CommandWord, DataWord, StatusWord, MilMessage
# Command Word oluştur: RT5, receive, SA=10, WC=4
cw = CommandWord(rt_address=5, transmit=False,
subaddress=10, word_count=4)
print(f"CW raw: 0x{cw.raw:04X}")
print(f"CW bits: {cw.raw:016b}")
# Data Word'ler oluştur
data = [DataWord(0x1234), DataWord(0x5678),
DataWord(0x9ABC), DataWord(0xDEF0)]
# Status Word (RT5 yanıtı simülasyonu)
sw = StatusWord(rt_address=5)
sw.message_error = False
sw.busy = False
sw.terminal_flag = False
# Tam BC→RT mesajı paketi
msg = MilMessage()
msg.command_word = cw
msg.data_words = data
msg.status_word = sw
print(f"Mesaj geçerli mi: {msg.is_valid()}")
print(f"Toplam word sayısı: {msg.total_words()}")
# Manchester II bit stream simülasyonu
bit_stream = msg.to_manchester_bits()
print(f"Bit stream uzunluğu: {len(bit_stream)} bit")
from py1553 import RemoteTerminal, SubaddressBuffer
# RT simülatörü: adres 3
rt = RemoteTerminal(address=3)
# Subaddress 5: uçuş kontrol yüzeyi pozisyon verileri
sa5_buf = SubaddressBuffer(subaddress=5, size=4)
sa5_buf.write([0x0100, 0x0200, 0x0300, 0x0400]) # aileron, elevator...
rt.register_subaddress(sa5_buf)
# BC'den gelen command word'ü işle
incoming_cw = CommandWord(rt_address=3, transmit=True,
subaddress=5, word_count=4)
response = rt.process_command(incoming_cw)
print(f"RT3 yanıtı: SW=0x{response.status_word.raw:04X}")
for i, dw in enumerate(response.data_words):
print(f" DW{i}: 0x{dw.raw:04X}")
Wireshark 1553 Dissector
Wireshark'ın 1553 dissector eklentisi (dissector-mil1553.lua) ile USB üzerinden bağlanan 1553 analyzer kartlarından yakalanan trafiği decode edebilirsiniz.
# Dissector eklentisini Wireshark plugin dizinine kopyala:
cp dissector-mil1553.lua ~/.config/wireshark/plugins/
# Wireshark ile PCAP dosyası açıp decode et:
wireshark -r flight_test_bus_a.pcap -Y "mil1553.rt_address == 5"
07 Test ve doğrulama
1553 sistemlerinin doğrulanması hem protokol uyumluluğunu hem de güvenilirlik gereksinimlerini kapsar. Militan-grade sistemler için DO-178C yazılım sertifikasyonu da devreye girer.
DDC Test ve Analiz Araçları
# DDC MIL-STD-1553 Analyzer (komut satırı arayüzü):
# Kart 0, kanal 1'de Bus Monitor modunda kayıt al:
./ddc_analyzer --device 0 --channel 1 --mode BM --duration 60 --output capture.bmd
# Kaydı metin formatında dışa aktar:
./ddc_export --input capture.bmd --format csv --output capture.csv
# Hata istatistikleri:
./ddc_analyzer --stats capture.bmd
# Manchester errors: 0
# Parity errors: 3
# RT timeout: 1
# Word count errors: 0
Holt HI-6130 Chip ile donanım testi
Holt Integrated Circuits'ın HI-6130 çipi, BC/RT/BM işlevlerini tek çipta birleştiren bir 1553 transceiver/protokol çipidir. Geliştirme kartlarıyla hızlı prototipleme imkânı sunar.
/* HI-6130 SPI üzerinden kontrol edilir */
#include "hi6130.h"
void loopback_test(void) {
/* Dahili loopback modunu etkinleştir */
hi6130_write_reg(HI6130_CONFIG, HI6130_LOOPBACK_EN);
/* BC tarafında test mesajı gönder */
hi6130_bc_transmit(rt_addr=1, sa=1, wc=1, data=0xA5A5);
/* RT tarafından yanıtı kontrol et */
uint16_t rcv = hi6130_rt_receive(rt_addr=1, sa=1);
assert(rcv == 0xA5A5);
printf("Loopback geçti: 0x%04X\n", rcv);
}
Bit Error Rate (BER) ölçümü
# Astronics AltaView ile BER testi:
# 10.000 mesaj gönder, hata sayısını raporla:
altaview_ber_test --count 10000 --rt 5 --sa 1 --wc 32
# Dual redundant failover testi:
# Bus A kablosunu fiziksel olarak kesmeden önce:
altaview_monitor --bus A &
# Bus A'yı simüle et (attenüatör ile sinyal seviyesini düşür):
# Kart Bus B'ye otomatik geçmeli ve mesaj kaybı 0 olmalı
altaview_inject_fault --bus A --type signal_loss
altaview_monitor --verify bus_switch --timeout 100ms
Uçuş yazılımı için DO-178C sertifikasyonu gereklidir. 1553 BC/RT yazılım katmanı tipik olarak DAL-A veya DAL-B seviyesinde sertifikalandırılır. Bu, %100 MC/DC kapsam testi, izlenebilirlik matrisleri ve bağımsız doğrulama gerektirir. DDC ve AIM gibi üreticiler COTS (Commercial Off-The-Shelf) DO-178C uyumlu 1553 yazılım kütüphaneleri satmaktadır.
08 Zaman kritikliği ve determinizm
MIL-STD-1553B'nin en kritik özelliği, deterministik zamanlama garantisidir. Uçuş kontrol sistemleri için bu garanti, güvenli operasyonun temel koşuludur.
Mesaj süresi analizi
| Mesaj bileşeni | Süre (µs) | Açıklama |
|---|---|---|
| Command Word (1 CW) | 20 µs | Sync(3b) + 16b + parity(1b) = 20 bit @ 1 Mbps |
| Data Word (1 DW) | 20 µs | Aynı yapı |
| Status Word (1 SW) | 20 µs | Aynı yapı |
| Response time (RT→BC) | 4–12 µs | CW alımından SW iletimi başlangıcına |
| Inter-message gap | Min. 4 µs | Mesajlar arası minimum süre |
BC→RT + 2 DW mesajı için toplam süre: 1 CW + 2 DW + 1 SW + response time = 20 + 40 + 20 + 8 ≈ 88 µs. Bu kesin ve tahmin edilebilir süre, gerçek zamanlı sistemlerde frame zamanlama hesaplarının temelini oluşturur.
TDMA benzeri frame yapısı
Minor Frame (tipik 10 ms):
┌───────┬───────┬───────┬───────┬───────┬───────┬─ ... ─┬───────┐
│RT1 SA1│RT2 SA3│RT5 SA2│RT8 SA1│RT1 SA2│RT3 SA1│ │ GAP │
│(ctrl) │(navi) │(radar)│(motor)│(nav2) │(fuel) │ │ │
└───────┴───────┴───────┴───────┴───────┴───────┴─ ... ─┴───────┘
←──────────────────── 10 ms ────────────────────→
Major Frame (tipik 100 ms): 10 × minor frame
MIL-STD-1553 vs. diğer protokoller
| Özellik | MIL-STD-1553B | ARINC 429 | CAN | Ethernet |
|---|---|---|---|---|
| Hız | 1 Mbps | 100 kbps | 1 Mbps | 1 Gbps+ |
| Topoloji | Bus (dual redundant) | Point-to-point | Bus | Star/Mesh |
| Determinizm | Tam (TDMA) | Tam (unidirectional) | Kısmi (CSMA) | Yok (standart) |
| RT sayısı | 31 | 20 (receiver) | Teorik sınırsız | Teorik sınırsız |
| Uygulama | Askeri avionik | Sivil havacılık | Otomotiv | Genel amaçlı |
| Sertifikasyon | MIL-SPEC, DO-178C | DO-254, DO-178C | ISO 26262 | ARINC 664 (AFDX) |
09 Pratik: PCIe kartla BC/RT uygulaması
DDC BU-65170 PCIe kartı ve Linux sürücüsü kullanarak gerçek bir BC/RT senaryosu: F-16 avionik veri bus'ını simüle eden bir uçuş bilgisayarı entegrasyonu.
Donanım kurulumu
# PCIe 1553 kartını tespit et:
lspci | grep "DDC"
# 03:00.0 Signal processing controller: Data Device Corp BU-65170 MIL-STD-1553
# DDC Linux sürücüsünü yükle:
sudo modprobe ddc_ace
# Sürücü yüklendi ve kart algılandı mı?
dmesg | tail -20 | grep ddc
# [ 8.441] ddc_ace: DDC BU-65170 found at 0000:03:00.0
# [ 8.442] ddc_ace: Device /dev/ddc_ace0 created
# İzinleri ayarla:
sudo chmod 666 /dev/ddc_ace0
F-16 Avionik Bus Simülasyonu (Python)
Bu örnek, bir F-16 avionik sisteminin basitleştirilmiş 1553 bus yapısını simüle eder. Gerçek F-16'da Mission Computer, Fire Control Radar, Inertial Navigation System ve Stores Management System bu bus üzerinden haberleşir.
import time
from ddc_api import MIL1553Device, BCMessage, BCFrame
# Kart ve kanalı aç
dev = MIL1553Device(card=0, channel=0)
dev.set_mode("BC")
# F-16 RT tanımlamaları (basitleştirilmiş)
RT_MISSION_COMPUTER = 1
RT_FIRE_CTRL_RADAR = 5
RT_INS = 9 # Inertial Navigation System
RT_SMS = 12 # Stores Management System
RT_CADC = 15 # Central Air Data Computer
# Subaddress tanımlamaları
SA_RADAR_TARGET_DATA = 1
SA_INS_ATTITUDE = 2 # pitch/roll/yaw
SA_CADC_AIRSPEED = 3
def minor_frame_10ms(dev):
"""10 ms minor frame: kritik avionik verilerini topla"""
frame = BCFrame()
# 1. INS'ten tutum verisi al (RT→BC, 4 data word)
frame.add(BCMessage.rt_to_bc(
rt=RT_INS, sa=SA_INS_ATTITUDE, wc=4
))
# 2. CADC'den hava hızı al (RT→BC, 2 data word)
frame.add(BCMessage.rt_to_bc(
rt=RT_CADC, sa=SA_CADC_AIRSPEED, wc=2
))
# 3. Radar'a hedef veri gönder (BC→RT, 8 data word)
target_data = [0x3E80, 0x0001, 0x1234, 0x5678,
0x0000, 0x0000, 0x0000, 0x0000]
frame.add(BCMessage.bc_to_rt(
rt=RT_FIRE_CTRL_RADAR, sa=SA_RADAR_TARGET_DATA,
data=target_data
))
# Frame'i çalıştır ve yanıtları oku
results = dev.execute_frame(frame)
for msg_id, result in results.items():
if result.status_word.message_error:
print(f"HATA: RT{result.rt_addr} yanıt vermedi!")
elif result.status_word.busy:
print(f"RT{result.rt_addr} meşgul, tekrar denenecek")
# Ana döngü: 100 Hz (10 ms minor frame)
print("F-16 avionik bus simülasyonu başladı...")
try:
while True:
t0 = time.perf_counter()
minor_frame_10ms(dev)
elapsed = time.perf_counter() - t0
if elapsed > 0.010:
print(f"Frame süresi aşıldı: {elapsed*1000:.2f} ms")
time.sleep(max(0, 0.010 - elapsed))
except KeyboardInterrupt:
dev.close()
print("Durduruldu.")
Gerçek bir F-16/F-35 avionik yazılımı için bu Python kodu yalnızca prototip amaçlıdır. Üretim yazılımı DO-178C DAL-A seviyesinde sertifikalandırılmış C/Ada kodu ile yazılır. Bu süreç: gereksinim izlenebilirlik matrisi, low-level test, MC/DC kapsam analizi, bağımsız kod incelemesi ve DER (Designated Engineering Representative) onayını kapsar. Süreç tipik olarak 3–5 yıl sürer ve proje maliyetinin önemli bir kısmını oluşturur.