Siemens TIA (Totally Integrated Automation) Portal’da MOVE_BLK_VARIANT komutu, VARIANT veri tipi kullanarak esnek bellek kopyalama işlemleri yapmanızı sağlayan bir fonksiyondur. Bu komut, ARRAY veya STRUCT gibi yapısal verilerin dinamik olarak bir bellek alanından diğerine taşınmasını kolaylaştırır. Özellikle ARRAY boyutları farklı olsa bile veri aktarımı yapabilirsiniz. Bu rehberde, MOVE_BLK_VARIANT komutunun mantığını, kullanım örneklerini, avantajlarını, dikkat edilmesi gereken noktaları ve pratik ipuçlarını detaylıca ele alacağız.
MOVE_BLK_VARIANT Komutu Nedir?
MOVE_BLK_VARIANT, VARIANT veri tipiyle çalışarak esnek veri transferi sağlayan bir komuttur. MOVE_BLK’ten farklı olarak, kaynak (SRC) ve hedef (DEST) alanlarının dinamik olarak belirlenmesine olanak tanır. Bu, özellikle farklı boyutlardaki ARRAY’ler veya yapısal verilerle çalışırken büyük bir avantaj sağlar.
Çalışma Mantığı: MOVE_BLK_VARIANT, EN girişiyle tetiklenir. EN = 1 olduğunda, SRC’den başlayarak COUNT kadar eleman, SRC_INDEX ve DEST_INDEX ile belirtilen konumlardan itibaren DEST’e kopyalanır. İşlem başarılıysa ENO = 1 olur; aksi halde (örneğin, indeks aşımı veya veri tipi uyumsuzluğu durumunda) ENO = 0 döner.
MOVE_BLK_VARIANT Komutunun Mantığı ve Kullanım Alanları
MOVE_BLK_VARIANT komutu, aşağıdaki senaryolarda kullanılır:
Kullanım Amacı | Açıklama |
---|---|
Dinamik Veri Aktarımı | Farklı boyutlardaki ARRAY’leri veya yapısal verileri kopyalama. |
Esnek İndeksleme | Kaynak ve hedef ARRAY’lerde belirli indekslerden başlayarak veri transferi. |
Yapısal Veri İşleme | STRUCT veya UDT gibi karmaşık veri yapılarını dinamik olarak kopyalama. |
Temel Parametreler:
Parametre | Veri Tipi | Açıklama |
---|---|---|
EN | BOOL | Komutu aktifleştirmek için "1" olmalı. |
ENO | BOOL | İşlem başarılıysa "1", değilse "0" döner. |
SRC | VARIANT | Kaynak veri (ARRAY veya ARRAY elemanı). BOOL ve ARRAY of BOOL desteklenmez. |
COUNT | UDINT | Kopyalanacak eleman sayısı. SRC ve DEST ARRAY değilse 1 olmalı. |
SRC_INDEX | DINT | Kaynak ARRAY’deki başlangıç indeksi (sıfır tabanlı). |
DEST_INDEX | DINT | Hedef ARRAY’deki başlangıç indeksi (sıfır tabanlı). |
DEST | VARIANT | Hedef bellek alanı (InOut olarak tanımlanmalı). |
RET_VAL | INT | Hata kodu; başarı durumunda "0" döner. |
Hata Kodları (RET_VAL):
Hata Kodu (W#16#...) | Açıklama |
---|---|
80B4 | ARRAY of STRUCT yerine ARRAY of UDT kullanılmalı. |
8151 | SRC parametresine erişilemiyor. |
8382 | SRC_INDEX negatif değer alamaz. |
8483 | Hedef ARRAY, kopyalanacak veri için çok küçük. |
Kombine Örnek: Farklı Senaryolar
Sistem: MOVE_BLK_VARIANT komutunun farklı kullanım alanları:
Kullanım Amacı | Örnek Senaryo |
---|---|
Dinamik Veri Aktarımı | Farklı boyutlardaki sensör verilerini (ARRAY) kopyalama. |
Esnek İndeksleme | Reçete verilerini belirli bir indeksten başlayarak kopyalama. |
Yapısal Veri İşleme | STRUCT verilerini dinamik olarak bir DB’den diğerine kopyalama. |
Açıklama: MOVE_BLK_VARIANT, VARIANT veri tipiyle esnek veri transferi sağlar ve farklı boyutlardaki verilerle çalışmayı kolaylaştırır.
PLC Programlama Örnekleri
MOVE_BLK_VARIANT komutu, dinamik veri aktarımı, esnek indeksleme ve yapısal veri işleme gibi senaryolarda kullanılır. İşte detaylı örnekler:
Örnek 1: ARRAY → ARRAY Kopyalama
Network 1: ARRAY → ARRAY Kopyalama EN----[ MOVE_BLK_VARIANT ]----ENO | SRC: #SrcArray[0] | | COUNT: 3 | | SRC_INDEX: 2 | | DEST_INDEX: 1 | | DEST: #DestArray[0] | | RET_VAL: #ErrorCode |
Açıklama: EN = 1 olduğunda, #SrcArray’deki 3 eleman (indeks 2’den başlayarak: 30, 40, 50) #DestArray’e (indeks 1’den başlayarak) kopyalanır. #SrcArray: [10, 20, 30, 40, 50], #DestArray: [0, 0, 0, 0, 0] → [0, 30, 40, 50, 0].
Örnek 2: Farklı İndekslerle Kopyalama
Network 2: Farklı İndekslerle Kopyalama EN----[ MOVE_BLK_VARIANT ]----ENO | SRC: DB1.DataArray | | COUNT: 2 | | SRC_INDEX: 3 | | DEST_INDEX: 2 | | DEST: DB2.TargetArray | | RET_VAL: #ErrorCode |
Açıklama: EN = 1 olduğunda, DB1.DataArray’deki 2 eleman (indeks 3’ten başlayarak: 400, 500) DB2.TargetArray’e (indeks 2’den başlayarak) kopyalanır. DB1.DataArray: [100, 200, 300, 400, 500], DB2.TargetArray: [0, 0, 0, 0, 0] → [0, 0, 400, 500, 0].
Örnek 3: STRUCT Kopyalama
Network 3: STRUCT Kopyalama EN----[ MOVE_BLK_VARIANT ]----ENO | SRC: DB3.MotorSettings | | COUNT: 1 | | SRC_INDEX: 0 | | DEST_INDEX: 0 | | DEST: DB4.BackupSettings| | RET_VAL: #ErrorCode |
Açıklama: EN = 1 olduğunda, DB3.MotorSettings STRUCT’ı DB4.BackupSettings’e kopyalanır. COUNT = 1, çünkü tek bir STRUCT taşınıyor.
Örnek 4: Hata Yönetimi
Network 4: Hata Yönetimi EN----[ MOVE_BLK_VARIANT ]----ENO | SRC: DB5.SourceData | | COUNT: 5 | | SRC_INDEX: 0 | | DEST_INDEX: 0 | | DEST: DB6.TargetData | | RET_VAL: #ErrorCode | |----[ #ErrorCode <> W#16#0000 ]----( Q0.0 )----|
Açıklama: EN = 1 olduğunda, DB5.SourceData’dan 5 eleman DB6.TargetData’ya kopyalanır. Eğer işlem başarısız olursa (örneğin, hedef ARRAY küçükse, W#16#8483), #ErrorCode W#16#0000’den farklı olur ve Q0.0 (hata çıkışı) aktif olur.
Örnek 5: Dinamik COUNT ve İndeks Hesaplama
Network 5: Dinamik COUNT ve İndeks Hesaplama EN----[ MOVE_BLK_VARIANT ]----ENO | SRC: DB7.SensorData | | COUNT: #DynamicCount | | SRC_INDEX: #StartIndex | | DEST_INDEX: #TargetIndex| | DEST: DB8.LogData | | RET_VAL: #ErrorCode |
Açıklama: EN = 1 olduğunda, DB7.SensorData’dan #DynamicCount kadar eleman, #StartIndex’ten başlayarak DB8.LogData’ya, #TargetIndex’ten itibaren kopyalanır. #DynamicCount, MIN(SIZE(SRC) - SRC_INDEX, SIZE(DEST) - DEST_INDEX) ile hesaplanabilir.
Örnek 6: VARIANT ile Esnek Veri Aktarımı
Network 6: VARIANT ile Esnek Veri Aktarımı EN----[ MOVE_BLK_VARIANT ]----ENO | SRC: #DynamicSrc | | COUNT: 3 | | SRC_INDEX: 0 | | DEST_INDEX: 0 | | DEST: #DynamicDest | | RET_VAL: #ErrorCode |
Açıklama: EN = 1 olduğunda, #DynamicSrc (VARIANT, örneğin bir ARRAY of REAL) içindeki 3 eleman #DynamicDest’e (VARIANT, örneğin başka bir ARRAY of REAL) kopyalanır. VARIANT, farklı veri tipleriyle esnek çalışmayı sağlar.
Günlük Hayattan Örnekler
MOVE_BLK_VARIANT komutunun mantığını anlamak için günlük hayattan benzetmeler:
- Kitap Transferi: Bir raftaki belirli bir kitaptan (SRC_INDEX) başlayarak birkaç kitabı (COUNT) başka bir rafın belirli bir yerine (DEST_INDEX) taşıma.
- Fotoğraf Albümü: Bir albümdeki belirli fotoğrafları (SRC) başka bir albümün belirli bir sayfasına (DEST) kopyalama.
- Kutu Düzenleme: Bir kutudaki eşyaları (SRC) başka bir kutunun belirli bir bölümüne (DEST) yerleştirme.
- Bagaj Aktarımı: Bir araçtaki bagajlardan bazılarını (SRC) başka bir aracın belirli bir yerine (DEST) taşıma.
Avantajlar
- Esneklik: VARIANT veri tipi sayesinde farklı boyutlardaki ARRAY’ler ve yapısal verilerle çalışabilir.
- Dinamik İndeksleme: SRC_INDEX ve DEST_INDEX ile belirli konumlardan veri transferi yapma imkanı sunar.
- Veri Uyumluluğu: Dinamik veri tipleriyle çalışarak programın esnekliğini artırır.
- Hata Yönetimi: RET_VAL ve ENO ile işlem başarısını kontrol ederek güvenilirlik sağlar.
Dikkat Edilmesi Gerekenler
- BOOL Desteği: BOOL ve ARRAY of BOOL desteklenmez; bu tür veriler için ARRAY of BYTE kullanın.
- İndeks Sınırları: SRC_INDEX ve DEST_INDEX negatif olamaz (W#16#8382); ayrıca, indeksler ARRAY sınırlarını aşarsa hata oluşur.
- COUNT Sınırı: COUNT, kaynak veya hedef ARRAY boyutunu aşarsa (W#16#8483) hata oluşur.
- Veri Tipi Uyumu: SRC ve DEST’in veri tipleri uyumlu olmalıdır; aksi halde işlem başarısız olur.
İpuçları
- VARIANT Esnekliği: Blok oluşturulurken ARRAY boyutları bilinmiyorsa, VARIANT kullanarak dinamik kopyalama yapabilirsiniz.
- İndeks Hesaplama: SRC_INDEX ve DEST_INDEX’in sıfır tabanlı olduğunu unutmayın; ARRAY sınırlarını aşmamak için kontrol yapın.
- COUNT Kontrolü: COUNT değerini MIN(SIZE(SRC) - SRC_INDEX, SIZE(DEST) - DEST_INDEX) ile sınırlayın.
- Hata Yönetimi: RET_VAL ve ENO’yu bir hata göstergesine bağlayarak (örneğin, Q0.0) hataları izleyin.
- BOOL Verileri: BOOL ARRAY’leri yerine ARRAY of BYTE kullanarak hizalamadan kaynaklanan hataları önleyin.
Sonuç
Siemens TIA Portal’daki MOVE_BLK_VARIANT komutu, dinamik bellek yönetimi ve esnek veri aktarımı için ideal bir araçtır. VARIANT veri tipi sayesinde farklı boyutlardaki ARRAY’leri ve yapısal verileri güvenle kopyalayabilirsiniz. Hata kodlarını düzenli kontrol ederek kararlı bir programlama yapabilirsiniz. Daha fazla bilgi için Siemens Online Destek sayfasını ziyaret edebilirsiniz.
Yorumlar
Yorum Gönder