AssignmentAttempt: Attempt Assignment of a VARIANT to a Reference (Bir Varyantı Referansa Atamayı Dene)
Siemens TIA Portal’da AssignmentAttempt (Atama Denemesi) komutu, VARIANT tipindeki bir değişkeni belirli bir veri tipine sahip referans değişkenine atamak için kullanılan bir fonksiyondur. VARIANT’ın veri tipi runtime’da belirlenirken, referansın veri tipi derleme zamanında tanımlıdır. Bu komut, runtime sırasında tip uyumluluğunu kontrol eder ve uyumluysa atamayı gerçekleştirir; aksi halde referansı NULL olarak ayarlar. Bu rehberde, AssignmentAttempt komutunun mantığını, kullanım örneklerini, avantajlarını, dikkat edilmesi gereken noktaları ve pratik ipuçlarını detaylıca ele alacağız.
1. AssignmentAttempt Komutu Nedir?
AssignmentAttempt, VARIANT tipindeki bir değişkeni, belirli bir veri tipine sahip referans değişkenine atamayı deneyen bir komuttur. VARIANT’ın veri tipi runtime’da belirlenir ve referanslar için örtük (implicit) tip dönüşümü desteklenmez. Bu nedenle, AssignmentAttempt komutu runtime’da tip kontrolü yaparak güvenli bir atama sağlar. Eğer VARIANT’ın veri tipi referansın beklediği veri tipiyle uyumluysa, atama başarılı olur ve referans geçerli bir adresi işaret eder; aksi halde referans NULL olur.
Çalışma Mantığı: AssignmentAttempt, EN girişiyle tetiklenir. EN = 1 olduğunda, SRC’deki VARIANT’ın veri tipi kontrol edilir. Eğer VARIANT’ın tipi, DST referansının beklediği veri tipiyle uyumluysa, atama yapılır ve ENO = 1 olur. Aksi halde, DST = NULL olur ve ENO = 0 döner.
2. AssignmentAttempt Komutunun Mantığı ve Kullanım Alanları
AssignmentAttempt komutu, aşağıdaki senaryolarda kullanılır:
Kullanım Amacı | Açıklama |
---|---|
Tip Güvenliği | Runtime’da VARIANT’ın veri tipini kontrol ederek güvenli atama yapma. |
Esnek Programlama | Farklı veri tipleriyle çalışan genel amaçlı fonksiyonlar oluşturma. |
Hata Önleme | Tip uyumsuzluğunda NULL atayarak programın çökmesini önleme. |
Temel Parametreler:
Parametre | Veri Tipi | Bellek Alanı | Açıklama |
---|---|---|---|
EN | BOOL | I, Q, M, D, L veya sabit | Komutu aktifleştirmek için "1" olmalı. |
ENO | BOOL | I, Q, M, D, L | İşlem başarılıysa "1", değilse "0" döner. |
SRC | VARIANT | FC: Input, Output, InOut, Temp FB: Input, InOut, Temp | Kaynak VARIANT değişken (örneğin, myVariant). |
DST | Referans (Bit dizileri, tamsayılar, kayan noktalı sayılar, dizeler, UDT, SDT, ARRAY) | FC: Input, Output, Temp, Return FB: Temp | Hedef referans (örneğin, REF_TO INT). |
3. Kombine Örnek: Farklı Senaryolar
Sistem: AssignmentAttempt komutunun farklı kullanım alanları:
Kullanım Amacı | Örnek Senaryo |
---|---|
Tip Güvenliği | Runtime’da VARIANT’ın veri tipini kontrol ederek güvenli atama yapma. |
Esnek Programlama | Farklı veri tipleriyle çalışan genel amaçlı fonksiyonlar oluşturma. |
Hata Önleme | Tip uyumsuzluğunda NULL atayarak programın çökmesini önleme. |
Açıklama: AssignmentAttempt, dinamik veri tipleriyle çalışırken tip güvenliği sağlar ve esnek programlama imkanı sunar.
4. PLC Programlama Örnekleri
AssignmentAttempt komutu, tip güvenliği, esnek programlama ve hata önleme gibi senaryolarda kullanılır. İşte detaylı örnekler:
Örnek 1: VARIANT → INT Referansı (Başarılı Atama)
Network 1: VARIANT → INT Referansı (Başarılı Atama) EN----[ AssignmentAttempt ]----ENO | SRC: myVariant | | DST: myReference |
Açıklama: EN = 1 olduğunda, myVariant (VARIANT, runtime’da INT, değer = 10) kontrol edilir. myReference (REF_TO INT) ile uyumlu olduğundan atama yapılır, ENO = 1 olur ve myReference^ = 10 okunabilir.
Örnek 2: VARIANT → INT Referansı (Başarısız Atama)
Network 2: VARIANT → INT Referansı (Başarısız Atama) EN----[ AssignmentAttempt ]----ENO | SRC: myVariant | | DST: myReference |
Açıklama: EN = 1 olduğunda, myVariant (VARIANT, runtime’da REAL) kontrol edilir. myReference (REF_TO INT) ile uyumsuz olduğundan myReference = NULL olur, ENO = 0 döner.
Örnek 3: Hata Yönetimi (Tip Uyumsuzluğu)
Network 3: Hata Yönetimi (Tip Uyumsuzluğu) EN----[ AssignmentAttempt ]----ENO | SRC: myVariant | | DST: myReference | |----[ ENO = 0 ]----( Hata_Alarm )----|
Açıklama: EN = 1 olduğunda, myVariant (VARIANT, runtime’da REAL) kontrol edilir. myReference (REF_TO INT) ile uyumsuz olduğundan myReference = NULL olur, ENO = 0 döner ve Hata_Alarm aktif olur.
Örnek 4: VARIANT → ARRAY Referansı (Boyut Uyumsuzluğu)
Network 4: VARIANT → ARRAY Referansı (Boyut Uyumsuzluğu) EN----[ AssignmentAttempt ]----ENO | SRC: myVariantArray | | DST: myArrayReference |
Açıklama: EN = 1 olduğunda, myVariantArray (VARIANT, ARRAY[0..9] of INT) kontrol edilir. myArrayReference (REF_TO ARRAY[1..10] of INT) ile boyutlar uyumsuz olduğundan myArrayReference = NULL olur, ENO = 0 döner.
Örnek 5: VARIANT → UDT Referansı
Network 5: VARIANT → UDT Referansı EN----[ AssignmentAttempt ]----ENO | SRC: myVariantUDT | | DST: myUDTReference |
Açıklama: EN = 1 olduğunda, myVariantUDT (VARIANT, runtime’da UDT tipinde) kontrol edilir. myUDTReference (REF_TO UDT) ile uyumluysa atama yapılır, ENO = 1 olur; aksi halde myUDTReference = NULL olur.
5. Günlük Hayattan Örnekler
AssignmentAttempt komutunun mantığını anlamak için günlük hayattan benzetmeler:
- Kutu Eşleştirme: Bir kutudaki eşyayı (VARIANT) başka bir kutuya (referans) koymaya çalışmak; kutular uyumlu değilse eşya yerine boşluk (NULL) bırakılır.
- Şifre Kontrolü: Bir şifreyi (VARIANT) bir kilide (referans) denemek; şifre uyumlu değilse kilit açılmaz (NULL).
- Giysi Deneme: Bir kıyafeti (VARIANT) birine (referans) giydirmeye çalışmak; beden uyumlu değilse giyilmez (NULL).
- Yemek Tarifi: Bir malzemeyi (VARIANT) bir tarife (referans) eklemeye çalışmak; malzeme uygun değilse tarif bozulmaz (NULL).
6. Avantajlar
- Tip Güvenliği: Runtime’da tip kontrolü yaparak hatalı atamaları önler.
- Esneklik: Dinamik veri tipleriyle (VARIANT) çalışmayı mümkün kılar.
- Hata Yönetimi: Tip uyumsuzluğunda NULL atayarak programın çökmesini engeller.
- Genel Amaçlı Kullanım: Farklı veri tipleriyle çalışan fonksiyonlar için idealdir.
7. Dikkat Edilmesi Gerekenler
- Bellek Alanı: VARIANT, optimize bellek alanında olmalıdır; geçici (temp) bellek desteklenmez.
- ARRAY Boyutları: VARIANT bir ARRAY işaret ediyorsa, boyutları referansın ARRAY boyutlarıyla tam olarak eşleşmelidir; aksi halde ENO = 0 olur.
- Tip Uyumu: VARIANT’ın runtime veri tipi, referansın beklediği veri tipiyle uyumlu olmalıdır.
- Firmware Uyumu: S7-1500 için firmware ≥ V2.5 gereklidir.
8. İpuçları
- Tip Kontrolü: Referansın veri tipini net tanımlayın ve VARIANT’ın runtime tipiyle uyumlu olduğundan emin olun.
- NULL Kontrolü: Atama sonrası referansın NULL olup olmadığını kontrol edin. Örneğin:
IF "myReference" <> NULL THEN "myValue" := "myReference"^; // Güvenli işlem ELSE "Hata_Alarm" := TRUE; // Hata yönetimi END_IF;
- Optimize Bellek Kullanımı: VARIANT’ları daima optimize bellek alanında tanımlayın. Daha fazla bilgi için Variant Kullanımı sayfasını inceleyebilirsiniz.
- 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.
9. Sonuç
Siemens TIA Portal’daki AssignmentAttempt komutu, dinamik veri tipleriyle çalışırken tip güvenliği sağlayan kritik bir araçtır. Runtime’da yapılan tip kontrolüyle hataları önler ve esnek programlama imkanı sunar. Doğru yapılandırma ve hata yönetimiyle endüstriyel uygulamalarda güvenilirlik sağlar. Daha fazla bilgi için Siemens Online Destek sayfasını ziyaret edebilirsiniz.
Yorumlar
Yorum Gönder