SCATTER_BLK: Parse Elements of an ARRAY of Bit Sequence into Individual Bits (Bit Dizisi Dizisinin Elemanlarını Ayrı Bitlere Ayır)

SCATTER_BLK: Parse Elements of an ARRAY of Bit Sequence into Individual Bits (Bit Dizisi Dizisinin Elemanlarını Ayrı Bitlere Ayır)

Siemens TIA Portal’da SCATTER_BLK (Bit Dizisi ARRAY’lerini Ayrıştırma) komutu, bir ARRAY içindeki BYTE, WORD, DWORD veya LWORD tipindeki verileri bit seviyesinde ayrıştırarak ARRAY of BOOL, STRUCT veya PLC veri tipine (UDT) aktaran bir fonksiyondur. Bu komut, çoklu bit dizilerinin toplu şekilde analiz edilmesini sağlar. Bu rehberde, SCATTER_BLK komutunun mantığını, kullanım örneklerini, avantajlarını, dikkat edilmesi gereken noktaları ve pratik ipuçlarını detaylıca ele alacağız.

SCATTER_BLK Komutu Nedir?

SCATTER_BLK, bir ARRAY içindeki BYTE, WORD, DWORD veya LWORD tipindeki verileri bit seviyesinde ayrıştırarak her bir biti ARRAY of BOOL, STRUCT veya UDT yapısına yazan bir komuttur. COUNT_IN parametresi ile kaynak ARRAY’den kaç elemanın ayrıştırılacağı belirlenir. Bu, özellikle birden fazla durum kelimesini (status word) analiz etmek ve bit bazında değişiklik yapmak için kullanışlıdır. Ayrıştırılan bitler, daha sonra GATHER_BLK komutuyla tekrar birleştirilebilir.

Çalışma Mantığı: SCATTER_BLK, EN girişiyle tetiklenir. EN = 1 olduğunda, IN’deki ARRAY’den COUNT_IN kadar eleman alınır, her eleman bitlerine ayrıştırılır ve OUT’taki yapıya yazılır. İşlem başarılıysa ENO = 1 olur; aksi halde (örneğin, OUT yapısı yetersizse) ENO = 0 döner.

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

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

Kullanım AmacıAçıklama
Toplu Durum AnaliziBirden fazla durum kelimesini (status word) bit seviyesinde analiz etme.
Bit Bazında KontrolBitleri ayrı ayrı okuyarak veya değiştirerek kontrol sağlama.
Veri AyrıştırmaBit dizilerini anlamlı yapılara (örneğin, UDT) dönüştürme.

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 BYTE, WORD, DWORDElement of ARRAY[*] of BYTE, WORD, DWORD, LWORDKaynak ARRAY (örneğin, ARRAY[0..5] of WORD).
COUNT_INUSINT, UINT, UDINTUSINT, UINT, UDINT, ULINTKaynak ARRAY’den kaç elemanın ayrıştırılacağı.
OUTElement of ARRAY[*] of BOOL, STRUCT, UDTElement of ARRAY[*] of BOOL, STRUCT, UDTBitlerin yazılacağı hedef yapı (örneğin, ARRAY[0..95] of BOOL).

Kombine Örnek: Farklı Senaryolar

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

Kullanım AmacıÖrnek Senaryo
Toplu Durum AnaliziBirden fazla motorun durum kelimelerini bitlerine ayırarak hata analizi yapma.
Bit Bazında KontrolBitleri ayrı ayrı okuyarak veya değiştirerek kontrol sağlama.
Veri AyrıştırmaBit dizilerini anlamlı yapılara (örneğin, UDT) dönüştürme.

Açıklama: SCATTER_BLK, birden fazla bit dizisini toplu olarak analiz ederek veri yönetimini kolaylaştırır.

PLC Programlama Örnekleri

SCATTER_BLK komutu, toplu durum analizi, bit bazında kontrol ve veri ayrıştırma gibi senaryolarda kullanılır. İşte detaylı örnekler:

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

Network 1: ARRAY[0..5] of WORD → ARRAY[0..95] of BOOL
EN----[ SCATTER_BLK ]----ENO
      | IN: SourceArrayWord[2]       |
      | COUNT_IN: 3                  |
      | OUT: DestinationArrayBool[0] |
        

Açıklama: EN = 1 olduğunda, SourceArrayWord[2..4] (3 WORD, 48 bit) bitlerine ayrıştırılır ve DestinationArrayBool[0..47]’ye yazılır. Örneğin, SourceArrayWord[2] = 16#0003 ise DestinationArrayBool[0] = TRUE, DestinationArrayBool[1] = TRUE, diğerleri FALSE olur.

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

Network 2: ARRAY[-2..93] of BOOL ile Hizalama
EN----[ SCATTER_BLK ]----ENO
      | IN: SourceArrayWord[2]        |
      | COUNT_IN: 3                   |
      | OUT: DestinationArrayBool[14] |
        

Açıklama: EN = 1 olduğunda, SourceArrayWord[2..4] (3 WORD, 48 bit) bitlerine ayrıştırılır. Hedef indeks 14 (WORD sınırı: -2 + 1×16) olduğundan, DestinationArrayBool[14..61]’e yazılır.

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

Network 3: Hata Yönetimi (Hedef Yetersiz)
EN----[ SCATTER_BLK ]----ENO
      | IN: SourceArrayWord[0]       |
      | COUNT_IN: 3                  |
      | OUT: DestinationArrayBool[0] |
|----[ ENO = 0 ]----( Hata_Alarm )----|
        

Açıklama: EN = 1 olduğunda, SourceArrayWord[0..2] (3 WORD, 48 bit) ayrıştırılmaya çalışılır. Ancak DestinationArrayBool sadece ARRAY[0..31] of BOOL (32 eleman) 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----[ SCATTER_BLK ]----ENO
      | IN: SourceArrayWord[0]           |
      | COUNT_IN: 3                      |
      | OUT: DestinationArrayBool[0,0,0] |
        

Açıklama: EN = 1 olduğunda, SourceArrayWord[0..2] (3 WORD, 48 bit) ayrıştırılır. Hedef ARRAY[0..1,0..5,0..3] of BOOL (48 bit) olduğundan, bitler sırasıyla yazılır.

Örnek 5: ARRAY of BYTE Kullanımı

Network 5: ARRAY of BYTE Kullanımı
EN----[ SCATTER_BLK ]----ENO
      | IN: SourceArrayByte[0]       |
      | COUNT_IN: 2                  |
      | OUT: DestinationArrayBool[0] |
        

Açıklama: EN = 1 olduğunda, SourceArrayByte[0..1] (2 BYTE, 16 bit) ayrıştırılır ve DestinationArrayBool[0..15]’e yazılır. Örneğin, SourceArrayByte[0] = 16#0F ise DestinationArrayBool[0..3] = TRUE, diğerleri FALSE olur.

Günlük Hayattan Örnekler

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

  • Koli Dağıtımı: Birden fazla kolideki ürünleri (IN) ayrı ayrı raflara (OUT) dağıtma.
  • Para Bozdurma: Birden fazla banknotu (IN) bozuk paralara (OUT) ayırma.
  • Şeker Paketleri: Birden fazla şeker paketini (IN) tek tek kaplara (OUT) yerleştirme.
  • Belge Ayrıştırma: Birden fazla belgeyi (IN) satır satır (OUT) ayırma.

Avantajlar

  • Toplu Bit Analizi: Birden fazla bit dizisini aynı anda analiz ederek zaman kazandırır.
  • Esneklik: ARRAY of BOOL, STRUCT ve UDT gibi farklı yapılarla çalışabilir.
  • Kolay Veri Yönetimi: Bitleri anlamlı isimlerle (örneğin, UDT ile) eşleştirerek okunabilirliği artırır.
  • Hata Yönetimi: ENO çıkışı ile işlem başarısını kontrol ederek güvenilirlik sunar.

Dikkat Edilmesi Gerekenler

  • Hedef Boyutu: OUT yapısı, IN’den ayrıştırılacak bit sayısına (COUNT_IN × bit_dizisi_boyutu) uygun olmalıdır; aksi halde ENO = 0 olur.
  • Indeks Hizalama: Hedef 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_IN × Bit Dizisi Boyutu (örneğin, 3 WORD × 16 bit = 48 BOOL).
  • Indeks Hizalama: Hedef 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).
  • GATHER_BLK ile Tamamlama: Ayrıştırılan bitleri tekrar birleştirmek için GATHER_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 SCATTER_BLK komutu, birden fazla bit dizisini toplu olarak analiz etmek ve bit bazında kontrol sağlamak için esnek ve güçlü 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