İÇİNDEKİLER
• Stack Nedir?
• Stack Komutları
- StackPush
- StackFIFO
- StackLIFO
- StackIns
- StackDel
• Stack ile Encoder Hızı Okumasındaki Kullanımı

1. Stack Nedir?
Stack (Yığın), verileri tutmak için oluşturulan soyut bir data tipidir. Stack'ler en son elemanın ilk ulaşılabilir (LIFO) veya ilk elemanın ilk ulaşılabilir (FIFO) yöntemlerinin uygulanmasında kolaylıklar sağlar. Array'ler (Diziler) de stack kullanımının en yaygın örneklerinden biridir. Bu dökümanda Sysmac Studio'da stack için kullanılan komutlar (StackPush, StackFIFO, StackLIFO, StackIns, StackDel) anlatılacaktır.


Sysmac’ta kullanılabilecek bütün Stack komutları aşağıda belirtilmiştir:


2. Stack Komutları

• StackPush
Bu komut stack’in en üstüne bir değer eklemek için kullanılır


In: Giriş için kullanılan değişken(dizi); Size: Stack boyutu; InOut: Stack değişkeninin adı; Num: Stack’te depolanan veri sayısı; Out: Stack’ten çıkarılan değeri ifade eder.
Aşağıdaki örnekte NewInput (In) girdisine sırasıyla 85, 78, 13, 42, 6325 değerleri tek tek girilip EN girişi A yükselen kenar kontağıyla 5 defa tetiklenmiştir. Stack boyutu ArrayNumber (Num) ise her tetiklemede artırılıp kayıt işleminin en üst Num değerine yazılması sağlanmıştır.


Bu işlem sonucunda elde edilen Stack, InOut’a atanmış 10 boyutlu ArrayXYZ dizisinde aşağıdaki gibi görüntülenecektir.


Aşağıdaki diğer örnekte 3456 integer değeri 3 no’lu stack elementine push edilmiştir. Komut tetiklendiğinde Num değeri (aşağıdaki örnekte örnekte ghi değişkeni) 2’den 3’e artmıştır.


• StackFIFO
First in First Out (ilk giren ilk çıkar) ile en alttaki değerin Stack’ten atılmasını sağlar. StackFIFO fonksiyonu tetiklendiğinde InOut[0] değeri OutVal değerine atanmış olur. Sonrasında her Num-1 değeri InOut[1] ile başlayan düşük stack elemanına aktarılır. En son ise Num değeri 1 azaltılır.



In: Giriş için kullanılan değişken(dizi); Size: Stack boyutu; InOut: Stack değişkeninin adı; Num: Stack’te depolanan veri sayısı; Out: Stack’ten çıkarılan değeri ifade eder.


Yukarıdaki örnekte; girdileri 85, 78, 13, 42, 6325 olan ArrayXYZ (InOut) dizisinde StackFIFO, EN girişi B yükselen kenar kontağıyla tetiklendikten sonra OutputVar (OutVal) değerinde Stack’e ilk giren ve ilk çıkarılan 85 değeri görülür. Depolanan değişkenlerin boyutu ArrayNumber (Num) değeri ise 5’den 4’e düşer.


ArrayXYZ girdileri bir kayarak 78, 13, 42, 6325 şeklinde olur:


B kontağının ikinci yükselen kenar tetiklemesinde ise çıkarılan OuputVar (OutVal) değeri 78 olur, ve Stack boyutu ArrayNumber (Num) 4’ten 3’e düşer.


ArrayXYZ girdileri bir kayarak 13, 42, 6325 şeklinde olur:


Üçüncü tetiklemede ise OutputVar (OutVal) değerine ArrayXYZ dizisinin ilk değeri olan 13 değeri çıkarılır; Stack boyutu ArrayNumber (Num) değeri ise 3’den 2’ye düşer.


ArrayXYZ dizisi 42, 6325 şeklinde olur:


Dördüncü tetiklemede ise OutputVar (OutVal) değerine ArrayXYZ dizisinin ilk değeri olan 42 değeri çıkarılır; Stack boyutu ArrayNumber (Num) değeri ise 2’den 1’e düşer.


ArrayXYZ dizisi 6325 şeklinde olur:


Beşinci ve son tetiklemede OutputVar (OutVal) değerine ArrayXYZ dizisinde kalan 6325 değeri çıkarılır; Stack boyutu ArrayNumber (Num) değeri ise 1’den 0’a düşer.


ArrayXYZ dizisi içerisinde kalan değerler diziye başta en son giren değer olan 6325’dir


• StackLIFO
Last in First Out (son giren ilk çıkar) ile en üstteki değerin Stack’ten atılmasını sağlar. StackLIFO fonksiyonu tetiklendiğinde InOut[num-1] değeri OutVal değerine atanmış olur. Sonrasında Num değeri 1 azaltılır.


In: Giriş için kullanılan değişken(dizi); Size: Stack boyutu; InOut: Stack değişkeninin adı; Num: Stack’te depolanan veri sayısı; Out: Stack’ten çıkarılan değeri ifade eder.

Yukarıdaki örnekte; girdileri 85, 78, 13, 42, 6325 olan ArrayXYZ (InOut) dizisinde StackLIFO, EN girişi C yükselen kenar kontağıyla tetiklendikten sonra OutputVar (OutVal) değerinde stack’e son giren ve ilk çıkarılan 6325 değeri görülür. Depolanan değişkenleri boyutu ArrayNumber (Num) değeri ise 5’den 4’e düşer.


EN girişi C yükselen kenar kontağıyla ikinci defa tetiklendiğinde OutputVar (OutVal) değerine 42 değeri çıkarılır. ArrayNumber (Num) değeri ise 4’den 3’e düşer.


EN girişi C yükselen kenar kontağıyla üçüncü defa tetiklendiğinde OutputVar (OutVal) değerine 13 değeri çıkarılır. ArrayNumber (Num) değeri ise 3’den 2’e düşer


EN girişi C yükselen kenar kontağıyla dördüncü defa tetiklendiğinde OutputVar (OutVal) değerine 78 değeri çıkarılır. ArrayNumber (Num) değeri ise 2’den 1’e düşer.


EN girişi C yükselen kenar kontağıyla beşince defa tetiklendiğinde OutputVar (OutVal) değerine 85 değeri çıkarılır. ArrayNumber (Num) değeri ise 1’den 0’a düşer.


• StackIns
StackIns komutu Stack içine daha önceden belirlenmiş bir konuma bir değer eklemek için kullanılır


In: Stack içine eklenecek değişkendir. Size: Stack dizisinin boyutudur. Offset: Eklenecek değişkenin Stack içindeki konumu. InOut: Stack değişkeninin adı; Num: Stack’te depolanan veri sayısı; Out: Bu komutla işlevsizdir, yalnızca TRUE değerindedir.
EN tetiklendiğinde Offset’ten yüksek elemanlar birer yüksek dizi elemanına kaydırılırlar. InOut[Offset] değeri InOut[Num-1]’e kaydırılır.
Aşağıdaki örnekte ArrayXYZ Stack’inde bulunan 85, 78, 13, 42, 6325 arasına 2 no’lu Offset’ee 998 verisi eklenmiştir.

Bu işlem sonunda ArrayXYZ[2] değeri 998 olmuştur ve Stack elemanları 2.sıradan sonra birer kaydırılarak 5 boyutlu ArrayNumber (Num) Stack 6’ya yükselmiştir.


Aşağıdaki örnekte ise (Size) 6 boyutlu bir Stack’te depolanan (Num) 3 değişkene ek olarak 1 no’lu Offset’e eklenen bir veri gösterilmiştir.


• StackDel
StackDel komutu Stack içinden daha önceden belirlenmiş bir konumdan bir değer silmek için kullanılır.


Aşağıdaki örnekte ArrayXYZ Stack’inde bulunan 85, 78, 998, 13, 42, 6325 arasında bulunan 4 no’lu offset’teki 42 değeri silinmiştir.


Bu işlemden sonra 4 no’lu 42 değeri silinip 5 ve sağındaki veriler sola kaydırılmıştır. ArrayNumber (Num) değeri ise 6’dan 5’e düşmüştür.


Aşağıdaki örnekte boyutu (Size) 6 olan bir Stack, depolanan (Num) 3 değişkenden 1 no’lu Offset değeri silinmiştir.


3. Stack ile Encoder Hızı Okunmasındaki Kullanımı

Omron Makale sayfasında enkoder hızının okunmasıyla ilgili detaylı bir makale ve örnek mevcuttur.
Bu örneklere ek olarak okunan anlık hız değeri RPM değişkenindedir. 10 adet RPM değişkeni ArrRPM[0] Stack’ine aktarıldıktan (StackPush) sonra yeni gelen değerin eklenmesi ve ilk giren değerin Stack’ten çıkarılması için StackFIFO ve StackPush komutları kullanılır. En son satırda ise 10 boyutlu bir dizinin ortalaması alınarak RPM değerinin son 10 değeri ortalama bir halde OrtRpmValue değerinden okunmuş olur.


Source : Link

İlgili Ürünleri Ziyaret Etmek İçin https://mekatronikelektrik.com/

Sosyal Medyadan Bizi Takip Edebilirsiniz.