bende s7-300 cpu313c hızlı sayıcılı bir işlemci var.SFB 47 yi çağırıp çıkışına DINT bir hafıza atadığımda 5000 pulse encoderi rahatça saydırabiliyorum.altta görebilirsiniz.
Yukarıda çıkışta gördüğünüz bu sayıyı farklı değerler arasında 0-10V olarak analog çıkışa vermek istiyorum.FC106 unscale fonksiyonunu çağırıyorum fakat bu fonksiyonun girişi WORD , sayıcı çıkışı ise DINT.dönüştürücüleri denedim ama yapamadım. sizce nasıl bir yol izlemeliyim.
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.
SCL DİLİNDE DAHA ÖNCE BU KODU VERMİŞTİM:
Aşağıdaki fonksiyonumuz iki noktası (x1,y1) ve (x2,y2) olan doğrunun denklemini bulur ve herhangi bir x degeri için fonksiyonun sonucunu hesaplar. Kısaca istediğimiz REAL aralığı, başka bir real aralığa scale işlemi yapar. Dolayısıyla fonk.'a counterinin DINT çıkışını REAL a çevirip girmelisin, fonksiyon çıkışınıda REAL formdan WORD formuna convert etmelisin.
X1:0.0 // Counter 0 iken
Y1:0.0 // Analog çıkış 0 olcak
X2:Counterin Saydığı max. deger Real formda girilecek
Y2:27648.0 // Analog Max. deger Real
Fonksiyon FC10 çıkışını en sonda "DTR Double Integer (32-Bit) to Floating-Point" ve sonra RND komutuyla DINT formuna dönmen gerekir.
Kod:
FUNCTION FC10 : REAL // Fonk. sonucu y degeri
VAR_INPUT //Değişkenleri tanıtma kısmımız
X : REAL; // X için sonucu hesaplanacak değişken yani counterinin çıkışı
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 //Bitti
RND convertin help textine baktığımda giriş için REAL, çıkışta DINT belirtmiş.beni yanıltan o oldu.yardımın için çok teşekkür ederim dostum.belki sonra yine başını ağrıtabilirim
CALL FC 106 //MD 0 ı Unscale yapıyom
IN :=MD 0
HI_LIM :=6.900000e+000
LO_LIM :=0.000000e+000
BIPOLAR:=FALSE
RET_VAL:=MW10
OUT :=MW12 //Unscale Çıkışı
L MW12 // Degeri al
T PQW 368 // Çıkışa gönder, Kolay gelsin...
şeklinde yazmışsınız.neden bende de böyle bişey çıkmıyor?bir türlü analog output çıkışı veremedim.
gönderdiğim programı inceleme fırsatınız olursa OB1 network4 yuklediğimde CPU, SF'ye düşüyor.silip yüklediğimde ise normale dönüyor.FC106 çıkışını PQW değilde MW'e yazdırıp denedim yine SF'ye geçti.nedeni hakkında bir fikrim yok,bu konuda bana yardımcı olabilir misiniz?Teşekkürler.