UFILL_BLK: Fill Block Uninterruptible (Kesintisiz Bloğu Doldur)

UFILL_BLK: Fill Block Uninterruptible (Kesintisiz Bloğu Doldur)

Siemens TIA (Totally Integrated Automation) Portal’da UFILL_BLK (Kesintisiz Blok Doldurma) komutu, bir bellek alanını (ARRAY, STRUCT vb.) kesintiye uğramadan belirli bir değerle doldurmak için kullanılan bir fonksiyondur. Bu komut, özellikle zaman kritik uygulamalarda veri bütünlüğünü korurken büyük veri bloklarının güvenli şekilde başlatılmasını sağlar. Bu rehberde, UFILL_BLK komutunun mantığını, kullanım örneklerini, avantajlarını, dikkat edilmesi gereken noktaları ve pratik ipuçlarını detaylıca ele alacağız.

UFILL_BLK Komutu Nedir?

UFILL_BLK, bir bellek alanını (hedef aralık) IN girişindeki değerle kesintiye uğramadan dolduran bir komuttur. Hedef aralık, OUT çıkışında belirtilen adresten başlayarak doldurulur. COUNT parametresi, IN değerinin kaç kez kopyalanacağını belirler. FILL_BLK’ten farklı olarak, UFILL_BLK diğer işletim sistemi aktiviteleri tarafından kesintiye uğramaz, bu da zaman kritik uygulamalarda veri bütünlüğünü garanti eder.

Çalışma Mantığı: UFILL_BLK, EN girişiyle tetiklenir. EN = 1 olduğunda, IN’deki değer, OUT’ta belirtilen hedef aralığa COUNT kadar kez kesintisiz bir şekilde kopyalanır. İşlem başarılıysa ENO = 1 olur; aksi halde (örneğin, COUNT aşımı veya veri tipi uyumsuzluğu durumunda) ENO = 0 döner.

UFILL_BLK Komutunun Mantığı ve Kullanım Alanları

UFILL_BLK komutu, aşağıdaki senaryolarda kullanılır:

Kullanım AmacıAçıklama
Kesintisiz Veri DoldurmaCPU’nun diğer işlemlerini duraklatmadan veri doldurma.
Yüksek GüvenilirlikGerçek zamanlı sistemlerde veri kaybını önleme.
Büyük Veri BloklarıEn fazla 16 KB boyutunda veri doldurulabilir (CPU’ya göre değişir).

Temel Parametreler:

ParametreVeri Tipi (S7-1200)Veri Tipi (S7-1500)Açıklama
ENBOOLBOOLKomutu aktifleştirmek için "1" olmalı.
ENOBOOLBOOLİşlem başarılıysa "1", değilse "0" döner.
INBinary numbers, integers, floating-point numbers, timers, DATE, CHAR, WCHAR, TODBinary numbers, integers, floating-point numbers, timers, DATE, CHAR, WCHAR, TOD, LTODHedef alana yazılacak değer (sabit veya değişken).
COUNTUSINT, UINT, UDINTUSINT, UINT, UDINT, ULINTDeğerin kaç kez kopyalanacağı.
OUTBinary numbers, integers, floating-point numbers, timers, DATE, CHAR, WCHAR, TODBinary numbers, integers, floating-point numbers, timers, DATE, CHAR, WCHAR, TOD, LTODHedef bellek alanının başlangıç adresi.

Kombine Örnek: Farklı Senaryolar

Sistem: UFILL_BLK komutunun farklı kullanım alanları:

Kullanım AmacıÖrnek Senaryo
Kesintisiz Veri DoldurmaGerçek zamanlı bir sistemde sensör verilerini sıfırlama.
Yüksek GüvenilirlikKritik bir uygulamada veri kaybını önlemek için veri doldurma.
Büyük Veri Blokları16 KB’a kadar veri bloklarını kesintisiz bir şekilde doldurma.

Açıklama: UFILL_BLK, zaman kritik uygulamalarda veri bütünlüğünü garanti eder ve büyük veri bloklarını hızlıca doldurur.

PLC Programlama Örnekleri

UFILL_BLK komutu, kesintisiz veri doldurma, yüksek güvenilirlik ve büyük veri bloklarıyla çalışma gibi senaryolarda kullanılır. İşte detaylı örnekler:

Örnek 1: ARRAY’i Sabit Değerle Doldurma

Network 1: ARRAY’i Sabit Değerle Doldurma
EN----[ UFILL_BLK ]----ENO
      | IN: 255               |
      | COUNT: 5              |
      | OUT: DB1.DataArray[0] |
        

Açıklama: EN = 1 olduğunda, DB1.DataArray’deki 5 eleman 255 değeriyle kesintisiz bir şekilde doldurulur. DB1.DataArray: [?, ?, ?, ?, ?] → [255, 255, 255, 255, 255].

Örnek 2: STRUCT İçindeki Elemanları Sıfırlama

Network 2: STRUCT İçindeki Elemanları Sıfırlama
EN----[ UFILL_BLK ]----ENO
      | IN: 0                       |
      | COUNT: 3                    |
      | OUT: DB2.MyStruct1.Member_1 |
        

Açıklama: EN = 1 olduğunda, DB2.MyStruct1’deki Member_1’den başlayarak 3 eleman (Member_1, Member_2, Member_3) 0 değeriyle doldurulur. Örneğin, MyStruct1: [Member_1: 10, Member_2: 20, Member_3: 30, Member_4: 40] → [Member_1: 0, Member_2: 0, Member_3: 0, Member_4: 40].

Örnek 3: Hata Yönetimi (COUNT Aşımı)

Network 3: Hata Yönetimi (COUNT Aşımı)
EN----[ UFILL_BLK ]----ENO
      | IN: 100                |
      | COUNT: 10              |
      | OUT: DB3.SensorData[0] |
|----[ ENO = 0 ]----( Hata_Alarm )----|
        

Açıklama: EN = 1 olduğunda, DB3.SensorData’ya 10 eleman 100 değeriyle doldurulmaya çalışılır. Ancak DB3.SensorData sadece 8 elemanlık bir ARRAY ise ENO = 0 olur ve Hata_Alarm aktif olur.

Örnek 4: Dinamik COUNT Hesaplama

Network 4: Dinamik COUNT Hesaplama
EN----[ UFILL_BLK ]----ENO
      | IN: 0                   |
      | COUNT: #DynamicCount    |
      | OUT: DB4.TargetArray[0] |
        

Açıklama: EN = 1 olduğunda, DB4.TargetArray’e 0 değeri #DynamicCount kadar kez yazılır. #DynamicCount, SIZE(DB4.TargetArray) ile hesaplanabilir.

Örnek 5: Büyük Veri Doldurma (16 KB)

Network 5: Büyük Veri Doldurma (16 KB)
EN----[ UFILL_BLK ]----ENO
      | IN: 0                 |
      | COUNT: 8000           |
      | OUT: DB5.LargeData[0] |
        

Açıklama: EN = 1 olduğunda, DB5.LargeData (ARRAY[0..8191] of INT) içindeki 8000 eleman (toplam 16000 byte) 0 değeriyle doldurulur. 16 KB sınırı (16384 byte) aşılmamalıdır.

Örnek 6: BOOL ARRAY Doldurma

Network 6: BOOL ARRAY Doldurma
EN----[ UFILL_BLK ]----ENO
      | IN: FALSE             |
      | COUNT: 16             |
      | OUT: DB6.BoolArray[0] |
        

Açıklama: EN = 1 olduğunda, DB6.BoolArray (ARRAY[0..31] of BOOL) içindeki ilk 16 eleman FALSE değeriyle doldurulur. COUNT 8’in katı olarak ayarlanmıştır (2 byte = 16 bit).

Günlük Hayattan Örnekler

UFILL_BLK komutunun mantığını anlamak için günlük hayattan benzetmeler:

  • Konveyör Bant Doldurma: Bir konveyör bant üzerindeki kutuları (OUT) aynı ürünle (IN) kesintisiz bir şekilde doldurma.
  • Su Tankı Doldurma: Bir su tankını (OUT) kesintisiz bir şekilde aynı suyla (IN) doldurma.
  • Defter Sayfaları: Bir defterin sayfalarını (OUT) aynı notla (IN) durmaksızın doldurma.
  • Duvar Kaplama: Bir duvarı (OUT) aynı renkle (IN) kesintisiz bir şekilde kaplama.

Avantajlar

  • Kesintisiz Doldurma: CPU’nun diğer işlemlerini duraklatmadan veri doldurma yaparak gerçek zamanlı sistemlerde güvenilirlik sağlar.
  • Veri Bütünlüğü: Veri kaybı riskini en aza indirir, özellikle zaman kritik uygulamalarda idealdir.
  • Büyük Veri Desteği: 16 KB’a kadar veri bloklarını hızlıca doldurabilir.
  • Hata Yönetimi: ENO çıkışı ile işlem başarısını kontrol ederek güvenilirlik sunar.

Dikkat Edilmesi Gerekenler

  • Veri Tipi Uyumu: IN ve OUT aynı veri tipinde olmalıdır; aksi halde ENO = 0 olur.
  • COUNT Sınırı: COUNT, hedef alanın boyutunu aşarsa ENO = 0 olur ve istenmeyen sonuçlar oluşabilir.
  • 16 KB Sınırı: UFILL_BLK ile maksimum 16 KB (16384 byte) veri doldurulabilir; bu sınır aşılırsa hata oluşur.
  • CPU Performansı: Kesintisiz çalışma, CPU’nun interrupt tepki sürelerini uzatabilir; bu, diğer işlemlerin performansını etkileyebilir.

İpuçları

  • Dinamik COUNT Hesaplama: COUNT değerini dinamik olarak hesaplayın: COUNT = SIZE(OUT).
  • 16 KB Sınırı Kontrolü: Veri boyutunu hesaplayın (örneğin, ARRAY of INT için her eleman 2 byte; 8000 eleman = 16000 byte). 16 KB (16384 byte) sınırını aşmamak için büyük verileri parçalara bölün.
  • BOOL ARRAY’leri: ARRAY of BOOL kullanırken COUNT’u 8’in katları şeklinde ayarlayın (örneğin, 8, 16).
  • Hata Yönetimi: ENO çıkışını bir hata göstergesine bağlayarak (örneğin, Hata_Alarm) hataları izleyin.
  • CPU Performansını Optimize Etme: Kritik olmayan durumlarda FILL_BLK kullanmayı tercih edin; UFILL_BLK’yi yalnızca zaman kritik uygulamalarda kullanın.

Sonuç

Siemens TIA Portal’daki UFILL_BLK komutu, zaman kritik uygulamalarda veri bütünlüğünü garanti eden güçlü bir araçtır. Kesintisiz veri doldurma ve yüksek güvenilirlik sunarak gerçek zamanlı sistemlerde veri kaybını önler. Ancak, CPU performansını etkileyebileceğinden dikkatli kullanılmalıdır. Daha fazla bilgi için Siemens Online Destek sayfasını ziyaret edebilirsiniz.

Yorumlar