GATHER_BLK: Merge Individual Bits into Multiple Elements of an ARRAY of Bit Sequence (Ayrı Bitleri Bit Dizisi Dizisinin Birden Fazla Elemanına Birleştir)

GATHER_BLK: Merge Individual Bits into Multiple Elements of an ARRAY of Bit Sequence (Ayrı Bitleri Bit Dizisi Dizisinin Birden Fazla Elemanına Birleştir)

Siemens TIA (Totally Integrated Automation) Portal’da GATHER_BLK (Bitleri ARRAY’lere Toplu Şekilde Birleştirme) komutu, ARRAY of BOOL, STRUCT veya PLC veri tipindeki (UDT) bitleri toplu şekilde birleştirerek ARRAY of BYTE, WORD, DWORD veya LWORD tipine dönüştüren bir fonksiyondur. COUNT_OUT parametresi ile hedef ARRAY’e yazılacak eleman sayısı belirlenir. Bu komut, dağınık bitlerin çoklu veri blokları halinde paketlenmesini sağlar. Bu rehberde, GATHER_BLK komutunun mantığını, kullanım örneklerini, avantajlarını, dikkat edilmesi gereken noktaları ve pratik ipuçlarını detaylıca ele alacağız.

GATHER_BLK Komutu Nedir?

GATHER_BLK, ARRAY of BOOL, STRUCT veya UDT yapısındaki bitleri birleştirerek ARRAY of BYTE, WORD, DWORD veya LWORD tipinde bir hedef ARRAY’e yazan bir komuttur. COUNT_OUT parametresi, hedef ARRAY’e kaç eleman yazılacağını belirler ve bu, dolaylı olarak kaynak ARRAY’den kaç bitin okunacağını tanımlar. Bu komut, özellikle SCATTER_BLK ile ayrıştırılmış bitleri tekrar birleştirmek için kullanışlıdır.

Çalışma Mantığı: GATHER_BLK, EN girişiyle tetiklenir. EN = 1 olduğunda, IN’deki yapıdan (örneğin, ARRAY of BOOL) COUNT_OUT × bit_dizisi_boyutu kadar bit okunur ve OUT’taki hedef ARRAY’e yazılır. İşlem başarılıysa ENO = 1 olur; aksi halde (örneğin, IN yapısı yetersizse) ENO = 0 döner.

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

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

Kullanım AmacıAçıklama
Toplu Bit BirleştirmeDağınık bitleri birden fazla bit dizisine (örneğin, ARRAY of WORD) toplama.
Veri PaketlemeBit bazında değiştirilen verileri birleştirerek kompakt bir yapı oluşturma.
Durum Kelimeleri OluşturmaBit seviyesinde durumları birleştirerek birden fazla durum kelimesi oluşturma.

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.
INElement of ARRAY[*] of BOOL, STRUCT, UDTElement of ARRAY[*] of BOOL, STRUCT, UDTBitlerin okunacağı kaynak yapı (örneğin, ARRAY[0..95] of BOOL).
COUNT_OUTUSINT, UINT, UDINTUSINT, UINT, UDINT, ULINTHedef ARRAY’e yazılacak eleman sayısı (örneğin, 3 WORD).
OUTElement of ARRAY[*] of BYTE, WORD, DWORDElement of ARRAY[*] of BYTE, WORD, DWORD, LWORDBirleştirilen bitlerin yazılacağı hedef ARRAY (örneğin, ARRAY[0..5] of WORD).

Kombine Örnek: Farklı Senaryolar

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

Kullanım AmacıÖrnek Senaryo
Toplu Bit BirleştirmeDağınık hata bitlerini birleştirerek birden fazla durum kelimesi oluşturma.
Veri PaketlemeBit bazında değiştirilen verileri birleştirerek kompakt bir yapı oluşturma.
Durum Kelimeleri OluşturmaBit seviyesinde durumları birleştirerek birden fazla durum kelimesi oluşturma.

Açıklama: GATHER_BLK, birden fazla bit dizisini toplu olarak birleştirerek veri yönetimini kolaylaştırır.

PLC Programlama Örnekleri

GATHER_BLK komutu, toplu bit birleştirme, veri paketleme ve durum kelimeleri oluşturma gibi senaryolarda kullanılır. İşte detaylı örnekler:

Örnek 1: ARRAY[0..95] of BOOL → ARRAY[0..5] of WORD

Network 1: ARRAY[0..95] of BOOL → ARRAY[0..5] of WORD
EN----[ GATHER_BLK ]----ENO
      | IN: SourceArrayBool[0]       |
      | COUNT_OUT: 3                 |
      | OUT: DestinationArrayWord[2] |
        

Açıklama: EN = 1 olduğunda, SourceArrayBool[0..47] (48 bit) birleştirilir ve DestinationArrayWord[2..4]’e (3 WORD) yazılır. Örneğin, SourceArrayBool[0..15] = [TRUE, TRUE, FALSE, ..., FALSE] ise DestinationArrayWord[2] = 16#0003 olur.

Örnek 2: ARRAY[-2..93] of BOOL ile Hizalama

Network 2: ARRAY[-2..93] of BOOL ile Hizalama
EN----[ GATHER_BLK ]----ENO
      | IN: SourceArrayBool[14]      |
      | COUNT_OUT: 3                 |
      | OUT: DestinationArrayWord[2] |
        

Açıklama: EN = 1 olduğunda, SourceArrayBool[14..61] (48 bit) birleştirilir. Kaynak indeks 14 (WORD sınırı: -2 + 1×16) olduğundan, bitler DestinationArrayWord[2..4]’e yazılır.

Örnek 3: Hata Yönetimi (Kaynak Yetersiz)

Network 3: Hata Yönetimi (Kaynak Yetersiz)
EN----[ GATHER_BLK ]----ENO
      | IN: SourceArrayBool[0]       |
      | COUNT_OUT: 3                 |
      | OUT: DestinationArrayWord[0] |
|----[ ENO = 0 ]----( Hata_Alarm )----|
        

Açıklama: EN = 1 olduğunda, SourceArrayBool[0..47] (48 bit) birleştirilmeye çalışılır. Ancak SourceArrayBool sadece ARRAY[0..31] of BOOL (32 bit) ise S7-1200’de veri yazılmaz, ENO = 0 olur ve Hata_Alarm aktif olur.

Örnek 4: Çok Boyutlu ARRAY of BOOL Kullanımı

Network 4: Çok Boyutlu ARRAY of BOOL Kullanımı
EN----[ GATHER_BLK ]----ENO
      | IN: SourceArrayBool[0,0,0]   |
      | COUNT_OUT: 3                 |
      | OUT: DestinationArrayWord[0] |
        

Açıklama: EN = 1 olduğunda, SourceArrayBool (ARRAY[0..1,0..5,0..3] of BOOL, 48 bit) birleştirilir ve DestinationArrayWord[0..2]’ye (3 WORD) yazılır.

Örnek 5: ARRAY of BYTE Kullanımı

Network 5: ARRAY of BYTE Kullanımı
EN----[ GATHER_BLK ]----ENO
      | IN: SourceArrayBool[0]       |
      | COUNT_OUT: 2                 |
      | OUT: DestinationArrayByte[0] |
        

Açıklama: EN = 1 olduğunda, SourceArrayBool[0..15] (16 bit) birleştirilir ve DestinationArrayByte[0..1]’e (2 BYTE) yazılır. Örneğin, SourceArrayBool[0..7] = [TRUE, TRUE, TRUE, TRUE, FALSE, ..., FALSE] ise DestinationArrayByte[0] = 16#0F olur.

Günlük Hayattan Örnekler

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

  • Koli Paketleme: Ayrı raflardaki ürünleri (IN) birden fazla koliye (OUT) toplama.
  • Para Birleştirme: Bozuk paraları (IN) birden fazla banknota (OUT) dönüştürme.
  • Şeker Paketleme: Ayrı kaplardaki şekerleri (IN) birden fazla şeker paketine (OUT) toplama.
  • Belge Toplama: Satır satır ayrılmış belgeleri (IN) birden fazla dosyaya (OUT) toplama.

Avantajlar

  • Toplu Bit Birleştirme: Birden fazla bit dizisini aynı anda birleştirerek zaman kazandırır.
  • Esneklik: ARRAY of BOOL, STRUCT ve UDT gibi farklı yapılarla çalışabilir.
  • Veri Paketleme: Bit bazında değiştirilen verileri birleştirerek veri yönetimini kolaylaştırır.
  • Hata Yönetimi: ENO çıkışı ile işlem başarısını kontrol ederek güvenilirlik sunar.

Dikkat Edilmesi Gerekenler

  • Kaynak Boyutu: IN yapısı, COUNT_OUT × bit_dizisi_boyutu kadar bit sağlamalıdır (örneğin, 3 WORD × 16 bit = 48 BOOL); aksi halde ENO = 0 olur.
  • Indeks Hizalama: Kaynak indeks, bit dizisi sınırına hizalanmalıdır (örneğin, WORD için 16 bit); aksi halde ENO = 0 olur.
  • Çok Boyutlu ARRAY: Çok boyutlu ARRAY of BOOL kullanırken tüm boyutlar toplam bit sayısına katkı sağlar.
  • Firmware Uyumu: S7-1200 için firmware >4.2, S7-1500 için firmware ≥2.1 gereklidir.

İpuçları

  • Boyut Hesaplama: Gerekli BOOL sayısını hesaplayın: Gerekli BOOL Sayısı = COUNT_OUT × Bit Dizisi Boyutu (örneğin, 3 WORD × 16 bit = 48 BOOL).
  • Indeks Hizalama: Kaynak ARRAY indeksi, ARRAY_alt_sınır + n × bit_dizisi_boyutu formülüne uygun olmalı (örneğin, ARRAY[-2..93] için WORD: -2 + 1×16 = 14).
  • SCATTER_BLK ile Tamamlama: Birleştirilen bitleri tekrar ayrıştırmak için SCATTER_BLK komutunu kullanın.
  • Firmware Kontrolü: CPU’nuzun firmware sürümünü TIA Portal’da "Hardware Configuration" üzerinden kontrol edin; gerekirse güncelleyin.
  • Hata Yönetimi: ENO çıkışını bir hata göstergesine bağlayarak (örneğin, Hata_Alarm) hataları izleyin.

Sonuç

Siemens TIA Portal’daki GATHER_BLK komutu, birden fazla bit dizisini toplu olarak birleştirerek veri iletişimi ve depolama için ideal bir araçtır. Doğru indeksleme ve boyut yönetimiyle endüstriyel uygulamalarda verimliliği artırır. Daha fazla bilgi için Siemens Online Destek sayfasını ziyaret edebilirsiniz.

Yorumlar