Giriş — Hedeflenen uzun kuyruklu soru

Fabrikanızda farklı marka PLC'ler, eski RTU'lar, Ethernet sensörleri ve barkod okuyucular bulunuyorsa, ortak bir sorun ortaya çıkar: "Heterojen makine parkından gerçek zamanlı veri toplayıp SQL Server ve ERP ile tutarlı, hataya dayanıklı bir entegrasyon nasıl kurulur?" Bu yazıda bu tek soruya odaklanıyor, uygulanabilir ve teknik adımlar veriyoruz. Eğer ihtiyaç duyuyorsanız ayrıca Bayrak Bilişim'in IoT endüstriyel otomasyon hizmetimiz üzerinden proje destek taleplerinizi başlatabilirsiniz.

Problemin Özeti: Neden basit REST çağrısı yeterli değil?

Üretim sahasında sık görülen zorluklar şunlardır:

  • Farklı protokoller (OPC-UA, Modbus, Profinet, MQTT, serial) ve veri formatları.
  • Ağ kopmaları, cihaz yeniden başlatmaları veya kuvvetli gecikmeler; dolayısıyla geçici bağlantı kesintilerine dayanıklılık gerekir.
  • Veriyi ERP'ye bağlarken kimlik eşleşmesi (sipariş, parti, seri numarası) zorunludur; yanlış eşleşmeler stok/üretim sapmalarına yol açar.
  • Verinin zamansal tutarlılığı (timestamp), idempotent iletişim ve performans gereksinimleri.

Önerilen Mimari: Edge → Broker → İşleme → Depolama → ERP

Bu mimari katmanlar, heterojen cihazlardan güvenilir veri akışı sağlamada faydalıdır. Her katmanın sorumluluklarını açık tanımlamak operasyon riskini azaltır:

  • Edge Katmanı (Gateway): PLC/Sensor ile fabrika ağında çalışır. Protokol çevirisi, ön filtreleme, lokal tamponlama için kullanılır. Edge'de, network kaybında veri kaybını önleyecek append-only queue veya küçük SQLite gibi bir DB kullanın.
  • Mesaj Aracısı (Broker): MQTT, Kafka veya RabbitMQ gibi sistemler; veri akışını decouple eder, ölçeklenebilirlik sağlar ve backpressure yönetir. Broker, tüketicilerin yavaş olduğu durumlarda edge'de tamponlamayı azaltır.
  • İşleme Katmanı: ASP.NET Core tabanlı mikroservisler; veriyi normalize eder, iş kurallarını uygular, idempotency kontrolü yapar ve ERP/SQL Server ile konuşur. Bu katmanda transactional outbox, retry ve dedup mekanizmaları uygulanır.
  • Kalıcı Depolama: SQL Server üretim verileri, büyük hacimli telemetri için zaman serisi optimizasyonu (ör: SQL Server temporal veya ayrı TSDB) ile kullanımı değerlendirilebilir. Partitioning, indeks ve retention politikaları planlı olmalıdır.
  • ERP Entegrasyonu: Yetkili API çağrıları, transaction boundary yönetimi ve hata geri dönüşleri (compensating actions) içerir. ERP tarafı ile batch/sync stratejileri netleştirilmelidir.

Protokoller ve Bağlayıcı Seçimi (Detaylı Uygulama Notları)

Aşağıdaki seçimler pratikte uygulanması mümkündür; her cihaz tipi için adaptör yazarken dikkat edilecekler:

  • OPC-UA: Subscription/monitored item kullanın. NodeId ve monitoring mode'u (reporting/exception) doğru ayarlayın. Keepalive, samplingInterval ve queueSize parametreleri ile veri sıklığını ve ağ yükünü dengeleyin.
  • Modbus TCP/RTU: Register mapping tablosu ve address offset yönetimi gerektirir. Gateway tarafında register->semantic mapping (örn. register 40001 -> Temperature_C) tutun ve bu mapping versiyonlanabilir olsun.
  • MQTT: TLS ile kullanın. Topic yapısını semantik olarak düzenleyin (site/line/machine/sensor). QoS seviyesini ihtiyaç doğrultusunda seçin (QoS 1 yaygın; kritik olaylar için QoS 2 düşünün). Retain kullanımı dikkatle planlanmalı.
  • HTTP/REST ve WebSocket: Barkod okuyucular ve modern cihazlar için uygundur. Endpoint'leri idempotent olacak şekilde PUT veya POST with idempotency-key tasarlayın.

Veri Modelleme: Telemetri vs Olay (Uygulanabilir Şema Önerileri)

Veriyi iki ana gruba ayırın ve her gruba uygun depolama/işleme stratejisi uygulayın:

  • Telemetri (periyodik ölçümler): zaman serisi optimizasyonu, downsample, TTL. Agregasyon pipeline'ı (kuyrukta aggregate, sonra DB'ye yaz) maliyeti düşürür.
  • Olaylar (parça işleme, barkod okuma): ERP ile senkronize edilmesi gerekir; idempotency ve correlation key zorunludur.

Örnek tablo şemaları (özet):

  • MachineTelemetry(MachineId, Metric, Value, DeviceTimestamp, ServerTimestamp, SequenceId)
  • ProductionEvent(EventId, MachineId, EventType, PayloadJson, DeviceTimestamp, ServerTimestamp, CorrelationKey)
  • BarcodeScan(ScanId, ReaderId, Barcode, AssociatedOrder, ServerTimestamp, Status)

Örnek JSON mesaj (telemetri):

{
  "messageId": "uuid-v4",
  "deviceId": "LINE-A-M01",
  "sequenceNo": 12345,
  "metric": "motor_temp_c",
  "value": 72.3,
  "deviceTimestamp": "2026-09-19T08:12:34.123Z"
}

Kimlik Eşleştirme ve Correlation Key

ERP ile güvenli eşleşme için her olayda bir correlation key kullanın: bu, siparişNo+işAdımı+seriNumarası gibi birleşik bir anahtar olabilir. Correlation key aşağıdaki amaçlara hizmet eder:

  • Gecikmiş iletilerin doğru kayıt/işlem ile eşleşmesi
  • Duplicate tespitinde ek kriter olarak kullanma
  • İzlenebilirliğin (traceability) sağlanması

Güvenilirlik, Idempotency ve Zaman Sırası (Uygulama Önerileri)

  • Her mesajda benzersiz bir messageId ve cihaz tarafından atılmış bir deviceTimestamp bulundurun. Server tarafında giriş yaparken messageId üzerinden unique constraint kullanın.
  • Dedup tablosu: ReceivedMessages(MessageId PK, DeviceId, ReceivedAt). Bu tablo üzerinde zaman bazlı TTL ile eski kayıtları temizleyin (ör. retention policy 30 gün).
  • At-least-once teslimat varsayımıyla çalışın; tüketici servislerde idempotent işlemler (upsert pattern veya business-key kontrollü insert) kullanın.
  • Zaman senkronizasyonu için NTP; cihaz saatine güvenilmiyorsa serverTimestamp'a öncelik verin ama orijinal zaman bilgisini saklayın. Watermark mantığı ile iş sıralarını koruyun.

Edge Cihazlarında Offline Tamponlama (Teknik Rehber)

Network kesildiğinde veri kaybını önlemek için gateway'lerde şu yaklaşımları uygulayın:

  • Lokalde append-only log veya SQLite DB kullanın. Örnek SQLite tablo: Outbox(Id PK, MessageId, Payload, Sent boolean, CreatedAt).
  • Transactional outbox deseni: cihazdan çıkan event önce local outbox'a yazılır, sonra ayrı bir gönderici thread outbox'u okuyup broker'a publish eder. Böylece gönderim sırasında cihaz kapanırsa veri kaybolmaz.
  • Çift aşamalı gönderim: önce broker'a publish, publish onayı alınamazsa local queue'ya tut; bağlantı gelince batch olarak gönder. Gönderim sırasında payload'ları compress edin ve büyük veriyi chunk'layın.

Broker ve Tüketici Yapılandırması

  • MQTT: Topic hiyerarşisi, QoS, retain ve session clean flag'lerini (clean=false) planlayın. Broker tarafında mesaj retention ve max inflight ayarlarını izleyin.
  • Kafka: Partition key olarak MachineId veya CorrelationKey kullanarak ordering garantisi sağlayın. Consumer group'lar ve offset commit stratejilerini (manual commit) yönetin.
  • RabbitMQ: TTL, dead-letter exchange (DLX) ve requeue politikalarını ayarlayın. Poison message'ler için DLX -> human-in-the-loop iş akışı planlayın.

ERP ile Entegrasyon Stratejileri ve Örnek Akışlar

ERP entegrasyonunda şu yaklaşımlar uygulamalıdır:

  • API-first: ERP'nin sunduğu API'ler üzerinden idempotent çağrılar; mümkünse batch endpoint'ler kullanın. PUT ve idempotency-key yaklaşımı tercih edilir.
  • Webhook / Callback: ERP'den gelen onay veya hata bildirimlerini dinleyin ve lokal durumu güncelleyin. Başarısız işlem durumları için retry/backoff mantığı ve human escalation tanımlı olsun.
  • Saga deseni: Uzun iş akışlarında (ör. üretim adımı onayı) geri alma adımları için kompanzasyon stratejileri uygulayın. Örneğin bir üretim adımı başarısızsa ERP'de yapılan rezervasyonların iptali için kompanzasyon mesajı üretin.
  • İşlem bütünlüğü için 2PC yerine eventual consistency ve kompanzasyonları tercih edin; 2PC genelde heterojen sistemlerde sorun çıkarır.

ASP.NET Core, C# ve SQL Server için Pratik İpuçları

  • Mikroservis ingest katmanı için ASP.NET Core Web API kullanın; arka plan işleyiciler için IHostedService veya Worker Service tercih edin.
  • Mesaj kuyruğu tüketimi için Microsoft.Extensions.Hosting tabanlı consumerlar yazın; paralel tüketimde partitioning dikkate alınsın. Manual offset/ack kontrolü uygulayın.
  • Veri eklemelerinde EF Core yerine bulk insert ya da SqlBulkCopy kullanımı performansı artırır. Telemetri için batch upsert pattern uygulayın.
  • Telemetry için Application Insights/Prometheus ve loglar için yapılandırılmış logging (Serilog) kullanın. CorrelationId ile dağıtık izleme sağlayın.
  • OPC-UA için .NET kütüphanelerinden faydalanın; MQTT için MQTTnet gibi olgun kütüphaneler tercih edin. Bağımlılıkları güncel tutun ve uzun çalışan client'lar için reconnect/backoff stratejisini implement edin.

Güvenlik ve Cihaz Yönetimi

  • OT ve IT ağlarını segmentleyin; gateway'leri DMZ/OT-firewall arkasında konumlandırın. Erişim kuralları ve liste tabanlı izinler (allowlist) belirleyin.
  • Cihaz kimlik doğrulaması için sertifika tabanlı provisioning uygulayın; shared secrets yerine x.509 tercih edin. Sertifika yenileme ve iptal (CRL/OCSP) süreçleri planlı olsun.
  • Tünelleme gerekiyorsa endüstriyel VPN çözümleri ya da TLS üzerinden güvenli MQTT kullanın. Yönetilebilir bir PKI altyapısı kurun veya kullanın.

Monitoring, Sağlık Kontrolleri ve Operasyon

Canlı sistemlerde izleme şarttır. Uygulanabilir metrik ve alert önerileri:

  • Gateway health-check (HTTP 200), last-seen timestamp per device, queue length ve outbox backlog.
  • İletim kuyruk uzunluğu, işlenmemiş event sayısı, duplicate oranı, consumer lag gibi metrikler.
  • Alert playbook: ör. 15 dk içinde consumer lag > threshold veya duplicate ratio anormal artış gösterirse otomatik alarm + otonom yeniden başlatma/insan müdahalesi tetiklensin.

Uygulanabilir Başlangıç Planı (Adım Adım)

  1. Önceliklendirme: Hangi makineler/hatlar en kritik? Hedef KPI'ları (OTEE, scrap, throughput) ile eşle.
  2. Protokol haritası: Her cihaz için iletişim protokolü, kullanılacak adaptor ve erişim gereksinimini belgeleyin.
  3. Küçük pilot: 1 hat veya 2 makine ile gateway+broker+ingest servisi kurun ve 2-4 hafta test edin. Test senaryolarında network kesintisi, duplicate mesaj ve gecikme testleri yapın.
  4. Data model ve correlation key standardı tanımlayın; ERP ile eşleşme testlerini yapın ve idempotency senaryolarını doğrulayın.
  5. Yavaşça ölçeklendir: parti parti makine ekleyin, monitoring sonuçlarına göre adaptasyon yapın. Her aşamada rollback planı hazır olsun.

Sonuç ve Kontrol Listesi

Kısa kontrol listesi ile uygulama öncesi ve sonrası doğrulamaları yapın:

  • Edge gateway ile protokol çevirisi ve lokal tamponlama var mı?
  • Mesaj broker ile decoupling ve ölçeklenebilirlik sağlandı mı?
  • ID/Correlation key ve idempotency mekanizmaları tanımlı mı?
  • Zaman senkronizasyonu (NTP) ve server vs device timestamp politikası belirlendi mi?
  • ERP entegrasyonu için idempotent API'ler, callback/ack ve compensation akışları tasarlandı mı?
  • Monitoring, alerting ve operasyonel playbook hazır mı?

Eğer bu konuyu saha koşullarınıza göre teknik bir şekilde değerlendirmek isterseniz, detaylı bir keşif çalışması için lütfen iletişim sayfamızdan bize ulaşın. Bayrak Bilişim, C#, ASP.NET Core ve SQL Server tabanlı sistemlerde üretim ve depo süreçlerine yönelik pratik, uygulamaya dönük çözümler sunar.

Not: Bu makale uygulamaya yönelik genel öneriler sunar; her fabrika özelinde cihaz envanteri, ağ topolojisi ve ERP yetenekleri doğrultusunda detaylı tasarım yapılmalıdır.

Bu konuyu kendi işletmeniz için değerlendirelim.

Mevcut süreci ve kullandığınız sistemleri anlattığınızda uygulanabilir seçenekleri birlikte çıkarabiliriz.

Projenizi anlatın →