Codesys de FiFo Tablosu

erdtur

Üye
Katılım
16 Ara 2006
Mesajlar
18
Puanları
1
Merhabalar ;
Benim sorum, FIFO tablosu oluşturmak. Code Sys dilinde nasıl FIFO tablosu oluşturulur ? 1024 adet 16 bitlik registere, RS485 üzerinden gelen verileri, geliş sırasına göre FIFO mantığı ile yerleştirmek ve bir input sinyali ile ilk gelen veriden başlayarak her input geldiğinde, başka bir RS485 hattı üzerinden göndermek. gönderdiğimiz verinin kaydını silmek. Ben bunu Mitsubishi PLC ile yapmıştım fakat onda FIFO diye bir komut vardı. CodeSys de böyle bir komut varmı? yoksada nasıl yapılabilir.

Kolaygelsin
erdtur
 
Blok dili Siemens SCL'dir. CodeSys için ST'ye uyarlayabilirsiniz.


FUNCTION_BLOCK FB37
TITLE = 'FIFOX_1'
//
//16 Dword FIFO Hafıza
//

//
VERSION : '2.0'
AUTHOR : Murat
NAME : FIFOX_1
FAMILY : MEMORY
VAR_INPUT
Din : DWORD;
E : BOOL := TRUE;
RD : BOOL;
WD : BOOL;
RST : BOOL;
END_VAR
VAR_OUTPUT
Dout : DWORD;
EMPTY : BOOL := TRUE;
FULL : BOOL;
END_VAR
CONST
n := 1024; (* FIFO Uzunluğu *)
END_CONST
VAR
fifo : ARRAY[0..n] OF DWORD;
pr : INT;
pw : INT;
END_VAR
BEGIN
IF RST THEN
pw := pr;
FULL := FALSE;
EMPTY := TRUE;
Dout := 0;
ELSIF E THEN
IF NOT EMPTY AND RD THEN
Dout := fifo[pr];
pr := INC2(X:=pr,N:=n);
EMPTY := pr = pw;
FULL := FALSE;
END_IF;
IF NOT FULL AND WD THEN
fifo[pw] := Din;
pw := INC2(X:=pw,N:=n);
FULL := pw = pr;
EMPTY := FALSE;
END_IF;
END_IF;


FIFO için Increment Bloğu:




FUNCTION INC2 : INT
TITLE = 'INC2'
//
//
VERSION : '1.2'
AUTHOR : Murat
NAME : INC2
FAMILY : MATH
VAR_INPUT
X : INT;
N : INT;
END_VAR
VAR
END_VAR
BEGIN
IF X >= N - 1 THEN
INC2 := 0;
ELSE
INC2 := X + 1;
END_IF;
 
Oscat kütüphanesini indir.. Orada var..
 

Forum istatistikleri

Konular
130,235
Mesajlar
934,638
Kullanıcılar
453,441
Son üye
mehmet_kzl34

Yeni konular

Çevrimiçi üyeler

Geri
Üst