FabyaVisionKullanım Kılavuzu
/

Python nesne modeli

6 dk okumaBetikler

Python betiklerinde hazır gelen scada nesnesi ve ona bağlı tag, sayfa, nesne, reçete, sistem ve dış dünya (veritabanı, dosya, program) üyeleri.

Hazır adlar

İçe aktarma gerekmeden görünen adlar yalnızca şunlardır: scada, HMIRuntime, SmartTags, ScreenItems, Layers, DataSet ve open(). Olay kodunda ve aksiyonlarda ayrıca Item ile Parent gelir. os, shutil, glob, tempfile, subprocess, pyodbc ve pathlib yerleşik değildir; import ile alınır.

Üye adları önce yazıldığı gibi, sonra snake_case ↔ PascalCase eşleşmesiyle aranır: back_color ile BackColor aynı özelliktir. Büyük / küçük harf farkı önemlidir. Tag, nesne özelliği, sayfa, DataSet, rapor kaydı, sistem tag'i, oturum ve bildirim kuralları VBS ile aynıdır; fark değer dönüşümünün Python olmasıdır.

Tag işlemleri

ÜyeAçıklama
scada.read("Ad", varsayılan)Değeri okur. Tag yoksa KeyError; varsayılan verilmişse onu döndürür.
scada.write("Ad", değer)Değeri tag'in türüne çevirip yazar. Sınırı aşan sayı ValueError, uyumsuz tür TypeError verir.
scada.read_many(["A", "B"])Sırayla okuyup liste döndürür.
scada.write_many({"A": 1, "B": 2})Sözlük ya da (ad, değer) çiftleri listesi yazar; ilk hata istisna olur, öncekiler yazılmış kalır.
scada.tags["Ad"]Sözlük gibi okur / yazar; in, len ve for çalışır.
scada.tag_exists("Ad"), scada.tag_names()Tag var mı, projedeki tag adları.
scada.get_bit("Ad", bit), scada.set_bit("Ad", bit, True)Tam sayı tag'in bir bitini okur / değiştirir (0 – 31); diğer bitlere dokunmaz.
scada.wait_for("Ad", değer, zaman_asimi=10.0, aralik=0.1)Tag değere gelene kadar bekler (değer verilmezse "doğru" olana kadar); süre dolarsa None döner. scada.wait_for(işlev, …) parametresiz işlevi doğru döndürene kadar çağırır.
scada.tagset(["A", "B"])TagSet: add, remove, read() (sözlük), write(eşleşme), items(), count.
scada.report_add("Rapor")Rapora kayıt ekler, kayıt numarasını döndürür. Rapor yoksa ValueError.

Tag nesnesi (scada.tag("Ad"))

.value (okur / yazar), .read(), .write(değer), .quality (192 iyi, 84 sınır dışı, 8 bağlantı yok, 4 tanımsız, 0 kötü), .timestamp, .last_error, .error_text, .datetime, .name, .prefix, .type.

VBS alışkanlığı

HMIRuntime.Tags("Ad") (.Value = x doğrudan yazar; hata olursa istisna fırlatmaz, .LastError dolar), HMIRuntime.Tags("Ad").Read() / .Write(değer), HMIRuntime.Tags.CreateTagSet(), SmartTags["Ad"] (değerin kendisini okur / yazar), HMIRuntime.BaseScreenName, HMIRuntime.ActiveScreen, HMIRuntime.Language, HMIRuntime.Trace.

Sayfa ve nesne

ÜyeAçıklama
scada.open_screen("Sayfa", onek="")Ana sayfayı değiştirir. Sayfa yoksa ValueError.
scada.open_window("Sayfa", onek=""), scada.close_window(ad)Açılır pencerede açar / kapatır.
scada.back(), scada.forward(), scada.open_home()Önceki, sonraki, başlangıç sayfası.
scada.screenÖndeki sayfa.
scada.screens["Sayfa"]Yalnızca açık sayfaların eşlemesi; kapalı sayfa KeyError.
Sayfa: .items["Nesne"]Sayfadaki nesne (items[0], in, len, for da çalışır).
Sayfa: .name, .access_path, .width, .height, .back_color, .zoom, .layers, .dataset, .refresh(), .activate(), .parentSayfanın adı, yolu, ölçüleri, 32 katmanı, kendi değer deposu.
Nesne: .visible, .enabled, .left, .top, .width, .height, .text, .back_color, .fore_color, .border_color, .font_name, .font_size, .font_bold, .font_italic, .font_underline, .process_value, .output_value, .rotation_angle, .transparency, .flashing_enabled, .min, .max, .unit, .layer, .tooltip, .parent, .name, .type, .activate()Yazılan değer oturum boyunca geçerlidir; projeye yazılmaz. .get("Özellik") / .set("Özellik", değer) adı metin olarak verilen özelliği okur / yazar; nesnenin kendi özellik adları da doğrudan nitelik gibi kullanılır. Olmayan ad AttributeError.
Katman: sayfa.layers[n].visible, .name, .min_zoom, .max_zoom (n: 0 – 31, nesnenin .layer değeriyle aynı).
scada.dataset["ad"]Bellekte duran ad / değer çiftleri (proje kurulunca sıfırlanır); get, pop, keys, items, clear, setdefault, in da vardır. sayfa.dataset sayfa başınadır.
scada.rgb(r, g, b), scada.color(sayı)Renk sayısı üretir / "#rrggbb" metnine çevirir.

Olay kodunda ve aksiyonlarda hazır adlar: Item (olayın nesnesi; sayfa olayında sayfa), ScreenItems (olayın sayfasındaki nesneler), Parent (olayın sayfası), Layers, DataSet. Modüllerde bunlar yoktur.

Reçete

scada.recipes projedeki reçete adlarının listesidir. scada.recipe("Ad") bir reçete nesnesi verir (olmayan reçete KeyError); reçete kayıtları reçetenin kayıt deposundadır.

ÜyeAçıklama
.records(), .names(), .count, .fields, .nameKayıtlar (alan adlarıyla sözlük), kayıt adları, kayıt sayısı, alan adları.
.get("Kayıt", varsayılan), reçete["Kayıt"]Tek kayıt; yoksa varsayılan / KeyError.
.insert(değerler, ad="")Yeni kayıt ekler; verilmeyen alanlar varsayılan değerini alır; sınırlar denetlenir. Kayıt adını döndürür.
.update("Kayıt", değerler), .delete("Kayıt")Verilen alanları değiştirir (diğerleri korunur) / kaydı siler.
.read_tags()Alanların tag'lerinin şimdiki değerleri ({alan: değer}).
.write_tags(kaynak)Kaynak (kayıt adı ya da sözlük) alanların tag'lerine yazılır; el sıkışma yoktur. Yazılan alan sayısını döndürür.

Reçete işlemleri olay günlüğüne recete türünde ("… eklendi (Python betiği)") yazılır. Ayrıntı: Reçete tasarımı.

Sistem

ÜyeAçıklama
scada.user, scada.user_nameOturumdaki kullanıcının adı ve tam adı; oturum yoksa boş metin.
scada.login_dialog(), scada.login(kullanıcı, şifre), scada.logout()Giriş penceresi (giriş yapıldıysa True), pencere açmadan giriş, çıkış.
scada.has_permission("yetki")Kullanıcının o yetkisi var mı (yetki kodu, adı ya da düzeyi). Projede böyle bir yetki yoksa ValueError; oturum yoksa False.
scada.languageLive dili numarası; atanırsa dil değişir ("en" gibi kod da verilebilir).
scada.project.name, scada.project.path, scada.computer, scada.windows_userProje, bilgisayar ve Windows kullanıcısı.
scada.now()Şimdiki yerel tarih ve saat (datetime).
scada.msgbox(metin, düğmeler=0, başlık="")İleti penceresi; basılan düğme numarasını döndürür (1 Tamam, 2 İptal, 3 Durdur, 4 Yeniden dene, 5 Yoksay, 6 Evet, 7 Hayır). Sabitler: scada.OK, YES, NO …; düğme takımları scada.YES_NO …; simgeler scada.ICON_QUESTION …
scada.inputbox(metin, başlık="", varsayılan="")Giriş kutusu; yazılan metin ya da Vazgeç / Esc için None. Yerleşik input() de aynı kutuyu açar.
scada.notify(metin)Bilgi penceresi gösterir ve beklemeden sürer.
print(…), scada.trace(…)Değerleri bir satırda birleştirip betik tanılamasına ve olay günlüğüne yazar.
scada.sleep(saniye), scada.stop()Bekler (arayüzü kilitlemez; 30 sn sınırına sayılmaz) / Live'ı kapatır.

Dış dünya (izne bağlı)

İzinÜyeler
Veritabanına bağlanmascada.db.connect("DSN=Ad;UID=k;PWD=s;") ya da pyodbc.connect(…) (import pyodbc). Bağlantı: query(sql, parametreler) (sözlük listesi), scalar(sql, parametreler), execute(sql, parametreler) (imleç; .rowcount), close(), with. İmleç: fetchone, fetchall, fetchmany, description. Parametre işareti ?.
Program çalıştırmascada.run(komut, goster=1), os.system, os.startfile, subprocess.run / call / Popen. Program başlatılır ama beklenmez; çıkış kodu gerçek değildir (0 görünür).
Dosyalara erişmeopen(yol, kip, encoding=…) (r, w, a, x, b), os (listdir, mkdir, makedirs, remove, rename, rmdir, stat, walk, path.*), shutil (copy, move, copytree, rmtree), glob.glob, pathlib.Path, tempfile.gettempdir / mkdtemp.
  • Veritabanı bağlantısı durumsuzdur: her komut kendi bağlantısını açıp kapatır (işlem, geçici #tablo, SET yok). Bağlantı hemen denenir; yanlış DSN connect'te hata verir. En çok 5000 satır döner, komut en çok 15 saniye sürer. commit() ve rollback() etkisizdir.
  • Göreli dosya yolları proje klasörüne göre çözülür (proje yoksa geçici klasör). Program klasörüne ve açık proje dosyasına yazılamaz (PermissionError). Metin kipinde encoding verilmezse okurken BOM / UTF-8 / Windows-1254 sırası denenir, yazarken BOM'suz UTF-8 kullanılır.
  • İzin kapalıyken ilgili çağrı PermissionError verir (try / except ile yakalanabilir).

Sınırlar ve dikkat edilecekler

  • Desteklenmeyen üyeler (HMIRuntime.Logging, AlarmLogs, DataLogs, Alarms, MenuToolBarConfig) çağrılınca NotImplementedError verir ve tanılama satırı yazar.
  • 3B sayfada nesne özelliği yazma NotImplementedError verir.
  • Çağrılar otomatik beklenir; await yazılmaz.

İlgili konular

FabyaVision 0.1.0 Kullanım Kılavuzu · 18 Ekim 2026© Fabyatek Yazılım Bilişim Teknolojileri Ltd. Şti.