SCL ile PID fonksiyon blok

ABYS

Üye
Katılım
17 Nis 2008
Mesajlar
219
Puanları
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.
 
ABYS merhaba, burdaki kod ları s7 400 de kullanmak istiyorum. nasıl çalıştıracağım konusunda yardımcı olurmusun.
 
FB41 Pid kontrol yapan özel bir blok mudur?
 
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.
 

Forum istatistikleri

Konular
127,952
Mesajlar
913,873
Kullanıcılar
449,599
Son üye
Gksn

Yeni konular

Geri
Üst