Veritabanı (ODBC)
Veritabanı protokolü, 2WinScada'nın başka bir sistemin veritabanındaki bir tablodan tag değerlerini periyodik olarak okumasını ve gerekirse bu tabloya değer yazmasını sağlar. Her satırda bir değişkenin adresi (adı veya numarası) ve değeri bulunan "adres–değer" biçimindeki tablolar için tasarlanmıştır.
2WinScada veritabanına yalnızca ODBC üzerinden bağlanır. Sunucuda ODBC sürücüsü kurulu olan her veritabanı (örn. Microsoft SQL Server, PostgreSQL, MySQL) kullanılabilir; veritabanına özel yerleşik bir bağlantı sürücüsü yoktur. Okuma ve yazma sorguları, girilen tablo ve kolon adlarından 2WinScada tarafından oluşturulur; serbest SQL sorgusu yazılmaz.
Lisans
Veritabanı entegrasyonu Standard ve Professional lisans sürümlerinde kullanılabilir; Starter sürümünde kullanılamaz. Lisans veritabanı entegrasyonunu içermiyorsa bağlantı testi ve çalışma zamanı haberleşmesi engellenir. Ayrıntılar için Lisans sayfasına bakın.
ODBC veri kaynağı tanımlama
Bağlantı metninde DSN kullanılacaksa, kanal tanımlanmadan önce 2WinScada sunucusunda bir ODBC veri kaynağı oluşturulur:
- Bağlanılacak veritabanının 64 bit ODBC sürücüsünü sunucuya kurun. 2WinScada servisi 64 bit çalıştığı için 32 bit sürücüler ve 32 bit veri kaynakları kullanılamaz.
- Windows'ta ODBC Veri Kaynakları (64 bit) aracını açın (Başlat menüsünde "ODBC" araması veya Windows Araçları).
- Sistem DSN sekmesini seçin. 2WinScada bir Windows servisi olarak çalıştığından, servis hesabından farklı bir Windows kullanıcısının Kullanıcı DSN kayıtlarını göremez.
- Ekle butonuna tıklayın, sürücüyü seçin ve Son butonuna tıklayın. Sürücünün kendi penceresinde sunucu, veritabanı ve kimlik doğrulama bilgilerini girerek veri kaynağını kaydedin.


İstediğiniz sürücü listede yoksa doğru sürücüyü edinmek için veritabanı yöneticinize başvurun.
Kanal Tanımı
Yeni kanal penceresinin Genel sekmesinde kanal adı girilir ve Bağlantı Tipi olarak Database seçilir. Bağlantı ayarları yapıldıktan sonra Kaydet butonuna tıklanır.

Bağlantı Parametereleri sekmesi:
| Alan | Açıklama | Varsayılan |
|---|---|---|
| Veri Kaynağı Adı | Sunucuda tanımlı ODBC veri kaynaklarını listeler. Seçilen veri kaynağı Bağlantı Metni içindeki DSN= değerine otomatik yazılır; metnin diğer bölümleri korunur. | Boş |
| Bağlantı Metni | ODBC bağlantı metni. Bağlantıda yalnızca bu metin kullanılır. Zorunludur. | DSN=ServerName;UID=;PWD=; |
| Bağlantıyı Test Et | Formdaki Bağlantı Metni ile sunucudan veritabanına bir bağlantı açmayı dener (bkz. Kayıtlı parola). | — |
Bağlantı metnindeki başlıca anahtarlar:
DSN: ODBC veri kaynağının adıUID: Veritabanı kullanıcı adıPWD: Bu kullanıcının parolası
Bağlantı metni örnekleri (köşeli parantezli değerleri kendi bilgilerinizle değiştirin):
DSN=<veri-kaynağı-adı>;UID=<kullanıcı>;PWD=<parola>;DSN tanımlamadan, sürücü adını doğrudan yazarak da bağlanılabilir:
Driver={ODBC Driver 17 for SQL Server};Server=192.168.1.10;Database=<veritabanı>;UID=<kullanıcı>;PWD=<parola>;Bağlantı metninde, 2WinScada'nın yalnızca gerekli tabloyu okuyabilen (yazma kullanılacaksa ilgili kolonu güncelleyebilen) ayrı bir veritabanı kullanıcısı kullanın.
Kayıtlı parola
Kaydedilmiş bir kanal açıldığında bağlantı metnindeki parola gösterilmez; PWD=******** olarak görünür ve kayıtlı parola korunur.
- Bağlantı metnini
PWD=********ile değiştirmeden kaydetmek kayıtlı parolayı korur. - Parolayı değiştirmek için
********yerine yeni parolayı yazın. PWD=değerini boş bırakmak veyaPWDanahtarını silmek parolayı kaldırır.- Izgarada kopyala/yapıştır ile oluşturulan yeni kanalda parola kopyalanmaz; yeniden girilmelidir.
Bağlantıyı Test Et, kaydedilmiş bir kanalda bağlantı metni değişmediyse kayıtlı parolayı kullanır. Bağlantı metninde sunucu, DSN, sürücü, kullanıcı gibi herhangi bir alan değiştirildiyse kayıtlı parola başka bir hedefe gönderilmez ve test Bağlantı metni kayıtlı kanaldan farklı olduğu için kayıtlı parola kullanılamaz. hatasıyla (3056) durur. Bu durumda parolayı yeniden yazın veya kanalı önce kaydedip sonra test edin. Yeni (kaydedilmemiş) bir kanalda parolayı açıkça yazın.
Bağlantıyı Test Et başarılı olursa buton onay işaretli görünüme geçer. Test başarısız olursa ekranda genel bir hata mesajı görünür; sürücünün döndürdüğü ayrıntılı hata metni güvenlik nedeniyle yalnız servis günlüğüne yazılır.
Cihaz Tanımı
Her cihaz, kanalın bağlandığı veritabanındaki bir tabloyu temsil eder. Genel sekmesinde Adı ve Aktif alanları diğer protokollerdeki gibi belirlenir.

Parametreler sekmesi:
| Alan | Açıklama | Kural |
|---|---|---|
| Tablo Adı | Verilerin okunacağı tablo | Zorunlu; en az 2 karakter |
| Zaman Kolon Adı | Satırın güncellenme zamanını tutan kolon. Girilirse her adres için en son zamanlı satır okunur. | İsteğe bağlı |
| Adres Kolon Adı | Değişkeni tanımlayan değerin (ad veya numara) bulunduğu kolon. Tag Adres alanları bu kolondaki değerlerle eşleştirilir. | Zorunlu |
| Değer Kolon Adı | Değişkenin güncel değerinin bulunduğu kolon | Zorunlu |
| Yazma Değeri Kolon Adı | Tag'e yazılan değerin kaydedileceği kolon. Boş bırakılırsa yazma yapılamaz. Değer Kolon Adı ile aynı kolon da girilebilir. | İsteğe bağlı |
| Tag Kalitesi Kolon Adı | Değerin geçerli olup olmadığını belirten kolon | İsteğe bağlı |
| İyi Kalite Değeri | Kalite kolonunda "iyi" anlamına gelen değer (örn. 1, true veya OK) | Kalite kolonu kullanılıyorsa doldurulmalıdır |
| Sadece Tetiklendiğinde Tarama Yap | İşaretlenirse tablo periyodik okunmaz; yalnızca dışarıdan tetiklendiğinde okunur (bkz. Tetiklemeli tarama). | Kapalı |
Ad boşluk veya ayrılmış sözcük içeriyorsa veritabanının kendi tırnaklama biçimiyle yazın (örn. SQL Server için [Tag Değerleri], PostgreSQL için "TagDegerleri"). Şema adı gerekiyorsa tablo adıyla birlikte yazılabilir (örn. dbo.TagValues).
Örnek tablo:
| tag_id | tag_value | updated_at | quality |
|---|---|---|---|
| 1001 | 15.74 | 2026-01-23 10:35:07 | 1 |
| 1002 | -23.38 | 2026-01-23 10:35:07 | 1 |
| 1003 | 13.53 | 2026-01-23 10:35:07 | 0 |
Bu tablo için Tablo Adı TagValues, Adres Kolon Adı tag_id, Değer Kolon Adı tag_value, Zaman Kolon Adı updated_at, Tag Kalitesi Kolon Adı quality ve İyi Kalite Değeri 1 girilir.
Okuma sorgusu
Zaman Kolon Adı boşsa tablonun tüm satırları okunur. Bu durumda tabloda her adres için tek satır bulunmalıdır; aynı adresli birden fazla satır varsa hangisinin değer olarak kalacağı garanti edilmez.
Zaman Kolon Adı girilmişse yalnızca tanımlı tag adresleri sorgulanır ve her adres için en son zamanlı satır alınır.
WARNING
Zaman Kolon Adı kullanıldığında adres kolonu sayısal olmalı ve tag adresleri yalnız sayı olarak girilmelidir. Adres kolonu metin ise Zaman Kolon Adı alanını boş bırakın ve tabloda her adres için tek satır tutun.
Okuma kuralları:
- Sorgu en fazla 30 saniye sürebilir; süre aşılırsa okuma başarısız sayılır.
- Bir sorgu en fazla 100.000 satır döndürebilir. Daha fazla satır dönerse okuma başarısız olur; büyük geçmiş tablolarında Zaman Kolon Adı kullanın veya yalnızca güncel değerleri tutan bir tablo ya da görünüm (view) okuyun.
- Tag Kalitesi Kolon Adı girilmemişse okunan tüm tag'lerin kalitesi Good olur. Girilmişse satırdaki kalite değeri İyi Kalite Değeri ile karşılaştırılır: kolon mantıksal (bool) tipindeyse
true/falseveya1/0olarak, sayısal tipteyse sayı olarak, metin tipindeyse birebir metin olarak. Eşleşmeyen satırların tag kalitesi Bad olur. - Okuma hatasında (bağlantı, sorgu veya zaman aşımı) cihazın ve o sorgudaki tag'lerin kalitesi Bad olur. Başarılı okumada cihaz kalitesi Good olur.
Tag Tanımı
Soldaki kanal ağacından cihaz seçilir ve tag tablosunda yeni tag eklenir (bkz. Tag Yönetimi).

| Alan | Veritabanı kuralı |
|---|---|
| Adres | Adres kolonundaki değerin metin karşılığı. Eşleştirme büyük/küçük harf duyarlıdır ve birebir yapılır (örn. 1001 veya Tank1_Seviye). |
| Veri Tipi | Değer kolonundaki veriye uygun tip. Bool ve String dışındaki tiplerde ondalık ayırıcı otomatik dönüştürülür. |
| Güncelleme Süresi[s] | Tablonun okunma periyodu. Aynı güncelleme süresine sahip tag'ler tek sorguda okunur; her farklı süre ayrı bir sorgu oluşturur. |
| Sadece Okuma | İşaretliyse 2WinScada bu tag'e yazmaz. |
Tag değeri yalnızca okunan değer değiştiğinde güncellenir. Tablodaki bir satırla eşleşmeyen tag'ler güncellenmez.
Yazma
Bir tag'e değer yazıldığında 2WinScada, adresi eşleşen satırlarda Yazma Değeri Kolon Adı kolonunu parametreli bir sorguyla günceller.
- Değer ve adres sorguya metin olarak eklenmez, parametre olarak gönderilir. Bool değerler 1 veya 0 olarak yazılır.
- Adres tek tırnak içinde girilmişse (örn.
'Tank1') metin olarak, sayı ise sayı olarak, diğer durumlarda metin olarak gönderilir. - Sorgu, adresi eşleşen tüm satırları günceller. Aynı adresin birden fazla satırı olan geçmiş tablolarına yazmayın.
- Yazmalar sıraya alınır ve her biri bir kez denenir; başarısız yazma tekrarlanmaz. Sırada en fazla 64 yazma bekleyebilir; sıra doluysa yeni yazma reddedilir.
- Yazmanın sonucu tag'in bir sonraki okumasında görülür. Yazma kolonu değer kolonundan farklıysa, değeri değer kolonuna aktarmak karşı sistemin sorumluluğundadır.
Tetiklemeli tarama
Sadece Tetiklendiğinde Tarama Yap işaretliyse cihaz, tetiklenene kadar tabloyu okumaz. Tetiklendiğinde Güncelleme Süresi[s] dikkate alınmadan cihazın tüm tag'leri bir kez okunur ve değerler değişmemiş olsa bile yeniden yayımlanır.
Tarama iki yolla tetiklenebilir:
- Sayfa betiklerinden:
await this.srt.triggerDatabaseScan(<cihaz-id>); - 2WinScada servis API'sinden, cihazın kimlik numarasıyla:
GET /api/DbClient/ScanTrigger?deviceId=<cihaz-id>Her iki yol da Editor rolüne sahip, oturum açmış bir kullanıcı gerektirir.
Sorun giderme
| Belirti | Kontroller |
|---|---|
| Veri Kaynağı Adı listesi boş | Veri kaynağını 64 bit ODBC aracında Sistem DSN olarak tanımlayın. Alternatif olarak Bağlantı Metni alanına Driver= ile başlayan bir bağlantı metni yazın. |
Bağlantıyı Test Et 3056 hatası veriyor | Bağlantı metni kayıtlı kanaldan farklı. Parolayı ******** yerine yeniden yazın veya kanalı önce kaydedin. |
| Bağlantıyı Test Et başarısız | Servis günlüğündeki sürücü ayrıntısını, sunucu adresini, kullanıcı adı ve parolayı, veritabanı sunucusuna ağ erişimini ve 64 bit sürücünün kurulu olduğunu kontrol edin. Lisansın veritabanı entegrasyonunu içerdiğini doğrulayın. |
| Cihaz ve tag kalitesi Bad | Tablo Adı ve kolon adlarının yazımını, kullanıcının tabloyu okuma yetkisini ve sorgunun 30 saniyede tamamlandığını kontrol edin. |
| Zaman Kolon Adı girilince okuma duruyor | Adres kolonu metin ise Zaman Kolon Adı alanını boş bırakın (bkz. Okuma sorgusu). |
| Tag değeri hiç güncellenmiyor | Tag Adres değerinin adres kolonundaki değerle birebir aynı olduğunu (büyük/küçük harf, boşluk) kontrol edin. |
| Tag kalitesi sürekli Bad | İyi Kalite Değeri alanının kalite kolonundaki "iyi" değerle aynı olduğunu kontrol edin. |
| Okuma, satır sayısı nedeniyle başarısız | Tablo 100.000 satırdan fazla döndürüyor. Zaman Kolon Adı kullanın veya güncel değerleri içeren bir görünüm (view) okuyun. |
| Yazma etkisiz | Yazma Değeri Kolon Adı alanının dolu olduğunu, Sadece Okuma seçimini, kullanıcının güncelleme yetkisini ve adres değerinin tablodaki satırla eşleştiğini kontrol edin. |
| Tetiklemeli tarama çalışmıyor | Cihazın aktif olduğunu, doğru cihaz kimliğinin kullanıldığını ve tetikleyen kullanıcının Editor rolüne sahip olduğunu kontrol edin. |