MergenHub Envest
Ana sayfa/Dokümanlar/Kullanıcı Kılavuzu (uygulama içi, tam)

OPC UA Server

Endpoint & Bağlantı

OPC UA Server, tüm tag'leri opc.tcp://host:48010/MergenHub adresinde sunar (Ayarlar → OPC UA).

Hostlocalhost (yalnız yerel) veya 0.0.0.0/makine adı (LAN).
Port / EndpointPathVarsayılan 48010 / MergenHub.
Max. connections / session timeoutproje ö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._ActiveTagCountAktif (abone/taranan) tag sayısı.
<cihaz>._System._DemandPollYazınca cihazı bir kez zorla taratır (write-triggered poll).
<cihaz>._System._EnabledCihaz taraması aç/kapa (yaz).
._Statistics._SuccessfulReads / _FailedReads / _SuccessfulWritesSayaçlar.
._Statistics._ErrorCihaz hata durumu (0/1).
<cihaz>._System._Error / _NoErrorCihazı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.
İpucu Bir istasyonun sağlığını izlemek için _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.
Not Bu sistem tag'leri de aboneliğe/monitored-item'a dahil olduğundan, OPC panelindeki abone/item sayısı ham cihaz tag sayısından birkaç fazla görünür — normaldir.

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 / TranslateBrowsePathVar — yetkiye göre süzülür.
Read / WriteVar — değer canlı TagStore'dan; yazma cihaz kuyruğuna gider.
Subscribe (MonitoredItem / Publish)Var — veri değişimi push edilir.
HistoryReadVar — 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)VarAlarmConditionType 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, QueryYok — 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ı.
Ayrıntı Tam profil belgesi: 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.

BrowseYetkisiz düğüm hiç listelenmez (erişilebilir tag'in ata klasörleri görünür kalır).
Read / Write / AbonelikBadUserAccessDenied.
HistoryReadBadUserAccessDeniedokuyamadığı 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.
AggregateAverage · 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 / zamanKalite Good/Uncertain/Bad olarak; kaynak zaman damgası sürücüden gelen örnek zamanıdır.
DesteklenmeyenReadAtTime, 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.

Kapatma Ayarlar → OPC UA → Geçmiş okuma kapatılırsa bayraklar hiç konmaz ve HistoryRead desteklenmez (özellik öncesi davranış).
Ayrıca bkzData Logger

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.

Yetki + denetim Her çağrı, argümandan çözülen hedef üzerinde okuma-yazma yetkisi ister (yoksa 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ç konmazBadNotImplemented 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.

AyarOpcUa.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.
ConditionRefreshBağlanır bağlanmaz çağrılır → aktif/onay bekleyen alarmların anlık listesi gelir.
OnayAcknowledgeableConditionType.Acknowledge → mevcut ISA-18.2 onayı; denetim günlüğüne düşer.

ISA-18.2 ↔ UA durum eşlemesi:

DurumActiveStateAckedStateRetain
Normalfalsetruefalse
Alarm (onaysız)truefalsetrue
Alarm (onaylı)truetruetrue
Normale döndü, onaysızfalsefalsetrue

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.

Yetkilendirme A&E de tag yetkisine tabidir: kaynak tag'i okuyamayan kullanıcıya o alarm hiç yayınlanmaz (abonelik ve ConditionRefresh süzülür, düğüm browse'da görünmez); onay için okuma-yazma gerekir, yoksa BadUserAccessDenied. Yetki değişikliği açık oturumlara canlı yansır.
Sınırlar Tek olay tipi (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.