Selam, bu uzun bir yazı olacak, Unified RT panellerde Faceplate tasarımını görürken bir yandan da bir PLC otomasyonunda fiziksel giriş ve çıkışların nasıl ekrandan manual kontrol edileceğini göreceğiz.
Daha önce Wincc Comfort HMI ile faceplate tasarımı üzerine bir yazım olmuştu. Bu seferinde Unified HMI üzerinde yapacağız. Benzer olmasını beklerken , birçok farklılık olduğunu gördüm ve bunları sizinle paylaşmak istedim. Ayrıca uzun zamandır yazmak istediğim PLC otomasyon sistemlerinde giriş ve çıkışların manual kontrol edilmesi konusunu da bu yazıyla alakalı olarak içine katmak iyi olacak.
Ben gıda proses otomasyonu işleri yapıyorum ve gıda işleme sistemlerinde akışın durmadan devam etmesi için bir çok durumlarda sisteme manual müdahaleler gerekir. Örneğin bir seviye swici arızalandıysa ve operatör tankta ürün olduğunu biliyorsa manual olarak swici varmış gibi gösterebilmelidir. Swicin değişimi ancak tanktaki ürünün bitmesi sonrasında yapılabileceği için ve ürün kaybı olmaması için benzer manual müdahaleler zorunludur.
TiaPortal'da S7-1200 CPU ve Wincc Unified HMI içeren bir proje
Başlamak için bir S7-1200 PLC ve bir Unified panel olan yeni bir proje oluşturalım. Ben 1212 serisi bir CPU ve MTP1000 unified comfort panel kullandım.
Bir network bağlantısı da ekledim. Ben otomasyon projesine başladığımda ilk işim bir IO listesi hazırlamak oluyor. Bu amaçla bir deneme liste oluşturalım. CPU ünitemiz üzerinde dijital giriş ve çıkışlar var. Analog giriş ve çıkış örnekleri için de bir 4-20 mA analog giriş-çıkış kombi modül ekleyelim.
Fiziksel alt yapı tamam. IO listesini ben excel dosyası (ya da Open Office Calc dosyası) olarak hazırlıyorum. Bu örnek için de şu dosyayı oluşturdum.
Bu tabloda ilk sütun (A sütunu) PLC modülü üzerindeki fiziksel bağlantı noktasının üzerindeki yazı oluyor. İkinci sütunda ise programımda ve ekranlarımda kullandığım IO nesnesi değişken isimleri var. Üçüncü sütun gördüğünüz üzere açıklamanın yer aldığı sütun. Dördüncü sütunda ise PLC programında yapılandırılacak olan IO adres bilgileri var, donanım yapılandırmasında bu adresler verilecek. Beşinci ve altıncı sütunlar ise bilgilendirme amaçlı konulmuş. Ben otomasyon projesin başlarken önce bu listeyi hazırlar elektrik sorumlusuna veririm, şeması panosu ona ait artık, benden çıkar.
Öncelikle bu listeye göre IO modüllerinin adreslerini donanım yapılandırmasında tanımlamak gerekiyor. CPU üzerindeki adresler zaten CPU modülünü donanıma eklediğimizde otomatik olarak bu adreslerle oluşturuluyor. Analog giriş/çıkış modülünün adreslerini de hazırladığımız listeye göre verelim.
Sıradaki içimiz modül özelliklerindeki IO tags sekmesinde fiziksel bağlantılar için verdiğimiz adresleri yazmak. Burada direk listemizden kopyalayıp grup halinde sütunları yapıştırmak mümkün.
Benzer şekilde analog giriş/çıkış modülünü de yaparsak.
IO İsimlendirmelerindeki Mantık
Bir PLC programı yazarken dışarıdan fiziksel girişlere bağladığımız değişkenleri program içerisinde kullanmak akıllıca değil. Bunun iki sebebi var. Birincisi listede program yazıldıktan sonra , ne bileyim , mesela belli bir kablo grubunu bir araya falan toplamak sahada pano montajı için daha uygun olduğunda bir tek yerde değişiklik yapıp işi bitirmek ve hakimiyeti kaybetmemek lazım. Bu benzer şekilde bir giriş ya da çıkış bozulduğunda sağlam olan boştaki birine bağlayıp programa bulaşmadan işi bitirmek için de gerekli. İkinci ve en önemli sebep ise , biz bu girişleri manual kontrol edebilmek için manual kontrol rutinlerinden geçirerek otomasyon programımızda kullanacağız. Yani operatör ekrandan bir swicten sinyal gelmediği halde geliyor olarak gösterirse otomasyon programımız o sinyal geliyormuş gibi çalışmaya devam etmelidir. Bu yüzden program içerisinde işlenmiş giriş değerleri kullanılacak, bunlar sa fiziksel bağlantı noktaları yani force edilmedikten sonra fiziksel değeri ne ise o.
Aynı işlemin tersini çıkışları verirken yapacağız. Otomasyon programı çıkış için bir değer oluşturacak, ama biz o değeri çıkışa vermeden önce işleyeceğiz. Operatör manual olarak otomasyonun verdiğinden başka bir değer vermek zorunda kalabilir.
Laf aramızda burada operatör deyip duruyorum da bu sıradan bir operatör değil , yaptığı müdahalelerin ne sonuçlar doğuracağını prosese hakim olarak bilen gelişmiş bir operatör. Buna biz gelişmiş operatör diyoruz (Advanced Operator) ve şifrelerle bir üst yönetim yetkisine sahip yapıyoruz.
Analog giriş ve çıkışlarda ise manual kontrolden başka bir şey daha gerekiyor. Analog girişler PLC tarafından okunurken 4-20 mA'e karşılık 0 - 27648 arasında bir tam sayı verir bize. Ancak bizim bu değeri mesela 0-150 santigrad dereceye ya da %0-%100 seviyeye ya da 0 - 6 Bar'a çevirmemiz gerekecek yani Real bir sayı. Bu bir scaling (ölçeklendirme) işlemidir ve bunu da girişi otomasyon programında kullanmadan önce yapmamız gerekiyor. Manual değer girilmesi de tabi ki bu ölçeklendirmelere bağlı olduğundan manual kontrol ve ölçeklendirme işleri analog değerler için aynı yerde yapılmalıdır.
Analog çıkışlarda ise otomasyondan çıkan real değeri 0 - 27648 arasında bir tam sayı değere ölçeklendirmemiz gerekir ki bunu fiziksel çıkışa yazalım ve 4-20 mA arası bir çıkış elde edelim.
Ne çok konuştuk, neyse programımıza dönelim.
Örnek IO Listesinde Neler Var
Listemizde en üstte acil duruş butonu girişi var. Diğer girişler sadece çıkışların feedback'leri, çıkışların durumuna göre bu geri besleme bilgileri istediğimiz gibi olmazsa alarm vermek , belki de otomasyon programına bazı eylemler yaptırmak gerekebilir. Oraya bedava konmamıştır herhalde. P01 pompasının sadece ON feedback'i var, yani enerjilenince gelen FB. Mantıken P01 pompası enerjili iken bu FB gelmesi ya da tersine enerjili değilken bu FB'in gelmemesi koşulu var. Aksi olursa bir süre beklenip çıkış için alarm üretmeliyiz. V01 vanasında ise OFF feedback var yani çıkış enerjisizken FB sinyali gelmesi bekleniyor, az evvelkinin tam tersi. Demek ki vananın kapalı olduğundan emin olmak çok önemli az da olsa açık olması kabul edilmiyor. V02 vanasında ise hem ON hem de OFF feedback var. Demek ki bu vananın tamamen açık ve tamamen kapalı olduğundan emin olunmak isteniyor. V03 vanasına ise FB konmamış, bu vana da mesela ucuza gelsin diye FB konmamış olabilir.
Analog girişlerimizde 4-20 mA analog değerler gelecek. Bir sıcaklık sensörümüz var, ki etiket değeri 4-20mA'e karşılık 0-150 derece olarak bize verilmiş. Gıda prosesinde çok kullandığımız bir sıcaklık sensörü modeli. Bir tane de seviye okuyucu var tanktaki ürün seviyesini okuyor olabilir. 20 mA gönderdiğinde tank %100 dolu olacakmış. Bu bir şamandıra sensör, basınç sensörü veya ultrasonik sensör olabilir.
Analog çıkışlarımızda pompanın hızı ve buhar vanası açıklığını koymuşuz. Her ikisine de otomasyon programımızdan 0-100 arası değer üretiriz ve buna karşılık 4-20 mA çıkışa verilir.
S7-1200 Dijital Giriş İşleme Programları
PLC programlarını oluşturmaya başlayalım. En kolayı dijital girişleri işleyen program. Bu yazı boyunca bir sürü PLC ve HMI programı yazacağız. En iyisi kullanacağımız fonksiyonların ve data blokların bir resmini verelim de başımıza neler gelecek ön bilgimiz olsun.
Vay vay vay, önümüzde daha çok yol var. Bunların dışında bir de HMI programları gelecek. Ancak bu alt yapıyı bir kurduktan sonra , ileriki projelerde standart bir yapı kurulmuş olacak ve bir ofis tablosundan ya da bir yardımcı Windows programından ya da yapay zekadan yaralanarak , başta oluşturduğumuz IO listesinden bu programlara 1 saat içinde geçebilirsiniz. Ben bugüne kadar en çok ofis tablo dosyaları kullandım, son zamanlardaise VueJs kullanarak hazırladığım bir single page web app (SPA) kullanıyorum.
Şimdi biz uzun yolu tercih ederek bu kodları tek tek , satır satır oluşturacağız. Öğrenmek için mecburuz.
Her otomasyon programımda en üstteki OB31 periyodik sistem programı bulunur. Task100ms adını verdiğim bu periyodik çalışan OB 100 milisaniyede bir tarama çalışıyor. Doğal olarak bunun içinde çağırdığım tün fonksiyonlar da 100 milisaniyede bir çalışıyor. Bu sayede o fonksiyonlar içerisinde zaman sayma ve kontrol işlerini kolayca yapabiliyorum. Bu sistem fonksiyonunu şu özelliklerle programlara ekleyelim.
Programlama dili olarak Ladder pek kullanmıyorum, genelde ihtiyaçlarıma göre Function Block Diagram (FBD) ve Structured Control Language (SCL) programlama dillerini kullanırım. T100ms programlamasında da FBD kullanacağız.
Şimdilik T100ms fonksiyonu içi boş, bir şey yazmayacağız. Dijital girişlerle ilgili bir ihtiyacımız yok. Peki dijital girişler için bu programların hangileri kullanılacak?
IO klasörü altında tüm giriş/çıkışları işleyecek fonksiyonlarımız ve data bloklarımız toplanmış durumda. DIGIN_BITS data bloğu (DB200) işlendikten sonra otomasyon programımızda kullanacağımız dijital girişleri içeriyor ve tabii ki Bool değişkenlerden oluşuyor. IO listemizde dijital giriş olarak işlenecek sadece EMRG01 acil duruş düğmesi var. Diğer girişlerin hepsi dijital çıkışların feedback'leri. Aslında yanlış yapmışız, bir otomasyon programında acil duruş düğmesi operatörün ekrandan manual değer girebileceği bir şey olmamalı, eğer bu buton çalışmazsa sistemde sıkıntı olunca butona basılarak sistemin durdurulması engellenememesi gerekir. Neyse şimdilik örnek yapıyoruz, amaç dijital girişi nasıl işleriz görmek.
DIGIN_INTS data bloğu (DB201) bir dijital girişi işlerken bize yardımcı olacak bitleri içinde toplayacağımız tamsayı değerlerden oluşan bir data blok. İçinde her dijital giriş için bir tamsayı (Int) değer olacak. Bu tamsayı değerler HMI animasyonlarında ve manual kontrollerde gereken bitleri de içerir.
Öncelikle IO listemizden işlenecek her dijital giriş için bu data bloklarında değişkenler oluşturalım. Burada IO listesi tablosundan kopyalayarak değişkenleri oluşturabiliriz. Dediğim gibi şimdilik sadece bir tane girişimiz var.
DIGIN_BITS data bloğu içine şunları girelim,
Her bir dijital giriş için bir Bool değişken var ve bunlar HMI programlarında kullanılmayacak, HMI için DIGIN_INTS data bloğu içindeki tamsayı değerlerin bitleri kullanılacak.
DIGIN_INTS data bloğu içine de şunları girelim,
Her bir dijital giriş için bir tamsayı (integer) değişken olacak ve bu değişkenlere HMI programları erişebilecek. Bu 16 bit tamsayının içinde dijital girişleri işlemek ve ekran animasyonunda kullanmak için yararlanacağımız bit numaraları şöyle,
- Bit 0 : İşlenmiş olan değer, yani DIGIN_BITS içindeki bool değişkene konacak ve otomasyon programı içinde işlenmiş olarak kullanılacak değer. Bu bit ekran animasyonunda o girişin aktif olduğunu gösterir, mesela bir seviye swici ise bu bit setli ise içi yeşil renk olur.
- Bit 1 : Dijital girişin manual olarak kontrol edildiğini gösterir. Bu bit setlenirse o giriş manual kontrol ediliyor demektir. Ekrandan operatör isteğiyle setlenir veya resetlenir ve setli olursa giriş gösteren nesnenin etrafında ekranda sarı bir çerçeve gösterilir ki o girişin manual kontrol altında olduğu ekrana bakan tarafından bilinsin.
- Bit 2 : Alarm biti, bu bit setliyse o girişle ilgili bir alarm durumu söz konusudur. Dijital çıkış olursa alarm feedback hatası olabilir ama dijital giriş için sadece duruma özel olabilir. Bu bit girişi işlediğimiz programın dışından setlenir, örneğin fieldbus IO ise ve bus bağlantısında sorun olup giriş değerine erişilemiyorsa bu bit setlenerek HMI üzerinde alarm verilmesi ve görselinde kırmızı yakıp sönerek sıkıntı olduğu gösterilmesi mümkündür.
- Bit 3 : Alarm engelleme biti (Mask deriz). Bu biti operatör setleyerek o giriş ya da çıkışın alarm vermesini engeller. HMI animasyonunda o eleman etrafında kırmızı bir çerçeve çizilerek alarmının engellendiği gösterilir.
- Bit 4 : Manual değer biti. Bit 1 setliyken bu bitin değeri girişin manual değeri olarak otomasyon programına gönderilir. Bu bit animasyonda kullanılmıyor ama girişe manual değer vermek için kullanacağımız popup pencerede setlenir ya da resetlenir.
Şimdi bu esaslar doğrultusunda dijital girişi işleyen fonksiyonumuz olan DIGIN_FC fonksiyonumuzu (FC 200) oluşturalım.
DIGIN_FC Tasarımı
Bu fonksiyonun görevi fiziksel girişi alıp yukarıda verdiğimiz bitlere göre manual ya da otomatik olarak bir çıkış değeri oluşturacak. Bu fonksiyonumuzun dış ortamla olan bağlantıları şöyle.
FIZ_INP fonksiyonumuza giriş olarak fiziksel girişten gelen değeri veriyor. Bu fonksiyonu kullanırken mesela acil duruş butonu için bur girişe I40_0_0 değişkeni (%I0.0) bağlanacak.
AL_RST girişi ise eğer bu giriş için alarm verildiyse (yani alarm biti olan bit-2 setlendiyse) bu giriş setlenince fonksiyon alarm bitini sıfırlayacak. Bu girişe PLC hafızasında tanımlayacağımız bool bir değişkeni bağlarız ve HMI ekranında bir buton yardımı ile alarmların sıfırlanmasını sağlarız.
LOG_OUT çıkışı otomasyon programına gönderilecek olan işlenmiş giriş değeri. Giriş otomatikteyse yani bit-1 sıfırsa direk olarak fiziksel giriş buraya konur. Eğer giriş manualdeyse bit-4'teki değer bu çıkışa verilir. Bu çıkış DIGIN_BITS data bloğunda girişimize karşı gelen değişkene bağlanır ve otomasyon programı da onu giriş olarak kullanır.
INP_WORD girişi temsil eden 16 bitlik word değişken yani DIGIN_INTS data bloğundaki girişle aynı isimdeki tamsayı değer. Bu değer fonksiyonumuza hem giriş hem çıkış olacak. Operatörün ekrandan değiştirdiği bitlerine göre işlemler yapılıp tekrar aynı tamsayı içine konarak fonksiyondan çıkılacak.
Bir de fonksiyon için geçici değişken olan MASK var bunu da fonksiyon içinde alarmın engellendiğini gösteren bit-3 değerinin aynısı. Çıkışları da incelerken neden dahili bu bool değişken var daha iyi anlayacağız.
Gelelim fonksiyonun içinde neler var. Bu fonksiyonu SCL program olarak yazdım.
SCL programı anlamakta sıkıntı çekecekler için bu programı Ladder diyagram olarak yazarsak şuna benzer bir şey olur,
Ben ladder diyagram dilinde program yazmayı verimli bulmuyorum, sadece basit otomasyonlarda güle eğlene iş yaparken kullanırım. Ama ciddi proses programları yazacaksam SCL kullanırım. 3-4 bin satırlık SCL kodları içeren fonksiyonlar yazdığım var. Aynı anda programın geniş bir kısmını görmek isterim, yukarıda ladder yazarken bile dikkat ederseniz kaç tane işi tek bir network içinde yaptım ki tek ekranda görünebilsin. Ama merak etmeyin böyle de çalışır.
Neyse, programı inceleyelim. Eğer giriş otomatikte ise (bit-1 sıfırsa) fiziksel giriş çıkışa verilir. Giriş manualde ise bit-4'teki manual değer çıkışa verilir.
İkinci olarak çıkışa verilen bu değer girişimizi temsil eden word'ün bit-0'ına da konuyor ki ekranda animasyonda kullanılsın.
Son olarak da alarm reset girişi setli ise ya da alarm engelleme biti (bit-3) setli ise alarm biti resetleniyor.
Sıra geldi hazırladığımız fonksiyonu girişlerimiz için kullanmaya. Bu amaçla daha önce programlar listesinde gösterdiğim INPUTS fonksiyonunu (FC ) kullanacağız. Tabii ki bu fonksiyon da SCL ile yazılacak. En önemli sebebi IO listesinden bu programa kodları otomatik hazırlayan harici yardımcı programlarım olması, yüzlerce satır programı tek tek yazacak değiliz, aynı şeyleri tekrarla dur olacak. Ne diyor usta yazılımcılar? Dont Repeat Yourself - Kendini Tekrarlayıp Durma, tekrarlayan benzer kodları bir şekilde kısaltmanın yolunu bul.
INPUTS Fonksiyonu
Bu fonksiyon içerisinde tüm dijital ve analog girişlerimizi işleyen kodlar olacak. Yegane dijital girişimiz olan acil duruş butonunu işleyen kodu yazalım.
O yukarıdaki DIJITAL yazan yorum satırlarını hazırlayan program yazmışlığım bile vardı , daha önce. Ama bunu üşenmedim elle yazdım. Mesela Ladder olarak aynı işi yapan bir kod yazsak,
Şeklinde olacaktı ama dediğim gibi ben o SCL kodların çoğunu tek tek yazmıyorum IO listesinden otomatik dönüştüren kodlar yazıyorum. Burada dikkati çeken sadece AL_RST değişkeni, bu değişken PLC giriş/çıkışlarında oluşan alarmları resetlemek için tanımlanmış bir memory biti. Bu bit operatör panelinden setlendiğinde tüm alarmları silmek niyetimiz var.
Fonksiyon çıkışı "DIGIN_BITS".EMRG01 değişkenine veriliyor ve tüm otomasyon programı acil duruş butonu girişi olarak bunu kullanacak.
Tabii ki INPUTS fonksiyonu bizim tanımladığımız bir fonksiyon ve bir sistem fonksiyonu olmadığı için kendi kendine çalışmayacak. Bir sistem fonksiyonu içinde çağrılması gerekir. Bu amaçla Task100ms sistem fonksiyonu içinde INPUTS fonksiyonumuzu çağıracağız. Gıda proses otomasyonunda 100 milisaniyede bir girişleri okumanın bir sakıncası olmuyor, programın bir çok şeyi kontrol ederken saniyede bir kere bile karar vermesi yeterli oluyor. Ancak sizin kullanacağınız programlarda çok daha seri karar vermek gerekiyorsa bu fonksiyonu daha sık çalışan bir sistem fonksiyonunda (mesela her taramada çalışan OB1 içinde çağırabilirsiniz)
Galiba hazırız. Bir çalıştırıp deneme yapalım. PLC programımızı simülasyonda çalıştıralım.
PLC girişi I40_0_0 değeri FALSE olduğu için "DIGIN_BITS".EMRG01 değeri de FALSE olarak çıkar. Ancak girişi manual olarak göstermek istersek, kontrol word değişkeninin bit-1 ve bit-4'ünü setleriz. Yani 18 değeri gireriz.
Fonksiyon çıkışı TRUE değer aldı ve 18 olarak girdiğimiz değer de 19 oldu, çünkü çıkış değeri de bit-0'a yazıldı yani değere 1 eklenmiş oldu.
Girişi force'layarak giriş varken nasıl göründüğüne bakarsak , tabii önce kontrol word'e sıfır değeri girelim ki oomatiğe dönsün.
Gördüğümüz gibi girişin force edilmiş olduğunu gösterir bir tik geldi I40_0_0 değişkeni yanına. Giriş fiziksel olarak mevcutken de manual olarak yokmuş gibi gösterebiliriz. Kontrol word'üne sadece bit-1'in olduğu 2 değerini girersek,
Gördüğümüz gibi fiziksel giriş olduğu halde otomasyona giden değer FALSE olarak gidiyor.
PLC programımız çalışıyor şimdi ekrana geçip bu giriş için animasyonları bir oluşturalım. Bütün PLC programlarını kapatın.
Unified HMI Programı
Öncelikle bir tamsayı değerin bitlerine göre animasyonları oluşturacağız. Geçici olarak HMI dahili tanımlı bir değişkenle yapalım daha sonra PLC değişkenine bağlarız. Screens bölümünde ANA EKRAN adında bir yeni sayfa ekleyerek başlayalım. HMI Tags kısmında da tempi adında bir integer yerel değişken ekleyelim. Denemeler yapmak için Runtime settings ayarlarında General sekmesinde Encrypted transfer bölümünde Activate encrypted transfer tikini kapatalım. Güvenlik sonra, önce öğreniyoruz.
Bu tamsayı değişkenin yukarıda bahsettiğimiz bitlerini değiştirebileceğimiz checkbox'lar oluşturarak başlayalım.
Checkbox elemanı bir tamsayı değere bağlanınca eleman sayısı arttırıldıkça o elemanın bağladığı bit, sıradaki bit oluyor. Yanına bir de IO Field elemanı ekledik ki tamsayı değeri de görelim. Şimdi simülasyonda çalıştırıp bitleri değiştirebildiğimizi bir görelim.
Dijital giriş animasyonlarında genelde daire şeklinde bir görsel kullanırım. İlk önce işlenmiş değeri yani otomasyon programının gördüğü değeri gösterelim. Sayfamıza 8 piksel çapında, çizgisi siyah, içi beyaz renk, çizgi kalınlığı 2 piksel bir daire ekleyelim. Backgroung - color animasyonunu tempi Tag'imizin bit-0 'ı ile yeşil olacak şekilde ayarlayalım.
Process - Tag değerini tempi olarak ayarlamayı unutmayalım. Hemen denemesini yapalım.
Harekete başladık. Sırada dijital girişimizin manuale alındığını gösteren animasyon var. Bunun için önceki dairemizin etrafında sarı renkli bir halka göstereceğiz ki operatör o girişin manuale alındığını anlasın. Önceki dairemizin altında kalacak şekilde 15 piksel çapında, hem içi hem çizgisi sarı olan (ya da çizgi kalınlığı sıfır olan) bir daireyi tam ortalayacak şekilde yerleştirelim. Animasyonunda Visibility özelliği ile Tag değerinin bit-1'ine bağlayalım. Bu sefer animasyon için Expression kullanalım.
Burada Expression seçerken default Visibility değerini de görünmez yapıyoruz. Dikkat edelim. Şimdi eşitliği yazmak için Expressions sekmesine geçelim.
Yazacağımız eşitliği hatasız yapmak için 3 nokta butonuna tıklayıp açılan kod yardımcısını kullanabiliriz. AND16() metodu 16 bitlik 2 sayıyı AND işlemine tabi tutuyor, kendisini Bitwise açılır listesinde bulabiliriz. Herhangi bir Tag'i eşitliğimize eklemek için en baştaki Tag işaretini tıklayıp Tag listesinden seçebiliriz. Son olarak bu eşitliğin sonucu True olunca Visibility değeri görünür olacak şekilde işaretlemeyi unutmayalım. Bu eşitlikler bazen animasyonları daha kolay yapabiliyor, aklınızın bir köşesinde bulunsun. Hadi bunu da deneyelim.
Yavaş yavaş ortaya çıkıyor. Alarm biti işlenmiş değerin üzerinde kırmızı yanıp sönen bir daire olacak. Çerçevenin içinde kalabilmesi için bu daire 7 piksel çapında, çizgi kalınlığı sıfır olacak. Visibility animasyonu bu sefer bit-2 değerine göre olacak. Ama görünürken eğer işlenen değer (yani bit-0) sıfırsa kırmızı-beyaz, değer true ise kırmızı-yeşil yanıp sönecek.
Visibility eşitliği böyle olacak tahmin edersiniz. Yanıp sönme animasyonu için Background color animasyonunu Tag'imizin bit-0'ına bağlıyoruz.
Bit-0'a bağlanacak hata yapmayalım. Denediğimizde kırmızı-beyaz ve kımızı-yeşil yanıp sönmeleri bit-0 ve bit-2 değerlerine göre test edebiliriz.
Sırada dijital girişimizin alarmının engellendiğini göstermek var yani bit-3 animasyonu. bu amaçla girişin etrafında kırmızı içi boş ince çizgili bir daire göstereceğiz. Çapı 15 piksel, çizgi kalınlığı 1 piksel, çizgi rengi kırmızı olan bir dairenin Visibility özelliğini bit-3 değerine bağlayıp önceki daireleri ortalayacak şekilde yerleştirelim.
Şimdi denersek bit-3'ü setleyince çerçevemiz görünür olacaktır.
Yapacağımız animasyonlar bu kadar, bit-4 gösterimine gerek yok, çünkü giriş manuale alınmadan bir anlamı yok ve manuale alındığında da zaten bit-0 bu değere eşit olacaktır. Biz girişin manualde olduğunu gösteriyoruz zaten. Ama bit-4 PLC değerleri ile oynarken manual kontrol amacıyla kullanılacak.
Sırada bu yazının başlığında bahsedilen Faceplate oluşturmak var.
Unified HMI Faceplate Oluşturmak
Bir tane girişi temsil eden animasyonlar yaptık. Ancak bütün bir proje düşünüldüğünde belki yüzlerce belki binlerce dijital girişimiz olabilir. Her biri için bunları kopyalasak bile dünya iş yapmamız gerekecek. Faceplate oluşturarak sadece bir yerde Tag bağlantısı girerek yeni dijital girişlerin animasyonunu yapabiliriz.
Öncelikle elimizde sağlam kopya kalsın diye daha önce hazırladığımız grubun bir kopyasını alalım. Gruptaki elemanların tümünü seçip, sağ tıklayıp, açılan menüden Create faceplate seçelim. Faceplate düzenleme penceresi açılacaktır.
Şu anda bütün dairelerdeki animasyonlar uçtu gitti. Peki neden yaptık o kadar şeyi diye sorarsanız, önce oranın mantığını ayrıca çözelim, şimdi aynı şeyleri bir daha yapmak zor olmayacak. Adım adım gitmek lazım. Pencerenin en sağında Libraries sekmesinde yeni eklediğimiz faceplate adını değiştirerek başlayalım.
İlk ayarlar şöyle. Faceplate özelliklerinde Background - fill pattern özelliğini transparent yapıyoruz. Genişlik ve yüksekliği 40 piksel yapıp görsellerimizi bu alanın tam ortasına koyuyoruz ki sembolümüzü grid ayarları 5 pikseldeyken yatay ya da dikey bir çizginin üstüne koyduğumuzda kolayca ortalayabilelim.
Sırada aynı animasyonları dairelerimize tanımlamak var. Peki faceplate'imize dışarıdan bağlanacak Tag'i nasıl tanımlayacağız.
Unified HMI Faceplate Tag Bağlantısı
Yukarıdaki sarı bilgilendirme bandını sağ üst köşesindeki çarpı işaretine basarak kapatırsak , karşımıza faceplate arabirimine ait (interface) sekmeler çıkacaktır. Sarı bandı merak etmeyin sol üst köşedeki ünlem işaretine tıklayınca tekrar görünür. Tag Interface sekmesinde Add new tıklayarak yeni bir Tag bağlantısı oluştururuz.
Şimdi bu Tag'i kullanarak animasyonlarımızın hepsini tanımlayalım. Örneğin,
Aslında animasyonlar duruyor ama bu bir kütüphane (library) elemanı ve kütüphane elemanları projeler arasında taşınabilir. Bu yüzden mantık olarak içinde bulundukları proje Tag'lerine erişmeleri yapısı gereği olanaksızdır. Yapacağımız tüm animasyonları tempi yerine ConnectedTag değişkenine bağlamak olacak. Daha sonra sayfamızda faceplate ara birimindeki bu özelliği istediğimiz proje tag'ine bağlayabiliriz.
İşimiz şimdilik bitti, sarı bandımızı tekrar açarak release the version linkine tıklayalım , böylece sisteme düzenlememizin bittiğini bildirelim ve HMI sayfamıza geri dönelim.
Unified HMI Sayfada Faceplate Kullanmak
Sağda Project Library başlığı altında yeni faceplate'imiz DijitalGiriş olarak görünüyor. Tutup sayfamıza çekelim ve ConnectedTag özelliğini tempi değişkenine bağlayalım.
Çalıştıralım ve tıkır tıkır çalıştığını görelim. İşler bitti sanıyorsunuz ama o kadar da kolay değil, daha çok yolumuz var.
devam edecek...






































Hiç yorum yok:
Yorum Gönder