MOVE_BLK: Move Block (Bloğu Aktar)

MOVE_BLK: Move Block (Bloğu Aktar)

Siemens TIA (Totally Integrated Automation) Portal’da MOVE_BLK (Blok Taşıma) komutu, bir bellek alanındaki verileri (kaynak) başka bir bellek alanına (hedef) toplu olarak kopyalamak için kullanılan bir fonksiyondur. Özellikle ARRAY, STRUCT gibi yapısal verilerin taşınmasında etkilidir. Bu rehberde, MOVE_BLK komutunun mantığını, kullanım örneklerini, avantajlarını, dikkat edilmesi gereken noktaları ve pratik ipuçlarını detaylıca ele alacağız.

MOVE_BLK Komutu Nedir?

MOVE_BLK, bir bellek alanındaki verileri (IN) başka bir bellek alanına (OUT) toplu olarak kopyalamak için kullanılan bir komuttur. Bu komut, özellikle yapısal veri tipleri (ARRAY, STRUCT) ile çalışırken veri transferini kolaylaştırır ve programın performansını artırır.

Çalışma Mantığı: MOVE_BLK, EN girişiyle tetiklenir. EN = 1 olduğunda, IN’den başlayarak COUNT kadar eleman OUT’a kopyalanır. İşlem başarılıysa ENO = 1 olur; aksi halde (örneğin, COUNT aşımı veya bellek çakışması durumunda) ENO = 0 döner.

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

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

Kullanım AmacıAçıklama
Veri Bloklarını TaşımaSensör verilerini toplu şekilde işlemek.
Yapısal Veri AktarımıARRAY veya STRUCT’ları bir DB’den diğerine kopyalamak.
Optimize PerformansTek bir komutla çoklu veri transferi yaparak programı basitleştirme.

Temel Parametreler:

ParametreVeri TipiAçıklama
ENBOOLKomutu aktifleştirmek için "1" olmalı.
ENOBOOLİşlem başarılıysa "1", değilse "0" döner.
INARRAY, STRUCT, vs.Kaynak verinin başlangıç adresi (örneğin, DB1.SourceArray[0]).
COUNTUSINT, UINT, UDINTTaşınacak eleman sayısı (örneğin, 10).
OUTARRAY, STRUCT, vs.Hedef verinin başlangıç adresi (örneğin, DB2.TargetArray[0]).

Not: S7-1500’de COUNT için ULINT desteklenirken, S7-1200’de bu destek yoktur; bu nedenle S7-1200’de COUNT için UDINT sınırı (4,294,967,295) aşılmamalıdır.

Kombine Örnek: Farklı Senaryolar

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

Kullanım AmacıÖrnek Senaryo
Veri Bloklarını TaşımaSensör verilerini toplu şekilde bir DB’ye kopyalama.
Yapısal Veri AktarımıReçete verilerini (STRUCT) bir DB’den diğerine kopyalama.
Optimize PerformansBüyük veri bloklarını hızlıca aktararak işlem süresini kısaltma.

Açıklama: MOVE_BLK, toplu veri transferi ile programın karmaşıklığını azaltır ve performansı artırır.

PLC Programlama Örnekleri

MOVE_BLK komutu, sensör verisi işleme, reçete yönetimi ve veri loglama gibi senaryolarda kullanılır. İşte detaylı örnekler:

Örnek 1: ARRAY → ARRAY Taşıma

Network 1: ARRAY → ARRAY Taşıma
EN----[ MOVE_BLK ]----ENO
      | IN: DB1.SourceArray[0] |
      | COUNT: 5               |
      | OUT: DB2.TargetArray[0]|
        

Açıklama: EN = 1 olduğunda, DB1.SourceArray’deki 5 eleman (örneğin, [10, 20, 30, 40, 50]) DB2.TargetArray’e kopyalanır. Sonuç: DB2.TargetArray = [10, 20, 30, 40, 50].

Örnek 2: STRUCT Taşıma

Network 2: STRUCT Taşıma
EN----[ MOVE_BLK ]----ENO
      | IN: DB3.Motor1         |
      | COUNT: 1               |
      | OUT: DB4.Motor1_Backup |
        

Açıklama: EN = 1 olduğunda, DB3.Motor1 STRUCT’ı DB4.Motor1_Backup’a kopyalanır. COUNT = 1, çünkü tek bir STRUCT taşınıyor.

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

Network 3: Hata Yönetimi (COUNT Aşımı)
EN----[ MOVE_BLK ]----ENO
      | IN: DB5.Data[0]    |
      | COUNT: 3           |
      | OUT: DB6.Target[0] |
|----[ ENO = 0 ]----( Hata_Alarm )----|
        

Açıklama: EN = 1 olduğunda, DB5.Data’dan 3 eleman DB6.Target’a kopyalanır. Ancak DB6.Target sadece 2 elemanlık bir ARRAY ise ENO = 0 olur ve Hata_Alarm aktif olur.

Örnek 4: Dinamik COUNT Hesaplama

Network 4: Dinamik COUNT Hesaplama
EN----[ MOVE_BLK ]----ENO
      | IN: DB7.SourceData[0]  |
      | COUNT: #DynamicCount   |
      | OUT: DB8.TargetData[0] |
        

Açıklama: EN = 1 olduğunda, DB7.SourceData’dan DB8.TargetData’ya #DynamicCount kadar eleman kopyalanır. #DynamicCount, MIN(SIZE(DB7.SourceData), SIZE(DB8.TargetData)) ile hesaplanabilir.

Örnek 5: Büyük Veri Transferi (S7-1500)

Network 5: Büyük Veri Transferi (S7-1500)
EN----[ MOVE_BLK ]----ENO
      | IN: DB9.LargeData[0]   |
      | COUNT: 1000            |
      | OUT: DB10.LargeCopy[0] |
        

Açıklama: EN = 1 olduğunda, DB9.LargeData’dan 1000 eleman DB10.LargeCopy’ye kopyalanır. S7-1500’de ULINT desteği sayesinde büyük COUNT değerleri kullanılabilir.

Günlük Hayattan Örnekler

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

  • Kutu Taşıma: Bir kutudaki eşyaları (IN) başka bir kutuya (OUT) toplu şekilde taşıma.
  • Fotokopi Yığını: Bir yığın belgeyi (IN) başka bir yığına (OUT) kopyalama.
  • Kitap Rafı: Bir raftaki kitapları (IN) başka bir rafa (OUT) toplu şekilde yerleştirme.
  • Bagaj Transferi: Bir araçtaki bagajları (IN) başka bir araca (OUT) toplu şekilde aktarma.

Avantajlar

  • Toplu Transfer: Çoklu elemanları tek komutla taşıyarak program karmaşıklığını azaltır.
  • Performans: Büyük veri bloklarını hızlıca aktararak işlem süresini kısaltır.
  • Esneklik: ARRAY, STRUCT gibi yapısal veri tiplerini destekler.
  • Hata Yönetimi: ENO çıkışı ile işlem başarısını kontrol ederek güvenilirlik sağlar.

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, kaynak veya hedef ARRAY boyutunu aşarsa ENO = 0 olur ve veri kaybı riski oluşur.
  • Bellek Çakışması: IN ve OUT aynı bellek alanını paylaşırsa veri bozulabilir.
  • S7-1200 ve S7-1500 Farkları: S7-1500’de ULINT desteği sayesinde büyük COUNT değerleri kullanılabilir, ancak S7-1200’de UDINT sınırı (4,294,967,295) aşılmamalıdır.

İpuçları

  • ARRAY Boyut Kontrolü: COUNT değerini dinamik olarak hesaplayın: COUNT = MIN(SIZE(IN), SIZE(OUT)).
  • STRUCT Kullanımı: STRUCT taşırken COUNT = 1 olmalıdır.
  • BOOL ARRAY’leri: ARRAY of BOOL kullanırken byte sınırlarına dikkat edin (8 BOOL = 1 byte).
  • Hata Yönetimi: ENO çıkışını bir hata göstergesine bağlayarak (örneğin, Hata_Alarm) hataları izleyin.
  • Bellek Çakışmasını Önleme: IN ve OUT’un farklı bellek alanlarında olduğundan emin olun; gerekirse ara bir DB kullanın.

Sonuç

Siemens TIA Portal’daki MOVE_BLK komutu, toplu veri transferi için yüksek verimlilik sağlar. Sensör verilerini işlemek, reçete değerlerini aktarmak veya büyük veri bloklarını kopyalamak gibi senaryolarda sıkça kullanılır. Doğru parametre kullanımı ve hata yönetimiyle güvenilir bir şekilde kullanılabilir. Daha fazla bilgi için Siemens Online Destek sayfasını ziyaret edebilirsiniz.

Yorumlar