SCL ile PID fonksiyon blok

Katılım
17 Nis 2008
Mesajlar
219
Beğeniler
37
Puanları
3
#1
FB41 kadar iyi olmayabilir ama :D

Kod:
FUNCTION_BLOCK FB241

VAR_INPUT
REF:INT;
C:INT ;
CLOSED_LOOP:BOOL;
P_SEL:BOOL;
I_SEL:BOOL;
D_SEL:BOOL;
RESET:BOOL;
T:REAL;
TI:REAL;
TD:REAL;
KC:REAL;
Umin:REAL;
Umax:REAL;
END_VAR

VAR
CR_1:REAL;
I_1:REAL;
END_VAR

VAR_TEMP 
UminR:REAL;
UmaxR:REAL;
UR:REAL;
D:REAL;
I:REAL;
P:REAL;
REFR:REAL;
ER:REAL;
CR:REAL;
END_VAR

VAR_OUTPUT
U:INT;   
END_VAR

UR:=INT_TO_REAL(U);
REFR:=INT_TO_REAL(REF);
CR:=INT_TO_REAL(C);

IF T>0.0 THEN
    IF CLOSED_LOOP THEN
        ER:=REFR-CR;
        UminR:=Umin;
        UmaxR:=Umax;
        
        IF UmaxR>=32767.0 THEN
            UmaxR:=32767.0;
        END_IF;
        IF UminR<=-32767.0 THEN
            UminR:=-32767.0;
        END_IF;
        
        IF P_SEL THEN
        P:=KC*ER;
        ELSE
        P:=0.0;
        END_IF;
    
        IF TI>0 THEN
            IF I_SEL THEN      
                I:=I_1 + KC *(T/TI) * ER;
                IF UR>=UmaxR THEN
                   I:=I_1;
                END_IF;
                IF UR<=UminR THEN
                   I:=I_1;
                END_IF;    
                I_1:=I;
            ELSE
                I:=0.0;
                I_1:=0.0;
            END_IF;
        ELSE
            I:=0.0;
            I_1:=0.0;
        END_IF;
    
        IF D_SEL THEN
        D:=KC * (TD/T) * (CR_1 - CR);
        IF D>=UmaxR THEN
            D:=UmaxR;
        END_IF;
        IF D<=UminR THEN
            D:=UminR;
        END_IF;
        CR_1:=CR;
        ELSE
        D:=0.0;
        END_IF;

        UR:=P + I + D;
        IF UR>=UmaxR THEN
            UR:=UmaxR;
        END_IF;
        IF UR<=UminR THEN
            UR:=UminR;
        END_IF;
        U:=REAL_TO_INT(UR);

    END_IF;
END_IF;

IF CLOSED_LOOP=0 THEN
    UR:=REFR;
    U:=REAL_TO_INT(UR);
END_IF;

IF RESET THEN    
    D:=0.0;
    I:=0.0;
    I_1:=0.0;
    P:=0.0;
    UR:=0.0;
    REFR:=0.0;
    ER:=0.0;
    CR:=0.0;
    CR_1:=0.0;
END_IF;

END_FUNCTION_BLOCK
REF : referans girişi (int)
C : geri besleme (int)
CLOSED_LOOP : PID / açık çevrim seçeneği. 1-PID
P_SEL , I_SEL , D_SEL : P/I/D enable
RESET : PID değerlerini resetler. 1-Reset
T : Örnekleme zamanı (REAL)
TI, TD, KC : PID parametreleri (REAL)
Umin , Umax : Saturasyon
U : Kontrol işareti (int)

not : alıntı değildir.
 
Katılım
20 Şub 2008
Mesajlar
27
Beğeniler
1
Puanları
3
Yaş
34
#3
ABYS merhaba, burdaki kod ları s7 400 de kullanmak istiyorum. nasıl çalıştıracağım konusunda yardımcı olurmusun.
 
Katılım
18 Nis 2015
Mesajlar
8
Beğeniler
0
Puanları
1
Yaş
34
#5
Yeni konu açmıştım bu konu ile alakalı...:eek:
 
Katılım
20 Şub 2008
Mesajlar
27
Beğeniler
1
Puanları
3
Yaş
34
#6
Merhaba bu pid olayına baya takıldım bir ara. Aslında basit görünüyor ama uygulamada baya zorluyor insanı. Çalıştığım fabrikada ilaç kontrolü için bir uygulama yaptım. 4 debimetre ile 4 pnomatik valfi oransal olarak kontrol ettim. Ama anlımın derisi çatladı. Siemensin bloğundan faydalandım diye hatırlıyorum ama arduino için yazılmış bir koduda işlemiş olabilirim. Allah kolaylık versin. Şimdi başka bir ülkede başka bir iş üzerine çalışıyorum.
 

Benzer konular


Sponsor Bağlantı

Forum istatistikleri

Konular
101,455
Mesajlar
713,984
Kullanıcılar
379,678
Son üye
tyf28

Yeni Konular

Üst