İçeriğe geç

Animation

Bir animasyon, bir SVG dosyası ile o SVG’deki nesnelere bağlanmış davranışlardan oluşur. Bu sayfa ekranın sıfırdan nasıl kurulduğunu anlatır.

Animation ekranı — tasarım tuvali ve araç çubuğu

Yeni animasyon formu

AlanZorunluAçıklama
NameEvetEkran adı — proje içinde benzersiz
DescriptionHayırAçıklama
Join AnimationHayırBu ekranın birleşeceği başka bir animasyon
BackgroundHayırArka plan rengi; Follow shell theme ile arayüz temasına bırakılabilir
DurationEvetGüncelleme periyodu (ms)
Play OrderEvetBirden fazla ekran varsa sıralama
Play at Main?HayırAna ekran olarak açılsın mı
Page IconHayırÇalışma zamanı sayfa listesinde adın yanında görünecek ikon
AlignmentEvetEkranın pencere içinde nasıl hizalanacağı
Start fromEvetBoş tuval, hazır şablon veya SVG yükleme
Resolution—Tuval boyutu; tipik SCADA ekranı 1920×1080

Start from üç seçenek sunar ve ekranı nasıl kuracağınızı belirler:

SeçenekNe yapar
Blank canvasBoş bir tuvalle başlar; çizimi platformun kendi tasarımcısında yaparsınız
TemplateHazır bir şablondan başlar
Upload SVGDışarıda hazırlanmış bir SVG dosyasını yükler

Platformun kendi tasarımcısı seçim ve kaydırma araçları, ızgaraya yapışma (snap) ve klavye kısayolları sunar — basit ekranlar için harici bir editöre ihtiyaç duymazsınız.

Karmaşık şemalar, ölçekli yerleşimler veya kurumsal bir çizim kütüphanesi söz konusuysa SVG’yi harici bir editörde (örneğin Inkscape) hazırlayıp Upload SVG ile getirmek pratiktir. Bu durumda SVG id değerleriyle uğraşmanız gerekmez — platform ağacı tarar ve her nesneyi seçilebilir hale getirir; yine de anlamlı id vermek sonradan işinizi kolaylaştırır.

Ekrandaki bir nesneye tıklayıp Element Editor’ü açarsınız; nesnenin ne yapacağını orada seçersiniz. Her bağlama bir animation element’tir.

AlanAçıklama
DOM IDSeçilen SVG nesnesinin kimliği — otomatik alınır
TypeNesnenin ne yapacağı (aşağıdaki tablo)
Expression TypeDeğerin nasıl hesaplanacağı
ExpressionDeğerin kendisi — değişken adı, formül veya yapılandırma
PropsTipe özel ek ayarlar
StatusAktif / pasif

Element Editor’ün ayrıntısı: Element Editor →

Tip, nesnenin ne yaptığını belirler.

TipNe yaparAyrıntı
GetDeğeri metin olarak yazar→
GetSymbolDeğere göre sembol gösterir—
ColorNesnenin rengini değiştirir→
BarDeğere göre çubuk doldurur→
ScaleNesneyi ölçekler→
OpacitySaydamlığı değiştirir→
BlinkKoşulda yanıp söndürür→
RotateNesneyi döndürür→
MoveNesneyi kaydırır→
PipeBoru/hat akış animasyonu→
TooltipÜzerine gelince bilgi balonu→
ImageDeğere göre resim değiştirir→
AlarmIndicationAlarm durumunu gösterir→
AnimateScript ile sürülen animasyon→
ChartGrafik bileşeni→
DatatableTablo bileşeni→
SliderKaydırıcı ile değer yazar→
ClickTıklama olayı→
MouseDown / MouseUp / MouseOverFare olayları→
IframeDış sayfa gömer→
FaceplateFaceplate açar→
QRCodeGenerationQR kod üretir—

Tip listesi seçtiğiniz SVG nesnesinin türüne göre süzülür — her tip her nesnede anlamlı olmadığı için. Bir daireye “metin yaz” diyemezsiniz, bir gruba çubuk doldurulamaz.

Her nesnede kullanılabilen ortak tipler:

Color · Rotate · Move · Opacity · Scale · Blink · Bar · Pipe · Tooltip · AlarmIndication · Click · MouseUp · MouseDown · MouseOver

Nesne türüne göre eklenenler:

SVG nesnesiEk olarak sunulanlar
text, tspanGet
rectChart, Datatable, Iframe, Image, Slider, GetSymbol, Faceplate, QRCodeGeneration
g (grup)Animate, Iframe, Faceplate — buna karşılık Bar listeden çıkar
imageIframe

Aradığınız tip listede yoksa sebebi genellikle budur: yanlış nesne seçilmiştir. Bir gösterge grafiğini bağlamak için bir rect, değer yazdırmak için bir text seçmeniz gerekir.

Expression tipi, değerin nereden geldiğini belirler. Tipten bağımsızdır: aynı Color bağlaması değerini doğrudan bir etiketten de alabilir, bir formülden de.

TipDeğer nereden gelir
TAGDoğrudan bir değişken
EXPRESSIONYazılan bir ifade
NUMERICSabit sayı
TEXTSabit metin
SWITCHDeğere göre eşleme tablosu
SETDeğişkene yazma (etkileşim tiplerinde)
TETRADört durumlu renk eşlemesi
ANIMATIONBaşka bir animasyon
FACEPLATEBir faceplate
SUBVIEWAlt görünüm
CUSTOM HTMLBir Custom HTML sayfası
ALARMAlarm durumu
ROLEKullanıcının rolü — role göre gösterim
HARD LOCKDonanımsal kilit durumu

Ekrana iki script bağlanabilir ve ikisi de her değerlendirme turunda çalışır — ekran açılıp kapanırken bir kez değil:

Her turda:
1. Pre kodu
2. Eleman ifadeleri (tüm bağlamalar)
3. Post kodu
↓ Duration kadar bekle
↑ başa dön

Yani Pre, elemanların okuyacağı bir şeyi hazırlamak; Post ise elemanlar hesaplandıktan sonra toparlamak içindir.

Pre/Post kodunda ve eleman ifadelerinde hazır gelen bağlar:

DeğişkenTipAçıklama
__firstScanBooleanİlk turda true, sonrasında false
__animNameStringÇalışan animasyonun adı. Bir join şablonu değerlendiriliyorsa birleşilen animasyonun adı
__parametersNesneEkranın placeholder parametreleri — JSON’dan ayrıştırılmış olarak gelir
langStringAktif dil

__parameters bir nesnedir; alanlarına doğrudan erişirsiniz (__parameters.motorId). Üzerinde ayrıca JSON.parse çağırmayın, hata verir.

__firstScan, yalnız bir kez yapılması gereken işi ayırmanın yoludur — tarihçeyi çekmek gibi. Her turda çalıştığı için bu olmadan aynı sorgu saniyede bir tekrarlanır:

// Pre: geçmiş veriyi yalnızca ilk turda çek
if (__firstScan) {
var endMs = ins.now().getTime();
var logs = ins.getLoggedVariableValuesByPage(
['ActivePower_kW'],
ins.getDate(endMs - 3600000), ins.getDate(endMs), 0, 30
);
}

Kıyaslama için, aynı işin korumasız hâli:

// Pre: son bir saatin verisini al
var endMs = ins.now().getTime();
var logs = ins.getLoggedVariableValuesByPage(
['ActivePower_kW'],
ins.getDate(endMs - 3600000), ins.getDate(endMs), 0, 30
);

Aynı ekran çalışma zamanında — dört bağlama da canlı değerle sürülüyor

Yukarıdaki ekran, bu sayfadaki adımlarla kurulmuş bir örnektir: iki Get bağlaması değerleri metin olarak yazıyor, bir Color bağlaması motor lambasını sürüyor, bir Bar bağlaması tank seviyesini dolduruyor.

Ekran açıkken tarayıcı, Duration alanında belirtilen aralıkta sunucuya bir değerlendirme isteği gönderir; sunucu ekrandaki tüm elemanların ifadelerini tek seferde çalıştırıp sonuçları döndürür ve bağlamalar kendiliğinden güncellenir. Sayfa yenilemeye gerek yoktur.

Bir tur beklenen sürede dönmezse — Duration’ın on katı — tarayıcı turu yeniden başlatır, yani geçici bir kopma ekranı kalıcı olarak dondurmaz.

Aynı tasarım, farklı ekipmanlar için tekrar kullanılabilir. Bir “motor detay” ekranı bir kez hazırlanır ve her motor için aynı ekran farklı değişken setiyle açılır.

Bunu sağlayan şey animasyonun placeholder tanımlarıdır: ekran, değişken adlarını sabit yazmak yerine parametre üzerinden alır ve bu parametreler script tarafında __parameters ile okunur. Ekran parçası düzeyinde aynı işi Faceplate görür.

Animasyonun kendisinde bir rol listesi yoktur. Erişim iki ayrı yerde yönetilir:

DüzeyNasıl
Ekrana erişimEkran bir özel menüden açılır; menünün hangi rollere görüneceği rol-menü yetkilendirmesinden belirlenir
Ekran içindeki nesneye erişimHer bağlama bir erişim grubuna bağlanabilir. Gruba dahil olmayan kullanıcıda o eleman gösterilmez

Eleman düzeyindeki bağlama, Element Editor formunun ACCESS bölümünden yapılır. Varsayılan olarak bir bağlama hiçbir gruba bağlı değildir ve herkese görünür.

Tasarımcının önizlemesinde bir View as seçici vardır: ekranı kendi görüşünüz (“Me”) yerine bir rolün ya da bir erişim grubunun göreceği gibi gösterir. Hangi nesnelerin gizleneceğini kaydetmeden görmenin pratik yoludur.