Endpoint & Bağlantı
OPC UA Server, tüm tag'leri opc.tcp://host:48010/MergenHub adresinde sunar (Ayarlar → OPC UA).
| Host | localhost (yalnız yerel) veya 0.0.0.0/makine adı (LAN). |
| Port / EndpointPath | Varsayılan 48010 / MergenHub. |
| Max. connections / session timeout | proje özellikleri paritesi (çok-oturumlu istemciler için uzun timeout). |
Güvenlik & Sertifikalar
Endpoint güvenlik policy'leri seçilebilir: None, Basic256Sha256 (Sign / Sign&Encrypt) vb. Anonim veya kullanıcı adı/şifre token'ı. Güvenilmeyen istemci sertifikaları "rejected" listesine düşer; Ayarlar → Certificates'tan "trusted" yapılır. Sunucunun kendi instance sertifikası ilk açılışta üretilir.
_System Tag’leri
Cihaz ve sunucu istatistikleri _System / _Statistics tag'leri olarak OPC'de sunulur:
_System._ActiveTagCount | Aktif (abone/taranan) tag sayısı. |
<cihaz>._System._DemandPoll | Yazınca cihazı bir kez zorla taratır (write-triggered poll). |
<cihaz>._System._Enabled | Cihaz taraması aç/kapa (yaz). |
._Statistics._SuccessfulReads / _FailedReads / _SuccessfulWrites | Sayaçlar. |
._Statistics._Error | Cihaz hata durumu (0/1). |
<cihaz>._System._Error / _NoError | Cihazın haberleşme sağlığı. Yalnız "son işlem hatası" değil, gerçek veri akışı da hesaba katılır: bağlantı açık ama veri gelmiyorsa (zombi oturum) _NoError=0 olur. |
_NoError'a abone olmak yeterlidir — abonelik cihaz için tarama talebi oluşturur, cihaz gerçekten yoklanır. Devre dışı ya da hiç tüketicisi olmayan (bilerek boşta) cihaz hata sayılmaz.Desteklenen Servisler (profil)
MergenHub bir Standard UA Server'dır: Data Access + Historical Access (ham & aggregate) + Method Call. Aşağıdaki tablo neyin sunulduğunu ve neyin sunulmadığını gösterir.
| Browse / BrowseNext / TranslateBrowsePath | Var — yetkiye göre süzülür. |
| Read / Write | Var — değer canlı TagStore'dan; yazma cihaz kuyruğuna gider. |
| Subscribe (MonitoredItem / Publish) | Var — veri değişimi push edilir. |
| HistoryRead | Var — Raw + Processed (Average/Minimum/Maximum/Count). Bkz. "Geçmiş Okuma". |
| Call (metot) | Var — _Methods klasörü. Bkz. "Sunucu Metotları". |
| HistoryUpdate (geçmişe yaz/sil) | Yok — geçmiş salt-okunurdur. |
| OPC UA Alarms & Conditions (event modeli) | Var — AlarmConditionType koşulları. Bkz. "Alarm & Events (A&E) Yayını". |
| OPC UA PubSub (UADP/JSON) | Yok — bulut/mesajlaşma için Veri Köprüsü (MQTT/REST). |
| AddNodes / DeleteNodes, Query | Yok — adres uzayı config'ten üretilir (REST Configuration API). |
| LDS'e kayıt, X509 kullanıcı token'ı | Yok — doğrudan endpoint URL'i; UserName/Password + kanal sertifikası. |
docs/opc-ua-server.md.Tag Bazlı Yetki (ACL)
Ayarlar → OPC UA → Kullanıcılar → Yetki'den kullanıcı (ve anonim oturum) başına kanal/cihaz/tag yolu üzerinde erişim yok · okuma · okuma-yazma verilir. Çözümleme en uzun önek kazanır.
| Browse | Yetkisiz düğüm hiç listelenmez (erişilebilir tag'in ata klasörleri görünür kalır). |
| Read / Write / Abonelik | BadUserAccessDenied. |
| HistoryRead | BadUserAccessDenied — okuyamadığı tag'in geçmişini de okuyamaz. |
| Call (metot) | Hedef üzerinde okuma-yazma yoksa BadUserAccessDenied. |
Hiçbir kullanıcıya yetki atanmamışsa kısıt yoktur (geriye uyum). Her red denetim günlüğüne düşer (spam koruması ile).
Geçmiş Okuma (Historical Access)
OPC UA istemcileri geçmiş veriyi doğrudan sunucudan okuyabilir. Kaynak Data Logger'dır — OPC için ayrı bir depolama kurulmaz.
| Hangi tag? | Yalnız bir Data Logger grubuna eklenmiş tag'ler. Onların node'unda Historizing = true ve HistoryRead erişim biti bulunur; diğerleri BadHistoryOperationUnsupported döner. |
| Ham (raw) | StartTime/EndTime (bitiş hariç), NumValuesPerNode, ReturnBounds. StartTime > EndTime → yeniden eskiye. |
| Aggregate | Average · Minimum · Maximum · Count. Kova zamanı kova başlangıcıdır; boş kovada Count 0, diğerleri BadNoData. |
| Sayfalama | Çağrı başına değer sınırı Ayarlar → OPC UA'dan (varsayılan 5000). Sınıra ulaşılırsa devam noktası döner; istemci kalanı onunla alır. |
| Kalite / zaman | Kalite Good/Uncertain/Bad olarak; kaynak zaman damgası sürücüden gelen örnek zamanıdır. |
| Desteklenmeyen | ReadAtTime, ReadModified, event geçmişi, HistoryUpdate (geçmişe yazma/silme). |
UaExpert ile: düğümü seçin (Historizing true olmalı) → Document → Add → History Trend View → aralığı seçin. Aggregate için görünümün Configuration bölümünden Average + Processing Interval girin.
Sunucu Metotları (Call)
Sunucu kökündeki _Methods klasöründe çağrılabilir metotlar bulunur. Metotlar cihaz/tag başına çoğaltılmaz — hedef, argüman olarak verilir (büyük projelerde adres uzayı maliyeti sabit kalır).
ResetTotalizer(TagPath) | Totalizer gelişmiş tag'inin birikimini sıfırlar (_AdvancedTags.Ad ya da yalnız Ad). |
AcknowledgeAlarm(AlarmId) | Aktif alarmı onaylar — REST alarms/active/{id}/ack ile aynı işlem. |
ForceScan(DeviceKey) | Cihazı zorla taratır — ._System._DemandPoll yazmakla aynı (Kanal.Cihaz). |
ResetStatistics(DeviceKey) | _Statistics sayaçlarını sıfırlar. |
Hepsi (Succeeded: Boolean, Message: String) döner. İş sonucu başarısızlığı protokol hatası değildir: çağrı Good döner, neden Message'da yazar.
BadUserAccessDenied) ve başarılı/başarısız fark etmeksizin denetim günlüğüne düşer. Hedef çözülemezse çağrı BadInvalidArgument alır — yetki atlanamaz.Bağımlılığı olmayan metot (ör. alarm modülü yoksa AcknowledgeAlarm) adres uzayına hiç konmaz — BadNotImplemented dönen hayalet düğüm bulunmaz. Ayarlar → OPC UA → Sunucu metotları kapatılırsa _Methods klasörü de yaratılmaz.
Alarm & Events (A&E) Yayını
MergenHub'ın ISA-18.2 alarm motoru OPC UA'da AlarmConditionType koşulları olarak yayınlanır. İkinci bir alarm sistemi yoktur: tanım, durum ve onay tek kaynaktan (Alarmlar modülü) gelir — web arayüzünden yapılan onay UA abonelerine, UA'dan yapılan onay web arayüzüne yansır.
| Ayar | OpcUa.PublishAlarms (varsayılan açık). Kapatılırsa _Alarms düğümleri hiç kurulmaz, adres uzayı eski hâliyle kalır. |
| Adres uzayı | Objects → _Alarms → [Alan] → <alarm>. Namespace: http://envest/mergenhub/ua/alarms. |
| Abonelik | İstemci Server düğümüne olay aboneliği açar (_Alarms Server'a HasNotifier ile bağlıdır). Dilerse yalnız bir Alan klasörüne abone olur. |
| ConditionRefresh | Bağlanır bağlanmaz çağrılır → aktif/onay bekleyen alarmların anlık listesi gelir. |
| Onay | AcknowledgeableConditionType.Acknowledge → mevcut ISA-18.2 onayı; denetim günlüğüne düşer. |
ISA-18.2 ↔ UA durum eşlemesi:
| Durum | ActiveState | AckedState | Retain |
| Normal | false | true | false |
| Alarm (onaysız) | true | false | true |
| Alarm (onaylı) | true | true | true |
| Normale döndü, onaysız | false | false | true |
Koşul tipi ConditionName alanında taşınır: HIHI / HI / LO / LOLO / ROC_HI / ROC_LO / DEV_HI / DEV_LO. Severity motorla aynı 1–1000 ölçeğindedir. SourceName tag yolu, SourceNode ise gerçek tag düğümüdür. Veri kesilmişse (BAYAT alarm) Quality = UncertainLastUsableValue olur.
BadUserAccessDenied. Yetki değişikliği açık oturumlara canlı yansır.AlarmConditionType) sunulur; branch/Confirm/Shelving desteklenmez; olay geçmişi UA HistoryRead ile değil GET /alarms/v1/history ile okunur. Durum değişimleri 500 ms çözünürlükle örneklenir.
MergenHub