Siemens S7 1200 PLC’lerde Organizasyon Blokları (OB’ler) nedir? Ne işe yarar?
OB’ler, kullanıcı programının yürütülmesini kontrol ederler. CPU’daki bazı olaylar, bir organizasyon bloğunun yürütülmesini tetikler. OB’ler birbirlerini çağıramazlar veya bir FC’den veya FB’den çağrılamazlar.
Bir diyagnostik interrupt’ı veya bir zaman aralığı interrupt’ı gibi sadece bir olay bir OB’nin yürütülmesini başlatabilir. CPU, OB’leri öncelik sınıflarına göre işler. Burada yüksek öncelikli OB’ler düşük öncelikli OB’lerden önce yürütülür. En düşük öncelik sınıfı 1 (ana program döngüsü için) iken en yüksek öncelik sınıfı 24 olmaktadır.
Program döngüsü OB
CPU, RUN modunda iken program döngüsü OB’leri yürütmeyi döngüsel olarak gerçekleştirirler. Programın ana bloğu bir program döngüsü OB’sidir. Burası, programınızı kontrol eden komutları yerleştirdiğiniz ve ilave kullanıcı bloklarını çağırdığınız yerdir. CPU’nun numara sırasına göre yürüttüğü çoklu program döngüsü OB’lerine sahip olabilirsiniz. Esas (OB1) varsayılandır.
Program döngü olayları
Program döngü olayı her program döngüsü (veya tarama) boyunca bir defa olur. Program döngüsü boyunca CPU çıkışları yazar, girişleri okur ve program döngü OB’lerini yürütür. Program döngü olayı istenir ve daima etkindir. Program döngü OB’lerine sahip olmayabilirsiniz veya program döngü olayı için seçilmiş çoklu OB’lere sahip olabilirsiniz. Program döngü olayı meydana geldikten sonra CPU en düşük numaralı program döngüsü OB’yi (genellikle “Main” OB 1) yürütür. CPU diğer program döngü OB’lerini program döngüsü içinde sırayla (sayısal düzen içinde) yürütür. Program yürütülmesi aşağıdaki zamanlarda oluşan program döngü olayı gibi döngüseldir:
● Son başlangıç OB yürütmeyi bitirdiği zaman
● Son program döngüsü OB yürütmeyi bitirdiği zaman
Bir program döngüsü OB için başlama bilgisi
Başlangıç OB (Startup OB)
Başlangıç OB’ler, CPU’nun işletim modu STOP’tan RUN’a değiştiğinde bir kez yürütür ve RUN modunda ve komut verilen STOP-RUN geçişlerinde güç verilmesini de içerir. Tamamlandıktan sonra, ana “Program cycle” yürütmeye başlar.
Başlangıç olayları (Startup events)
Başlangıç olayı, bir STOP‘tan RUN‘a geçişte bir kez olur ve CPU‘nun başlangıç OB’lerinin yürütmesine yol açar. Başlangıç olayı için çoklu OB configure edebilirsiniz. Başlangıç OB’leri, numara sırasına göre komut gönderir.
Bir başlangıç OB’si için başlama bilgisi
Zaman gecikmeli interrupt (kesme) OB
Konfigüre ettiğiniz bir zaman gecikmesinden sonra zaman gecikmeli interrupt OB’leri komut gönderir.
Zaman gecikmeli interrupt olayları
Zaman gecikmeli interrupt olaylarını belirli bir gecikme zamanı dolduktan sonra oluşması için konfigüre edebilirsiniz. Gecikme zamanını atamasını SRT_DINT komutu ile yaparsınız. Zaman gecikmesi olayları, denk düşen zaman gecikmeli interrupt OB’sini yürütmek için program döngüsünü kesintiye uğratır. Bir zaman gecikmesi olayına sadece bir zaman gecikmeli interrupt OB’si ekleyebilirsiniz. CPU, dört zaman gecikmesi olayını destekler.
Zaman gecikmeli interrupt OB için başlama bilgisi:
Döngüsel interrupt OB
Döngüsel interrupt OB’ler belirli bir aralıkta yürütme yaparlar. Toplam dört döngüsel interrupt olayını kadar konfigüre edebilirsiniz. Burada bir OB her döngüsel interrupt olayına karşılıktır.
Döngüsel interrupt olayları
Döngüsel interrupt olayları, bir konfigüre edilmiş döngü süresinde bir interrupt’ın yürütülmesini konfigüre etmek için size izin verir. Döngüsel interrupt OB oluşturduğunuzda, başlama döngü süresini konfigüre edersiniz. Bir döngüsel olay program döngüsünü keser ve karşılık gelen döngüsel interrupt OB’sini yürütür. Döngüsel interrupt olayının program döngü olayından daha yüksek öncelik sınıfında olduğuna dikkat ediniz.
Bir döngüsel olaya sadece bir döngüsel interrupt OB iliştirebilirsiniz.
Her bir döngüsel olaya bir faz kaydırma atayabilirsiniz. Böylece döngüsel interrupt’ların aynı tarama zamanı içerisindeki yürütülmesi bir diğerinden faz ofset miktarı kadar ofset olabilir. Varsayılan faz ofseti 0’dır. Başlamadaki faz kaydırmasını değiştirmek veya bir döngüsel olay için başlamadaki tarama zamanını değiştirmek için proje ağacındaki döngüsel interrupt OB’sinin üzerine sağ tıklayınız, sonra içerik menüsünden “Properties”i seçiniz, sonra “Cyclic interrupt” (döngüsel interrupt) üzerine tıklayınız ve sonra yeni başlangıç değerlerini giriniz. Ayrıca, döngüsel interrupt sorgulama (QRY_CINT) ve Döngüsel interrupt’ı ayarla (SET_CINT) komutlarını kullanarak programınızdan tarama zamanını ve faz kaydırmayı sorgulayabilir ve değiştirebilirsiniz. SET_CINT komutu tarafından ayarlanmış tarama zamanı ve faz kaydırma değerleri, bir güç döngüsü veya STOP moduna geçiş boyunca kalıcı olmaz; tarama zamanı ve faz kaydırma değerleri bir güç döngüsü veya STOP moduna geçiş sonrasında ilk değerlerine döner. CPU, toplamda dört döngüsel interrupt olayını destekler.
Donanım interrupt OB
İlgili donanım olayları oluştuğunda donanım interrupt OB’leri yürütme yapar. Bir donanım interrupt OB bir donanın olayından bir sinyale tepki olarak normal program yürütmeyi keser.
Donanım interrupt olayları
Bir giriş noktasında yükselen veya düşen bir kenar veya (bir HSC, Yüksek Hızlı Sayıcı) olay gibi donanımdaki değişiklikler donanım interrupt olaylarını tetikler. Her bir donanım interrupt olayı için S7-1200 bir interrupt OB destekler. Donanım olaylarını cihaz konfigürasyonunda etkinleştirirsiniz ve cihaz konfigürasyonunda veya kullanıcı programında bir ATTACH komutu ile bir olay için bir OB atayınız. CPU, çok sayıda donanım interrupt olayını destekler. CPU modeli ve giriş noktalarının sayısı hazır olan tam olayları belirler.
Donanım interrupt olayları üzerindeki sınırlamalar aşağıdaki gibidir:
Kenarlar:
● Yükselen kenar olayları: maksimum 16
● Düşen kenar olayları: maksimum 16
HSC olayları:
● CV=PV: maksimum 6
● Yön değiştirmesi: maksimum 6
● Harici reset: maksimum 6
Zaman hatası interrupt’ı OB
Konfigüre edilmiş ise, tarama döngüsü maksimum döngü süresini aştığı veya bir zaman hatası olayı oluştuğu durumda zaman hatası interrupt’ı OB (OB 80) yürütür. Tetiklenirse, OB normal döngüsel program yürütmesini veya diğer bir olay OB kesmeyi yürütür.
Bu iki olaydan birisinin oluşması olayı açıklayan bir diyagnostik arabellek girişini üretir. Diyagnostik arabellek girişi zaman hatası interrupt’ı OB’nin bulunmasından bağımsız olarak üretilir.
Zaman hatası interrupt olayları
Birçok farklı zaman hatası şartlarının herhangi birinin oluşması bir zaman hatası olayıyla sonuçlanır:
● Tarama döngüsü maksimum döngü süresini aşar
● Program çevrimi belirlenen maksimum tarama döngüsü süresinde tamamlanmazsa, maksimum döngü süresi aşıldı (“maximum cycle time exceeded”) durumu meydana gelir. Maksimum döngü süresi şartına, CPU özelliklerinde maksimum döngü süresini nasıl konfigüre edileceğine ve döngü zamanlayıcısının nasıl resetleneceğine ilişkin bilgi için “Monitoring the cycle time in the S7-1200 System Manual” (Sayfa 97) bölümüne bakınız.
● CPU ilk interrupt OB’sinin yürütmesini bitirmeden önce ikinci bir zaman interrupt’ı (döngüsel veya zaman gecikmeli) başlamasından dolayı CPU talep edilen OB’yi başlatamaz.
● Kuyruk aşırı akışı oluştu
İnterrupt’lar CPU’nun onları işlemesinden daha hızlı oluşursa, kuyruk aşırı akışı oluştu (“queue overflow occurred”) koşulu meydana gelir. CPU, her bir olay tipi için farklı bir kuyruk kullanarak olayların bekleme sayısını sınırlar. Karşılık gelen kuyruk dolu olduğunda bir olay meydana gelirse, CPU bir zaman hatası olayı üretir.
Bütün zaman hatası olayları, zaman hatası interrupt’ı OB’sinin (var ise) yürütülmesini tetikler. Zaman hatası interrupt’ı OB’si yok ise, CPU’nun cihaz konfigürasyonu zaman hatası için CPU’nun tepkisini belirler:
● CPU’nun ilk yürütmeyi tamamlamasından önce ikinci bir döngüsel interrupt’ın başlatılması gibi zaman hataları için varsayılan konfigürasyon CPU’nun RUN modunda kalmasına göredir.
● Maksimum süreleri geçme için varsayılan konfigürasyon CPU’nun STOP moduna geçmesine göredir.
Kullanıcı programı, döngü süre izlemesini tekrar başlatmak için RE_TRIGR komutunu (Sayfa 262) yürüterek program döngü yürütme süresini konfigüre edilen maksimum döngü süresinin on katına kadar artırabilir. Ancak, döngü zamanlayıcısını reset etmeksizin aynı program döngüsü içinde “maksimum döngü süresi aşıldı” (“maximum cycle time exceeded”) koşulları ilk defa oluşursa, zaman hatası interrupt’ı OB’nin bulunmasına bakılmaksızın CPU sonra STOP’a geçer. “S7-1200 Sistem Kılavuzunda döngü süresini izleme” (Sayfa 97) bölümüne bakınız.
Zaman hatası interrupt’ı OB’si başlama bilgisini içerir. Bu bilgi zaman hatasını hangi olayın ve OB’nin ürettiğini belirlemenize yardımcı olur. Bu başlama değerlerini test etmek ve uygun aksiyonu yapmak için OB içindeki komutları programlayabilirsiniz.
Zaman hatası OB (OB 80) için başlama bilgisi
Projenizde bir zaman hatası interrupt’ı OB eklemek isterseniz, ağaçtaki “Program blocks” altında bulunan “Yeni blok ekle” (“Add new block”) üzerine çift tıklayıp, daha sonra da sırasıyla “Organizasyon bloğu” (“Organization block”), ve “Zaman hatası interrupt’ı” (“Time error interrupt”) seçimlerini yaparak bir zaman hatası interrupt’ı ekleyebilirsiniz.
Yeni V4.0 CPU için öncelik 22’dir.Bir V3.0 CPU’yu bir V4.0 CPU (Sayfa 995) ile değiştirirseniz öncelik 26 olur, öncelik V3.0 için etkin durumdaydı. Her iki durumda da öncelik alanı düzenlenebilir ve siz önceliği 22-24 aralığında bir değere ayarlayabilirsiniz.
Diyagnostik (tanılama) hata interrupt’ı OB
CPU bir diyagnostik hata algıladığında veya bir diyagnostik- yetenekli modül bir hatayı tanırsa, diyagnostik hata interrupt’ı OB yürütür ve modül için diyagnostik hata interrupt’ını siz etkinleştirdiniz. Diyagnostik hata interrupt’ı OB, normal döngüsel program yürütmesini keser. Bu tip hata alınması üzerine CPU’nuzun STOP moduna girmesini isterseniz, CPU’yu STOP moduna koymak için diyagnostik hata interrupt OB’si içine bir STP komutu dahil edebilirsiniz.
Programınıza bir diyagnostik hata interrupt OB’si dahil etmezseniz, CPU hatayı ihmal eder ve RUN modunda kalır.
Diyagnostik (tanılama) hata olayları
Analog (lokal), PROFINET, PROFIBUS ve bazı dijital (lokal) cihazlar diyagnostik hataları algılama ve raporlama yeteneğine sahiptirler. Birçok farklı diyagnostik hata koşullarının her hangi birisinin oluşması ve kaldırılması bir diyagnostik hata olayı ile sonuçlanır. Aşağıdaki diyagnostik hatalar desteklenir:
● Kullanıcı gücü yok
● Yüksek sınır aşıldı
● Düşük sınır aşıldı
● Kablo kopması
● Kısa devre
Diyagnostik hata olayları, var ise, diyagnostik hata interrupt OB’sinin (OB 82) yürütülmesini tetikler. O yok ise, sonra CPU hatayı ihmal eder.
Projenize bir diyagnostik hata interrupt’ı OB’si dahil etmek için ağaçtaki “Program blokları” (“Program blocks”) altında “Ekle yeni blok”a (“Add new block”) çift tıklayarak bir diyagnostik hata interrupt’ı eklemelisiniz, sonra “Organizasyon bloğu”nu ve sonra “diyagnostik hata interrupt’ı” (“Diagnostic error interrupt”) seçmelisiniz.
Modüller için çek veya tak OB
“Modüller için çek ve tak” (“Pull or plug of modules”) OB’si, konfigüre edilmiş ve devre dışı bırakılmış dağıtımlı I/O modülü veya alt modül (PROFIBUS, PROFINET, AS-i) bir modülü eklemeye veya çıkarmaya ilişkin bir olayı ürettiğinde yürütme gerçekleştirir.
Modüller için çek veya tak olayı
● Aşağıdaki koşullar modüller için çek veya tak olayını üretir:
● Birisi konfigüre edilmiş bir modülü çıkarır veya takar.
● Konfigüre edilmiş bir modül genişleme şasisinde fiziksel olarak yoktur.
● Eksik bir modül bir genişleme şasisindedir, ancak konfigüre edilmiş bir modüle karşılık değildir.
● Konfigüre edilmiş bir modül için uyumlu bir modül bir genişleme şasisindedir, ancak konfigürasyon yer değişikliklerine izin vermez.
Bu OB’yı programlamamış iseniz, CPU bu koşullardan herhangi biri oluştuğunda STOP moduna geçer.
Modüllerin çek veya tak OB’si için başlatma bilgisi
Şasi veya istasyon arızası OB
Şasi veya istasyon arızası OB’si (“Rack or station failure”), bir dağıtımlı şasi veya istasyonun haberleşme arızası veya kaybı meydana geldiğinde yürütmeyi yapar.
Şasi veya istasyon arızası olayı
CPU aşağıdakilerden birini algıladığında bir şasi veya istasyon arızası olayı üretir:
● Bir DP master sistemi veya bir PROFINET IO sisteminin arızası (bir gelen veya bir giden olayı durumunda).
● Bir DP slave veya bir I/O cihazının arızası (bir gelen veya bir giden olayı durumunda).
● Bir PROFINET I-cihazı bazı alt modüllerinin arızası
Bu OB’yi programlamamış iseniz, CPU bu koşullardan herhangi biri oluştuğunda STOP moduna geçer.
Şasi veya istasyon arızaları OB için başlama bilgisi
Gün içindeki saat OB
Gün içindeki saat OB’leri konfigüre edilen saat zamanı koşullarına dayanarak yürütülür. CPU, iki gün içindeki saat OB’sini destekler.
Gün içindeki saat olayları
Gün içindeki saat interrupt olayını belirli bir tarih veya zaman veya aşağıdaki döngülerin biriyle döngüsel olarak konfigüre edebilirsiniz:
● Dakikalık: İnterrupt her dakikada oluşur.
● Saatlik: İnterrupt her saatte oluşur
● Günlük: İnterrupt her günde belirli bir zamanda oluşur (saat ve dakika)
● Haftalık: İnterrupt her hafta haftanın belirli bir gününde belirli bir zamanda oluşur (örneğin her Salı öğleden sonra saat 4.30’da)
● Aylık: İnterrupt her ayda ayın belirli bir gününde belirli bir zamanda oluşur (örneğin gün sayısı 1-28 dahil arasında olmalıdır)
● Her ay sonunda: İnterrupt her ayın son gününde belirli bir zamanda oluşur.
● Yıllık: İnterrupt her yıl belirli bir tarihte oluşur (ay ve gün). 29 Şubat tarihini belirleyemezsiniz.
Gün içindeki saat olayı OB’si için başlama bilgisi
Durum OB
Bir DPV1 veya PNIO slave bir durum interrupt’ını tetiklerse, durum OB’leri yürütme yapar. Bir DPV1 veya PNIO slave’in bir bileşeni (modül veya şasi) işletim modunu değiştirirse (örneğin RUN’dan STOP’a), bu bir durum olabilir.
Durum olayları
Bir durum interrupt’ını tetikleyen olaylar hakkında ayrıntılı bilgi için imalatçının DPV1 veya PINO slave dokümanına bakınız.
Durum OB için başlama bilgisi
Güncelleme OB
Bir DPV1 veya PNIO slave bir güncelleme interrupt’ını tetiklerse, güncelleme OB’leri yürütme yapar.Bir güncelleme interrupt’ını tetikleyen olaylar hakkında ayrıntılı bilgi için imalatçının DPV1 veya PINO slave dokümanına bakınız.
Profil OB
Bir DPV1 veya PNIO slave bir profile özel interrupt’ı tetiklerse, Profil OB’ler yürütme yapar. Bir profil interrupt’ını tetikleyen olaylar üzerine ayrıntılı bilgi için DPV1 veya PINO imalatçı dokümanlarına bakınız.
Olay yürütme öncelikleri ve kuyruklama
CPU işlemi, olaylar tarafından kontrol edilir. Bir olay, yürütülecek bir interrupt OB’sini tetikler. Bir olay için interrupt OB’sini bloğun oluşturulması sırasında, cihaz yapılandırması sırasında veya bir ATTACH veya DETACH komutu ile belirleyebilirsiniz. Bazı olaylar, program döngüsü veya döngüsel olaylar gibi düzenli esaslar üzerine olur. Başlangıç olayları ve zaman gecikme olayları gibi diğer bazı olaylar sadece tek bir kere olur. Bir girişe noktası üzerindeki bir kenar olayı veya yüksek hızlı bir sayıcı olayı gibi bazı olaylar, donanım bir olayı tetiklendiğinde olur. Ayrıca sadece bir hata oluştuğunda, diyagnostik hatası ve zaman hatası olayı gibi olaylar meydana gelir. Olay interrupt OB’leri için işlem sırasını belirlemek amacıyla olay öncelikleri ve kuyruklar kullanılır.
CPU olayları öncelik sırasına göre işler. Burada 1 en düşük öncelik, 26 en yüksek önceliktir. S7-1200 CPU V4.0’den önce, her tip OB sabit öncelik sınıfına aitti (1-26). V4.0 ile konfigüre ettiğiniz her OB’ye bir öncelik sınıfı atayabilirsiniz. OB özelliklerinin özniteliklerinde öncelik numarasını konfigüre edebilirsiniz.
Kesilebilir veya kesilemez yürütme modları
OB‘ler (Sayfa 85) kendilerini tetikleyen olayları öncelik sırasına göre yürütür. S7-1200 CPU’nun V4.0 versiyonu ile, OB yürütmesini kesilebilir veya kesilemez olacak şekilde konfigüre edebilirsiniz. Program döngüsü OB’lerin daima kesilebilir olduğuna dikkate ediniz, ancak diğer bütün OB’leri kesilebilir veya kesilemez olacak şekilde konfigüre edebilirsiniz
Kesilebilir moda ayarladıysanız, sonra OB kendi yürütmesini tamamlamadan önce bir OB yürütme yapıyor ve yüksek öncelikli bir olay meydana gelirse, yürütmedeki OB yüksek öncelikli olay OB’sini işletmek için kesilir. Yüksek öncelikli olay yürütülür ve tamamlamasında, kesilen OB devam eder. Bir kesilebilir OB yürütülüyor iken çoklu olaylar oluşursa, CPU çoklu olayları öncelik sırasına göre işler.
Kesilebilir moda ayarlamadıysanız bir OB kendisinin çalışması boyunca tetikleyen diğer olaylara bakılmaksızın tetiklendiğinde tamamlama için çalışır. İnterrupt olayların bir döngüsel OB ve bir zaman gecikme OB’sini tetiklediği izleyen iki durumu göz önünde bulundurunuz.
İki durumda da zaman gecikme OB’si (OB201) proses görüntü bölüntü atamasına sahip değil (Sayfa 77) ve öncelik 4’te yürütülür. Döngüsel OB’si (OB200), PIPI proses görüntü bölüntü atamasına sahip ve öncelik 2’de yürütülür. Aşağıdaki resimlemeler kesilebilir ve kesilemez yürütme modları arasındaki farkı gösterir:
Olay yürütme önceliklerinin ve kuyruklamanın anlaşılması
Tek bir kaynaktan gelen bekleyen (kuyruktaki) olayların sayısı her olay tipi için farklı bir kuyruk kullanılarak sınırlanır. Verilen olay tipi için bekleyen olay sınırına ulaşıldığında bir sonraki olay kaybedilir. Kuyruk taşmaları üzerine daha fazla bilgi için zaman hatası interrupt OB’leri (Sayfa 88) hakkındaki konulara bakınız.
Her bir CPU olayı ilişkilendirilmiş bir önceliğe sahiptir. Genellikle CPU, olayları öncelik sırasına göre (en yüksek öncelik ilk olmak üzere) servis eder. CPU, aynı önceliğe sahip olayları “ilk gelen ilk servis edilir” esasına göre servis eder.
İlave olarak, CPU, OB’lerle ilişiği olmayan diğer olayları tanır. Aşağıdaki Çizelge bu olayları ve karşılık gelen CPU aksiyonlarını açıklar:
İnterrupt gecikmesi
İnterrupt olay gecikmesi (CPU’nun bir olayın oluştuğundan haberdar edilmesinden CPU’nun o olayı servis eden OB’deki ilk komutu yürütmeye başlatmasına kadar geçen süre), yaklaşık olarak 175 mikro saniyedir. Bu süre, bir program döngüsü OB’sinin interrupt olayı süresinde sadece olay servis rutini aktivitesi olması durumu için geçerlidir.
KURSLARIMIZ
İletişim Bilgilerinizi Bırakın Biz Sizi Arayalım!
Sizin memnuniyetiniz, bizim mutluluğumuzdur…