İş YönetimiFlow Tasarımı

Flow Tasarımı

Flow Editor, bir denetim pipeline’ını görsel olarak tasarladığınız drag-and-drop arayüzdür. Her pipeline adımı bir node’dur; node’lar port bağlantılarıyla birbirine bağlanır.

Arayüze Genel Bakış

Alanİçerik
Sol panelNode kategorileri ve listesi (sürükle bırak)
CanvasPipeline tasarım alanı
Sağ panelSeçili node’un özellikleri
Üst araç çubuğuKaydet, Çalıştır, Durdur, Reçeteler, Hata ayıklama

Node Ekleme

Sol panelden istediğiniz kategoriye tıklayın. Node’u canvas’a sürükleyin. Node üzerine tıklayınca sağ panelde özellikleri açılır.

Bağlantı Oluşturma

Node’un çıktı port’undan (sağ taraf) bir başka node’un girdi port’una (sol taraf) çizgi çekin. Port uyuşmazlığı varsa sistem bağlantıya izin vermez.

Temel bağlantı örneği:

CameraGrab.output

    └─► DetectionInference.image

               └─► RoiAnalyze.detections

               ┌────────┴────────┐
               │                 │
         QcDashboard        IODigitalWrite

Paralel Yürütme

Aynı seviyedeki bağımsız node’lar paralel çalışır. Sistem topolojik sıralama ile bağımlılık seviyelerini otomatik belirler:

Level 0: CameraGrab1, CameraGrab2, IODigitalRead   ← paralel
Level 1: DetectionInference1, DetectionInference2   ← paralel
Level 2: RoiAnalyze, LogicGate                      ← paralel
Level 3: QcDashboard, IODigitalWrite                ← paralel

Her seviye tamamlanmadan bir sonraki seviye başlamaz.

Hata Yönetimi

  • Bir node başarısız olursa downstream node’lar atlanır (Skip)
  • Çoklu upstream merge node’da: tüm upstream’ler başarısız → skip, en az biri başarılı → çalış
  • 10 ardışık pipeline hatası → Job otomatik durur

Kaynak Node’lar (Level 0)

Pipeline’ın başlangıç noktalarıdır: CameraGrab, IODigitalRead, HttpTrigger. Her kaynak node bağımsız bir async task’ta çalışır.

Tetikleme davranışı: Kaynak node çıktı ürettiğinde downstream pipeline tetiklenir. Birden fazla kaynak aynı anda çıktı üretirse pipeline en yakın tetikleyiciyle bir kez çalışır; biriken tetikler temizlenir.

IODigitalRead ile Tetikleme

PLC sinyali bekleyen senaryolarda IODigitalRead node’unu kaynak olarak kullanın:

  • Role: trigger — Rising/Falling/AnyEdge tespitinde pipeline’ı tetikler
  • ReadMode: RisingEdge — 0’dan 1’e geçiş tetikler
  • Bağlantı: I/O provider seçin, kanal numarasını girin

UIInput Node

Pipeline’ı durduran bir node’dur. Operatör yanıt verene kadar bekler.

  • Prompt tipi: confirm (Evet/Hayır), select (dropdown), text, number
  • Koşul: always, when_true, when_false
  • Timeout: 0 = pipeline timeout’a kadar bekle
⚠️

UIInput node’unu tetikleyici (Level 0) olarak kullanmayın. Bu node pipeline içine yerleştirilmelidir; aksi hâlde pipeline süresiz bekler.

Reçeteler

Flow > Reçeteler sekmesinden reçete tanımlayabilirsiniz. Her reçete belirli node’ların parametrelerini override eder.

Reçete JSON yapısı örneği:

{
  "recipe_hassas": {
    "name": "Hassas Denetim",
    "nodeOverrides": {
      "inference_001": { "confidence_threshold": 0.8 },
      "roi_002": { "__enabled": true }
    },
    "swapMode": "hot"
  }
}

Kaydetme ve Yayınlama

Flow’u kaydettiğinizde değişiklikler Job.FlowJson olarak veritabanına yazılır. Çalışan bir Job için kaydetme işlemi bir sonraki döngüde geçerli olur (hot reload).

💡

Flow Editor’da otomatik kayıt yoktur. Değişikliklerinizi kaydetmeden sayfadan çıkmaya çalışırsanız onay istenir.