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 Analizi | Birden fazla durum kelimesini (status word) bit seviyesinde analiz etme. |
Bit Bazında Kontrol | Bitleri ayrı ayrı okuyarak veya değiştirerek kontrol sağlama. |
Veri Ayrıştırma | Bit dizilerini anlamlı yapılara (örneğin, UDT) dönüştürme. |
Temel Parametreler:
Parametre | Veri Tipi (S7-1200) | Veri Tipi (S7-1500) | Açıklama |
---|---|---|---|
EN | BOOL | BOOL | Komutu aktifleştirmek için "1" olmalı. |
ENO | BOOL | BOOL | İşlem başarılıysa "1", değilse "0" döner. |
IN | Element of ARRAY[*] of BYTE, WORD, DWORD | Element of ARRAY[*] of BYTE, WORD, DWORD, LWORD | Kaynak ARRAY (örneğin, ARRAY[0..5] of WORD). |
COUNT_IN | USINT, UINT, UDINT | USINT, UINT, UDINT, ULINT | Kaynak ARRAY’den kaç elemanın ayrıştırılacağı. |
OUT | Element of ARRAY[*] of BOOL, STRUCT, UDT | Element of ARRAY[*] of BOOL, STRUCT, UDT | Bitlerin 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 Analizi | Birden fazla motorun durum kelimelerini bitlerine ayırarak hata analizi yapma. |
Bit Bazında Kontrol | Bitleri ayrı ayrı okuyarak veya değiştirerek kontrol sağlama. |
Veri Ayrıştırma | Bit 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
Yorum Gönder