OPC DA
OPC DA (Data Access), OPC Classic standartlarının en yaygın kullanılan bileşenidir. Windows COM/DCOM teknolojisi üzerine inşa edilmiştir ve gerçek zamanlı veri erişimi sağlar. OPC UA’dan önce endüstriyel otomasyonda fiili standart olarak kullanılmıştır.
inSCADA, OPC DA protokolünü yalnızca Client rolünde destekler.
OPC DA vs OPC UA
Section titled “OPC DA vs OPC UA”| Özellik | OPC DA | OPC UA |
|---|---|---|
| Platform | Yalnızca Windows | Platform bağımsız |
| Teknoloji | COM/DCOM | TCP/IP, HTTP, WebSocket |
| Güvenlik | DCOM güvenliği | TLS, sertifika, kullanıcı auth |
| Keşif | DCOM ile | Browse + Discovery |
| Durum | Eski (legacy) | Aktif geliştirme |
Veri Modeli
Section titled “Veri Modeli”Yapılandırma
Section titled “Yapılandırma”Connection
Section titled “Connection”| Parametre | Örnek | Açıklama |
|---|---|---|
| Protocol | OPC DA | Protokol seçimi |
| IP Address | 192.168.1.100 | OPC DA sunucusunun IP adresi |
| Port | 135 | DCOM portu (varsayılan: 135) |
| COM ProgID | Matrikon.OPC.Simulation | OPC sunucusunun COM programatik tanımlayıcısı |
| Separator | . | Tag yolu ayırıcı karakteri (varsayılan: nokta) |
| Max Depth | 12 | Tag ağacı tarama derinliği |
| Server Status Check Time | 30000 ms | Sunucu durum kontrol periyodu |
| Username | SUNUCU\opcuser | Bağlantının Windows hesabı — uzak bağlantıda bakın Windows hesabı |
| Password | •••• | O hesabın parolası |
Device
Section titled “Device”| Parametre | Örnek | Açıklama |
|---|---|---|
| Scan Time | 1000 ms | Tarama periyodu |
| Scan Type | PERIODIC | PERIODIC veya FIXED_DELAY |
| Parametre | Örnek | Açıklama |
|---|---|---|
| Use Subscription Mode | true | Subscription tabanlı veri alma (değişiklikte bildirim) |
| Percent Deadband | 0.5 | Analog değer değişim eşiği (%) |
Subscription Mode: true olduğunda OPC sunucusu yalnızca değer değiştiğinde bildirim gönderir — ağ trafiği ve işlemci yükü azalır. false olduğunda periyodik polling yapılır.
Variable
Section titled “Variable”| Parametre | Örnek | Açıklama |
|---|---|---|
| Name | Temperature | Değişken adı (OPC Item ID olarak da kullanılır) |
| Type | VT_R4 | OPC DA veri tipi |
| Array Index | 0 | Dizi değerli bir item’da eleman indeksi (0 – 65535) |
Desteklenen Veri Tipleri (VARIANT Types)
Section titled “Desteklenen Veri Tipleri (VARIANT Types)”| Veri Tipi | Açıklama |
|---|---|
| VT_BOOL | Boolean |
| VT_I1 | İşaretli 8-bit tam sayı |
| VT_UI1 | İşaretsiz 8-bit tam sayı |
| VT_I2 | İşaretli 16-bit tam sayı |
| VT_UI2 | İşaretsiz 16-bit tam sayı |
| VT_INT | İşaretli 32-bit tam sayı |
| VT_UINT | İşaretsiz 32-bit tam sayı |
| VT_I8 | İşaretli 64-bit tam sayı |
| VT_R4 | 32-bit kayan nokta (float) |
| VT_R8 | 64-bit kayan nokta (double) |
| VT_BSTR | Karakter dizisi (string) |
Browse (Keşif)
Section titled “Browse (Keşif)”inSCADA, OPC DA sunucusunun tag ağacını browse ederek mevcut item’ları keşfedebilir. Bu özellik, variable tanımlarken doğru Item ID bilgilerine ulaşmanızı kolaylaştırır.
Uzak sunucu: iki makinede yapılacaklar
Section titled “Uzak sunucu: iki makinede yapılacaklar”Bu bölüm, OPC sunucusunun başka bir Windows makinesinde olduğu durumu anlatır. Sunucu inSCADA ile aynı makinedeyse bunların hiçbiri gerekmez — DCOM hiç devreye girmez.
Üç ağ adımı
Section titled “Üç ağ adımı”DCOM bağlantısı üç ayrı adımdan geçer ve her birinin kendi gereksinimi vardır. Bir kurulumun neden çalışmadığını anlamanın en hızlı yolu, hangi adımda takıldığını bulmaktır.
| Adım | Yön | Ne olur | Gerekenler |
|---|---|---|---|
| 1. Başlatma | inSCADA → sunucu makinesi, TCP 135 | Sunucu makinesi OPC sunucusunu başlatır; COM ProgID orada çözülür | Hesap ve DCOM izni, 135 açık |
| 2. Çağrılar | inSCADA → OPC sunucusu süreci, dinamik port | Okuma, yazma, browse | Sunucu makinesinde OPC sunucusu programına gelen bağlantı izni |
| 3. Geri çağrı | sunucu → inSCADA, dinamik port | Subscription değerleri | inSCADA makinesinde Java’ya gelen bağlantı izni ve uygun DCOM izni |
1. Windows hesabı: inSCADA sunucuya kim olarak bağlanır
Section titled “1. Windows hesabı: inSCADA sunucuya kim olarak bağlanır”İki yol vardır.
a) Bağlantıya özel hesap — önerilen. Bağlantı formundaki Username ve Password alanlarını doldurursunuz; kullanıcı adı SUNUCU\kullanıcı (workgroup) ya da DOMAIN\kullanıcı biçimindedir. inSCADA o bağlantının bütün giden çağrılarını bu hesapla yapar: başlatma, okuma, yazma, browse ve sunucu listesi. Windows’taki runas /netonly ile aynı şeydir — inSCADA servisi kendi hesabıyla çalışmaya devam eder, yalnızca ağa o hesapla çıkar.
Kazancı şudur: inSCADA servisinin hesabının sunucu makinesinde bir aynası gerekmez ve farklı sunucular farklı hesaplarla kullanılabilir.
b) Servis hesabı. Kullanıcı adı boş bırakılırsa çağrılar inSCADA servisinin çalıştığı hesapla gider. Workgroup’ta bu, sunucu makinesinde aynı ad ve aynı parolayla bir yerel hesap açmayı gerektirir. Servis LocalSystem ile çalışıyorsa workgroup’taki uzak bir sunucuya bu yolla bağlanılamaz; (a) yolunu kullanın.
Her iki yolda da: sunucu makinesindeki grup üyelikleri
Section titled “Her iki yolda da: sunucu makinesindeki grup üyelikleri”Verilen hesap, OPC sunucusu makinesinde var olmalı ve iki gruba üye olmalıdır:
Add-LocalGroupMember -SID S-1-5-32-562 -Member <hesap> # Distributed COM UsersAdd-LocalGroupMember -Group Users -Member <hesap>Distributed COM Users, uzaktan başlatma ve erişim hakkını verir. Users grubu da gerekir çünkü bazı OPC sunucuları kendi DCOM erişim listelerini yalnızca Users ve SYSTEM’e açar — ve New-LocalUser ile açılan bir hesap Users grubuna kendiliğinden girmez.
Bu iki üyelik yeterlidir: dcomcnfg altındaki makine düzeyi sınırlara ya da uygulama bazlı başlatma/erişim ayarlarına dokunmak gerekmez.
2. Güvenlik duvarı: OPC sunucusu makinesi
Section titled “2. Güvenlik duvarı: OPC sunucusu makinesi”TCP 135 yalnızca başlatma içindir. Başladıktan sonra OPC sunucusu kendi sürecinde dinamik bir port açar ve okuma, yazma, browse çağrıları oraya gider. Sunucu makinesinde gelen bağlantıya izin verilmesi gerekenler:
- TCP 135
- OPC sunucusunun çalıştırılabilir dosyası
OpcEnum.exe—COM ProgIDburada çözülür, sunucu listesi de buradan gelir
New-NetFirewallRule -DisplayName "OPC DA: sunucu runtime" -Direction Inbound -Action Allow -Profile Any ` -Program "C:\Program Files (x86)\<üretici>\<sunucu>.exe" -RemoteAddress <inSCADA IP>Ağ ekibi tek bir port aralığı açmak isterse Windows’un dinamik RPC aralığı sunucu makinesinde HKLM\SOFTWARE\Microsoft\Rpc\Internet altından daraltılabilir. Bu, makinedeki bütün DCOM sunucularını etkileyen genel bir ayardır; program bazlı kural daha dar ve daha öngörülebilirdir.
3. Subscription: sunucunun inSCADA’ya geri çağrısı
Section titled “3. Subscription: sunucunun inSCADA’ya geri çağrısı”Use Subscription Mode açık olan frame’lerde (varsayılan) değerleri OPC sunucusu inSCADA’ya kendisi gönderir.
inSCADA makinesinin güvenlik duvarında, inSCADA’yı çalıştıran java.exe için gelen bağlantı izni olmalıdır.
Gereken DCOM izni ise OPC sunucusunun hangi hesapla çalıştığına bağlıdır:
| OPC sunucusunun çalıştığı hesap | Geri çağrının kimliği | inSCADA makinesinde gereken |
|---|---|---|
| Adı verilmiş bir hesap, aynı ad ve parolayla inSCADA makinesinde de var | O hesap, NTLMv2 | Ek izin gerekmez — önerilen |
| LocalSystem, workgroup | ANONYMOUS LOGON, NTLMv1 | ANONYMOUS LOGON’a DCOM uzaktan erişim |
Sunucu LocalSystem ile ve workgroup’ta çalışıyorsa anonim izin, inSCADA makinesinde dcomcnfg → Bilgisayarım → Özellikler → COM Güvenliği → Erişim İzinleri → Sınırları Düzenle → ANONYMOUS LOGON → Uzaktan Erişim: İzin Ver yolundan verilir.
Hata kodları
Section titled “Hata kodları”| HRESULT | Anlamı | Nereye bakılır |
|---|---|---|
0x80070005 E_ACCESSDENIED | Hesabın DCOM izni yok | Adım 1 — grup üyelikleri, parola |
0x800401F3 | COM ProgID kayıtlı değil | ProgID yazımı; sunucu gerçekten kurulu mu |
0x800706BA RPC_S_SERVER_UNAVAILABLE | Sunucuya ya da sunucu sürecinin portuna ulaşılamıyor | Adım 2 — program bazlı güvenlik duvarı kuralı |
0xC0040007 / 0xC0040008 | Değişken adı sunucuda yok | Değişkenin Name alanı |
0x80040202 | Subscription geri çağrısı kurulamadı | Adım 3 |
0xC0040004 OPC_E_BADTYPE | Sunucu yazılan değeri item’ın tipine çeviremedi | Değişkenin Type’ı |
Kontrol listesi
Section titled “Kontrol listesi”OPC sunucusu makinesi
- Bağlantıda verilen hesap burada var ve Distributed COM Users + Users gruplarında
- Güvenlik duvarı: TCP 135, OPC sunucusunun programı ve
OpcEnum.exeiçin gelen bağlantı izni - OPC sunucusu mümkünse adı verilmiş bir hesapla çalışıyor
inSCADA makinesi
- inSCADA Windows üzerinde çalışıyor
- Güvenlik duvarı:
java.exeiçin gelen bağlantı izni - OPC sunucusu LocalSystem ile ve workgroup’ta çalışıyorsa: ANONYMOUS LOGON’a DCOM uzaktan erişim
Windows ve DCOM: ne kadar ömrü var
Section titled “Windows ve DCOM: ne kadar ömrü var”OPC DA’yı belirli bir Windows sürümünden sonra kullanılamaz hâle getiren bir karar yoktur. Microsoft DCOM’u hiçbir Windows sürümünden kaldırmadı ve kaldıracağını da duyurmadı. Ama OPC DA’nın ömrünü fiilen daraltan üç gelişme var ve yeni bir kurulum planlarken bunlar hesaba katılmalıdır.
DCOM sıkılaştırması kalıcı oldu (14 Mart 2023). Microsoft, CVE-2021-26414 için üç aşamalı bir sıkılaştırma yayımladı: Haziran 2021’de kapalı, Haziran 2022’de açık ama kapatılabilir, Mart 2023’te açık ve kapatılamaz. Aktivasyon artık en az RPC_C_AUTHN_LEVEL_PKT_INTEGRITY ister; kapatmaya yarayan RequireIntegrityActivationAuthenticationLevel kaydı artık işe yaramaz. Yalnızca makineler arası OPC DA etkilenir — aynı makinedeki istemci ve sunucu DCOM’u hiç kullanmaz.
Altındaki Windows sürümleri destek dışına çıkıyor. OPC DA kurulumlarının çoğu eski Windows üzerinde durur. Windows 10 desteği 14 Ekim 2025’te bitti; Windows 10 Enterprise LTSC 2021 için tarih 12 Ocak 2027. Bu bir OPC DA kısıtı değil, ama OPC DA’nın yaşadığı makineleri doğrudan ilgilendirir.
NTLMv1 kaldırılıyor. LocalSystem ile çalışan bir sunucunun anonim geri çağrısı NTLMv1 kullanır ve bu kimlik doğrulama yöntemi Windows’tan çekilmektedir. Yukarıdaki önerilen kurulum (adı verilmiş hesap, NTLMv2) bu riski taşımaz.