diyelimki sıvı seviye cihazı alt seviyede 4 , üst seviyede 20 mA referans veriyor gelen bu referansa göre invertör frkansı ayarlıyor üst seviyede invertör 0hz,alt seviyede ise 50hz olmasını istiyorum yani gelen 27648 sayısını tersleyip ters orantı kurmak istiyorum giren 0 iken çıkan 27648 olacak,giren 27648 iken çıkan 0 olacak çok uğraştım ama malesef işin içinden çıkamadım şimdiden yardımlarınız için teşekkür ederim.
KNX Standardı, küçük bir rezidansın içerisindeki aydınlatma, perde panjur, klima kontrolünden, Dünya’nın en büyük havalimanlarındaki aydınlatma otomasyonu gibi çözümler için tercih edilen bir Dünya standardıdır.
benimde derdim tam olarak bu işte invertörle değilde plc programıyla yapmak istiyorum murat arkadaşıma gelince;tersleme komutu olarak sadece negatif-pozitife tersleyen komutları biliyorum
PROGRAM Hesab
VAR
AktuelSeviye: REAL; (* 4-20 mA Seviye Prostati *)
AktuelSeviyeLimitli: REAL; (* Program icerisindeki yardimci Real Deger *)
SurucuCikis: REAL; (* Sürücü Cikis Degeri *)
END_VAR
(*Ters orantida 0 kullanilamaz eger Sifira gecis engellenirse ters oranti rahat calisacaktir.*)
IF AktuelSeviye<=0.1 THEN
AktuelSeviyeLimitli:=1;
ELSE
AktuelSeviyeLimitli:=AktuelSeviye;
END_IF
(*Ters Oranti Formulu*)
SurucuCikis:= 27468.0 / AktuelSeviyeLimitli ;
İkinci örnek daha fonksiyoneldir giriş ve cıkışı istediğiniz gibi scale edilebilir.
Kod:
PROGRAM Scale
VAR
X : REAL; (*Giris Degeri*)
I_LO : REAL; (*Giris min. Degeri 0 dan büyük olmak zorundadir*)
I_HI : REAL; (*Giris max Degeri 0 dan büyük olmak zorundadir*)
O_LO : REAL;(*Cikis min. Degeri 0 dan büyük olmak zorundadir*)
O_HI : REAL;(*Cikis miax. Degeri 0 dan büyük olmak zorundadir*)
SCALE_R:REAL; (*Cikis*)
END_VAR
SCALE_R := (O_HI - O_LO) / (I_HI - I_LO) * (LIMIT(I_LO, X, I_HI) - I_LO) + O_LO;
çok özür dilerim ben alttaki fc106 bloğu görmemiştim ve simülasyonda denemiştim şimdi plc ye attım gayet güzel olmuş emeğinize sağlık tekrar teşekkür ederim..
Aşağıdaki kodlada scale işlemi yapabiliriz daha önce SCL dilinde vermiştim bu kodu iki noktası belli doğru denklemini düşünelim (Lineer bir sistem için)
Birinci istedigimiz nokta X1=27648.0 iken Y1=0.0 olmalı
ikinci istediğimiz nokta X2=0.0 iken Y1=27648.0 OLSUN İSTİYORUZ
aşağıdaki fonksiyonu çağırın noktaları girin, X girişinden gelen bilgiyi verin size scale etsin
Kod:
FUNCTION FC10: REAL (* Fonk. sonucu y degeri *)
(*this function calculates the linear equation f_lin = a*x + b given by two points x1/y1 and x2/y2. *)
VAR_INPUT (*Değişkenleri tanıtma kısmımız *)
X : REAL; (* X için sonucu hesaplanacak değişken*)
X1: REAL; (* Varolan x1 degeri *)
Y1 : REAL; (* Varolan y1 degeri *)
X2 : REAL; (* Varolan x2 degeri *)
Y2 : REAL; (* Varolan y2 degeri *)
END_VAR
BEGIN (* Programımız burdan başlıyor *)
FC10 := (Y2 - Y1) / (X2 - X1) * (X - X1) + Y1;
END_FUNCTION