Mimari Genel Bakış¶
Bu sayfa, node-red-trexmes-service paketinin iç mimarisini, trexMes Edge ile haberleşme şeklini ve node'lar arası veri akışını açıklar.
Yüksek Seviye Mimari¶
flowchart TB
subgraph TREX["trexMes Edge Panel Yazılımı"]
PANEL[Panel UI<br/>WinForm]
CONN[Node-RED<br/>Connector Plugin]
end
subgraph NRED["Node-RED Sunucu"]
SUB[trex Subscriber]
EV[Event Nodes]
FORM[Form Nodes]
ACTION[Action Nodes]
RESP[Responser]
end
PANEL -- "Event Trigger" --> CONN
CONN -- "HTTP GET /event" --> EV
EV --> FORM
FORM --> ACTION
ACTION --> RESP
RESP -- "HTTP Response" --> CONN
CONN -- "Render / Action" --> PANEL
SUB -. "Olay listesi kaydı" .- CONN
style PANEL fill:#fef3c7,color:#000
style CONN fill:#fef3c7,color:#000
style SUB fill:#58d68d,color:#000
style EV fill:#ccffcc,color:#000
style FORM fill:#ccffcc,color:#000
style ACTION fill:#ccffcc,color:#000
style RESP fill:#ccffcc,color:#000
Bileşenlerin Rolleri¶
1. trexMes Edge Panel + Connector Plugin¶
Üretim sahasındaki fiziksel/sanal panel üzerinde çalışan ana yazılımdır. İçindeki Node-RED Connector eklentisi:
- Panel üzerindeki tüm UI olaylarını HTTP isteklerine çevirir.
- Bu istekleri Node-RED sunucusuna gönderir.
- Node-RED'den dönen cevapla panelde WinForm render eder, kontrol özelliklerini günceller, method çağrılarına yanıt verir.
2. Node-RED Sunucu¶
trexMes panellerinden gelen istekleri işleyen ve cevaplayan sunucudur. Tek bir Node-RED kurulumu 150-200 paneli aynı anda yönetebilir.
Node Kategorileri ve Sorumlulukları¶
| Kategori | Rolü | Örnek Node'lar |
|---|---|---|
| Çekirdek | Altyapı / kayıt | trex Subscriber, Responser |
| Olay (Event) | Panelden gelen tetikleyiciler + olay kesme | Business Events, Form Events, …, Handle Setter |
| Form | Panel üzerinde UI üretme/güncelleme | Custom Form, Form Bind Controls, … |
| İşlem | Method çağırma, process tetikleme | Method Invoker, Execute Process, … |
| Yapay Zekâ | LLM ile akış üretimi | LLM Flow Builder |
Olay Yaşam Döngüsü (Event Lifecycle)¶
Bir olayın panelden tetiklenip Node-RED'de işlenmesi şu adımlardan geçer:
sequenceDiagram
autonumber
participant Panel as trexMes Panel
participant Conn as Node-RED Connector
participant Sub as trex Subscriber
participant Ev as Business Events
participant Form as Custom Form
participant Resp as Responser
Note over Panel,Resp: BAŞLANGIÇ (deploy anında)
Conn->>Sub: GET /GetSubscribed
Sub->>Sub: Tüm event node'larını topla
Sub-->>Conn: { subs: [...], handleds: [...] }
Conn->>Panel: Olay listesini kaydet
Note over Panel,Resp: ÇALIŞMA ZAMANI
Panel->>Conn: "OrderStart" olayı tetiklendi
Conn->>Ev: GET /OrderStartEvent + payload
Ev->>Form: msg.payload (event verisi)
Form->>Form: XML form tasarımını hazırla
Form->>Resp: msg.payload (operationtype: CustomDialog)
Resp-->>Conn: HTTP 200 + render JSON
Conn->>Panel: WinForm'u panelde aç
Anahtar Noktalar¶
- Tek bir
trex Subscriber: Deploy anında bir kez çalışır, projedeki tüm event node'larının isimlerini panele bildirir. - Her event akışı bir HTTP isteğidir: Panel HTTP
GETile olay tetikler, Node-RED akışı çalışır, sonunda HTTP cevabı döner. Responserkapatıcıdır: Cevap dönmeden panel beklemede kalır. Bazı node'lar (örn.trex Subscriber) bunu kendiliğinden yönetir; diğer olay akışlarında manuel eklenmelidir.
Mesaj Akışı Anatomisi¶
Tüm node'lar arasında dolaşan msg.payload aslında bir operation array'dir. Her node bu array'e kendi "operasyonunu" push eder:
msg.payload = [
{
operationtype: "CustomDialog",
name: "OrderForm",
customformxml: "<form>...</form>"
},
{
operationtype: "BindControl",
name: "OrderForm",
bindcontrols: [
{ Name: "txtOrderNo", FieldName: "orderNo" }
],
value: { orderNo: "ORD-001" }
},
{
operationtype: "UIButtonConfig",
value: [ /* button configs */ ]
}
]
Responser bu array'i tek HTTP cevabında panele gönderir. Panel sırayla bu operasyonları yorumlar:
operationtype |
Anlamı | Hangi node üretir? |
|---|---|---|
CustomDialog |
Yeni form aç | Custom Form (formainform=false) |
MainForm |
Ana formu güncelle | Custom Form (formainform=true) |
BindControl |
Form alanlarına veri bağla | Form Bind Controls |
ControlProperties |
Kontrol özelliklerini ayarla | Control Properties |
UIButtonConfig |
Buton konfigürasyonu | Button Configurator |
TriggerMain |
Ana form butonu tetikle | Main Form Action |
MethodInvokerProcess |
Panel method'unu çağır | Method Invoker |
ExecuteProcess |
Process tetikle | Execute Process |
ExecuteScript |
Form üzerinde script çalıştır | Execute Script |
TrexEventHandler |
Olay handle bilgisi | Handle Setter |
Event Tipleri ve Yetenekleri¶
Paket 8 farklı event tipi sağlar. Bu tipler panel tarafındaki olay sınıflandırmasıyla birebir eşleşir:
| Event Tipi | Tipik Kullanım |
|---|---|
| Business Events | İş akışı olayları (sipariş başlama, üretim bitirme, vs.) |
| System Events | Sistem seviyesi olaylar (boot, login, shutdown) |
| Communication Events | İletişim katmanı olayları (PLC, OPC, sensör) |
| Display Events | UI üzerindeki gösterim olayları |
| Form Events | Form üzerindeki etkileşim olayları (button click vs.) |
| Display Methods | Ana form metod tetikleyicileri |
| Method Returns | Method invocation cevapları |
"Handle Edildi" Kavramı¶
Bazı olaylar panel tarafında varsayılan bir işleyiciye sahiptir. Node-RED akışınız bu olayı yakaladığında panelin de kendi işleyicisinin çalışmasını isteyip istemediğinizi belirtmelisiniz:
ishandled = true→ "Bu olayı Node-RED yönetti, panel kendi işleyicisini ÇALIŞTIRMASIN."ishandled = false→ "Panel kendi işleyicisini de çalıştırsın."
Bu davranış olay node'larının Is Handled alanı veya akış ortasında Handle Setter ile dinamik olarak kontrol edilebilir.
Çoklu Panel Senaryosu¶
Aynı Node-RED akışı 150-200 paneli aynı anda yönetebilir. Her panelin IP'si gelen req.ip üzerinden ayrıştırılır:
// trex Subscriber çıkışı
{
payload: {
client: "192.168.1.42", // Hangi panel?
subs: [ /* event listesi */ ],
handleds: [ /* handle edilenler */ ]
}
}
Akışınızda panel-bazlı ayrım yapmak için msg.payload.client veya msg.req.ip üzerinden filtre uygulayabilirsiniz.
Sonraki Adım¶
Mesaj Yapısı sayfasında operationtype formatının her alanı detaylı incelenmiştir.