Tia Portal : Lower_Bound ve Upper_Bound

Tia Portal : Lower_Bound ve Upper_Bound

Siemens S7-1200 ve S7-1500 serisi PLC’lerde kullanılan Lower_Bound ve Upper_Bound komutları, dinamik olarak tanımlanmış ARRAY[*] veri tiplerinin düşük ve yüksek sınırlarını okumak için tasarlanmıştır. Bu komutlar, özellikle dinamik dizilerle çalışırken döngü kontrolü, bellek yönetimi ve hata önleme gibi senaryolarda büyük kolaylık sağlar. Bu rehberde, Siemens S7-1200/S7-1500 PLC’lerde Lower_Bound ve Upper_Bound komutlarının mantığını, kullanım örneklerini, avantajlarını, dikkat edilmesi gereken noktaları ve pratik ipuçlarını detaylıca ele alacağız. Daha fazla bilgi için Siemens PLC Nedir? yazımıza göz atabilirsiniz.

1. Siemens S7-1200/S7-1500 PLC’de Lower_Bound ve Upper_Bound Komutları Nedir?

Siemens S7-1200 ve S7-1500 serisi PLC’lerde kullanılan Lower_Bound ve Upper_Bound komutları, dinamik dizilerle çalışırken sınır kontrolü sağlar.

  • Kullanım: Lower_Bound, bir ARRAY[*] dizisinin düşük sınırını (başlangıç indeksini) okur; Upper_Bound ise yüksek sınırını (bitiş indeksini) okur.
  • Örnek: EN = 1 olduğunda, ARR parametresindeki dizinin belirtilen DIM boyutunun sınırı OUT’a yazılır.
  • Fayda: Dinamik dizilerle çalışırken döngü kontrolü ve hata önleme sağlar.

2. Lower_Bound ve Upper_Bound Komutlarının Mantığı ve Kullanım Alanları

Bu komutlar, dinamik dizilerle çalışırken farklı senaryolarda kullanılır.

  • Kullanım: Dinamik dizi kontrolü, döngü yönetimi ve hata önleme.
  • Örnek: Dizi elemanlarını döngüyle işlerken sınırları belirlemek için kullanılır.
  • Fayda: Geçersiz indeks erişimlerini önleyerek program güvenilirliğini artırır.
Kullanım AmacıAçıklama
Dinamik Dizi KontrolüDinamik boyutlu dizilerle çalışırken sınırları belirleme.
Döngü YönetimiDizi elemanlarını döngüyle işlerken sınırları kullanma.
Hata ÖnlemeGeçersiz indeks erişimlerini önlemek için sınır kontrolü.

Temel Parametreler:

ParametreVeri TipiBellek AlanıAçıklama
ENBOOLI, Q, M, D, L veya sabitKomutu aktifleştirmek için "1" olmalı.
ENOBOOLI, Q, M, D, Lİşlem başarılıysa "1", değilse "0" döner.
ARRARRAY[*]FB: InOut, FC: Input/InOutSınırları okunacak dizi.
DIMUDINTI, Q, M, D, L, P veya sabitOkunacak boyut numarası (1’den başlar).
OUTDINTI, Q, M, D, L, POkunan sınır değeri.

3. Örnek 1: Tek Boyutlu Dizi ile Lower_Bound

Lower_Bound komutu, tek boyutlu bir dizinin düşük sınırını okur.

  • Kullanım: #MyArray dizisinin düşük sınırı okunur.
  • Örnek: EN = 1 olduğunda, #MyArray (ARRAY[5..15] of INT) dizisinin 1. boyutunun düşük sınırı okunur. Sonuç: MW20 = 5, ENO = 1.
  • Fayda: Dizi sınırlarını dinamik olarak öğrenerek döngü kontrolü sağlar.
Network 1: LOWER_BOUND ile Düşük Sınır Okuma
EN----[ LOWER_BOUND ]----ENO
      | ARR: #MyArray  |
      | DIM: 1         |
      | OUT: MW20      |
    

4. Örnek 2: Tek Boyutlu Dizi ile Upper_Bound

Upper_Bound komutu, tek boyutlu bir dizinin yüksek sınırını okur.

  • Kullanım: #MyArray dizisinin yüksek sınırı okunur.
  • Örnek: EN = 1 olduğunda, #MyArray (ARRAY[5..15] of INT) dizisinin 1. boyutunun yüksek sınırı okunur. Sonuç: MW22 = 15, ENO = 1.
  • Fayda: Dizi elemanlarını işlerken sınır kontrolü sağlar.
Network 2: UPPER_BOUND ile Yüksek Sınır Okuma
EN----[ UPPER_BOUND ]----ENO
      | ARR: #MyArray  |
      | DIM: 1         |
      | OUT: MW22      |
    

5. Örnek 3: Çok Boyutlu Dizi ile Lower_Bound

Lower_Bound komutu, çok boyutlu dizilerde de kullanılabilir.

  • Kullanım: #Matrix dizisinin 2. boyutunun düşük sınırı okunur.
  • Örnek: EN = 1 olduğunda, #Matrix (ARRAY[1..3, -2..4, 10..20] of REAL) dizisinin 2. boyutunun düşük sınırı okunur. Sonuç: MW24 = -2, ENO = 1.
  • Fayda: Çok boyutlu dizilerle çalışırken esneklik sağlar.
Network 3: Çok Boyutlu Dizi ile LOWER_BOUND
EN----[ LOWER_BOUND ]----ENO
      | ARR: #Matrix   |
      | DIM: 2         |
      | OUT: MW24      |
    

6. Örnek 4: Hata Yönetimi (Geçersiz Boyut)

Geçersiz boyutlarda hata yönetimi yapılabilir.

  • Kullanım: Geçersiz DIM değeriyle hata kontrolü yapılır.
  • Örnek: EN = 1 olduğunda, #InputArray (ARRAY[1..5] of BOOL) tek boyutlu bir dizi olduğundan DIM = 2 geçersizdir. İşlem başarısız olur, ENO = 0 ve Hata_Alarm aktif olur.
  • Fayda: Hataları önceden tespit ederek program güvenilirliğini artırır.
Network 4: Hata Yönetimi (Geçersiz Boyut)
EN----[ UPPER_BOUND ]----ENO
      | ARR: #InputArray |
      | DIM: 2           |
      | OUT: MW26        |
|----[ ENO = 0 ]----( Hata_Alarm )----|
    

7. Örnek 5: Döngüde Kullanım (Dizi İterasyonu)

Döngülerde sınır kontrolü için kullanılabilir.

  • Kullanım: Dizi sınırları bir döngüde kullanılır.
  • Örnek: EN = 1 olduğunda, #MyArray (ARRAY[5..15] of INT) dizisinin sınırları okunur (MW28 = 5, MW30 = 15). Bu değerler, bir döngüde dizi elemanlarını işlemek için kullanılabilir.
  • Fayda: Döngülerde dinamik sınır kontrolü sağlar.
Network 5: Döngüde Kullanım (Dizi İterasyonu)
EN----[ LOWER_BOUND ]----ENO
      | ARR: #MyArray  |
      | DIM: 1         |
      | OUT: MW28      |
EN----[ UPPER_BOUND ]----ENO
      | ARR: #MyArray  |
      | DIM: 1         |
      | OUT: MW30      |
    

8. Günlük Hayattan Örnekler

Lower_Bound ve Upper_Bound komutlarının mantığını anlamak için günlük hayattan benzetmeler:

  • Kitaplıkta Raf Sınırları (Lower_Bound): Bir kitaplıkta belirli bir raftaki ilk kitabın numarasını öğrenme.
  • Kitaplıkta Raf Sınırları (Upper_Bound): Bir kitaplıkta belirli bir raftaki son kitabın numarasını öğrenme.
  • Depo Kutu Sayımı: Bir depoda belirli bir sıradaki kutuların başlangıç ve bitiş numaralarını öğrenme.
  • Takvim Günleri: Bir takvimde belirli bir ayın ilk ve son gününü öğrenme.

9. Siemens S7-1200/S7-1500 Lower_Bound ve Upper_Bound Komutlarının Avantajları

  • Siemens S7-1200/S7-1500 PLC’lerde dinamik boyutlu dizilerin sınırlarını runtime’da öğrenme imkanı.
  • Geçersiz indeks erişimlerini önleyerek program güvenilirliğini artırır.
  • Çok boyutlu dizilerle çalışırken her boyutun sınırlarını ayrı ayrı okuma esnekliği.
  • Dizi elemanlarını döngüyle işlerken sınırları dinamik olarak kullanma.

10. Dikkat Edilmesi Gerekenler

  • ARR parametresi yalnızca ARRAY[*] tipinde olmalıdır; sabit boyutlu diziler (örneğin, ARRAY[1..5]) desteklenmez.
  • DIM, 1’den başlar ve dizinin boyut sayısını aşmamalıdır; aksi halde ENO = 0 olur.
  • S7-1200 için firmware ≥ V4.2, S7-1500 için firmware ≥ V2.0 gereklidir.
  • İşlem başarısız olduğunda OUT değeri geçersizdir; ENO her zaman kontrol edilmelidir.

11. Kullanım İpuçları

  • Siemens S7-1200/S7-1500 PLC’lerde ARRAY[*] tipini fonksiyon bloklarında InOut bölümünde tanımlayın. Daha fazla bilgi için Dinamik Diziler sayfasını inceleyebilirsiniz.
  • DIM değerini dizinin boyut sayısına göre ayarlayın; örneğin, 3 boyutlu bir dizi için DIM 1, 2 veya 3 olabilir.
  • ENO çıkışını bir hata göstergesine bağlayarak hataları izleyin.
  • CPU’nuzun firmware sürümünü TIA Portal’da "Hardware Configuration" üzerinden kontrol edin.
  • Döngülerde sınırları bir kez okuyup değişkenlere kaydederek performansı artırın.

12. Sonuç

Siemens S7-1200 ve S7-1500 serisi PLC’lerdeki Lower_Bound ve Upper_Bound komutları, dinamik dizilerle çalışırken esnek ve hatasız kod yazmanıza olanak tanır. Bu rehberdeki örnekleri temel alarak, projelerinizde kolayca uygulayabilirsiniz. Tüm bilgiler Siemens Industry Online Support’tan doğrulanmıştır. Siemens S7-1200/S7-1500 Lower_Bound ve Upper_Bound komutları hakkında ne düşünüyorsunuz? Yorumlarınızı aşağıda paylaşın!

Yorumlar