CPU 313C counter çıkışını analog outputa vermek için?

sFenXNes

Üye
Katılım
1 Kas 2008
Mesajlar
99
Puanları
1
Merhaba arkadaşlar,

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.

w9tdhf.jpg


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.

Teşekkürler.
 
Yazımızda endüstrinin can damarı sayılabilecek PLC’yi inceleyeceğiz.
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
 
Son düzenleme:
benim esas problemim zaten real sayıyı veya dint sayıyı word yapmak.sonuçta burada kullandığımız DINT yani 32 bit bunu WORD yapamıyorum.
 
Network2 de DI den Real a dönüşüm
Network3 Real degeri ROUND komutuyla word e yuvarlama
 
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 :)
 
Kod:
      call  "unscale"        FC106
       bg  :=
       knkd:=
       ogr :=
       ugr :=
       xa  :=
       _fb :=
       bu  :=
      nop   0

Yukarıda ki FC106 çağırdığımda bu şeklide tanımlamalar çıkıyor.fakat sizin bir soruya verdiğiniz cevabı okurken dikkatimi çekti aşağıda
https://www.kontrolkalemi.com/forum/konu/analog-çıkış-modül.9229/

Kod:
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.
 
El- Cevap Ek'tedir...
 

Ekli dosyalar

  • clip0004.rar
    126.2 KB · Görüntüleme: 76
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.
 

Ekli dosyalar

  • Ho_dol.zip
    523.9 KB · Görüntüleme: 25
FC 106 yı yükleyip ondan sonra OB1 i yükleyin, sistem fc 106 nın yüklenmediğinden SF ye geçiyodur.
 
eski FC106 yı yüklemiştim yenisiyle yer değiştirince yüklemeyi unuttum ve doğal olarak çalışmadı tabi:)Çok teşekkür ederim.
 

Forum istatistikleri

Konular
128,893
Mesajlar
921,401
Kullanıcılar
451,037
Son üye
hskaban

Yeni konular

Geri
Üst