TC 2 Analog işlemler

kemaleris

Üye
Katılım
27 Eki 2010
Mesajlar
143
Puanları
1
Yaş
41
Merhaba Twincat 2 de analog işlemler için hangi fonksiyonları kullanabiliriz ( scale unscale gibi ). Örneğin giriş değerine göre çıkışta alt ve üst limitlerini belirleyebileceğimiz bir fonksiyon var mıdır. Yada giriş real değerlerine göre çıkışta analog karta int değer yazabileceğimiz bir hazır fonksiyon var mıdır.? Standart bir proje yazarken hangi kütüphaneleri kullanmamızı önerirsiniz. Teşekkürler.
 
İnternet te şöyle bir FB buldum denedim çalışıyor. Sizde programa karşılaştırma komutları ekleyip hatalı min_max hatalı çıktısı ekleyebilirsiniz.
Ayrıca 0 a bölüm olduğunda hata verip plc stop olabiliyor onuda ;

Bu linkteki https://infosys.beckhoff.com/englis...lccontrol/html/TcPlcCtrl_CheckDivReal.htm&id=

fonksiyonu real döndürüp yazarsanız plc stop olmaz. Ben bu fonksiyondaki ''CheckDivReal := 1;'' değerini 0 olarak değiştirdim. Hiç değer yok iken sonuç 1 görünmesin diye. CheckDivReal fonksiyonunu outscaled 'e bağlayın.

FUNCTION_BLOCK SCALING_SENSOR
VAR_INPUT
IN_DUMMY : BOOL;
INPUT_RAW: INT;
IN_SCALING_MAX: REAL;
IN_SCALING_MIN: REAL;
IN_RAW_MAX: INT;
IN_RAW_MIN: INT;
END_VAR
VAR_OUTPUT
OUT_DUMMY :BOOL;
OUT_SCALED: REAL;
END_VAR
VAR
GAIN: REAL;
END_VAR
_________________________

GAIN :=(IN_SCALING_MAX - IN_SCALING_MIN) / (IN_RAW_MAX - IN_RAW_MIN);
OUT_SCALED :=(INPUT_RAW - IN_RAW_MIN) * GAIN +IN_SCALING_MIN;
 
#8
4-20 için analog scala programı yapmak istiyorum beckhoff kullanıyorum scala işlemini el ile yazdım fakat kafama takılan ben sensörden 4 ma aldığımda bunu %0 20 aldığımda bunu %100 olarak göstermek ama bunun için 16 bit çözünürlükteki 0-32767 değerini 16 ya mı ayıracagım kafam karıştı yani demek istediğim kısacası 4 mA değer geldiğinde sanalog kartım 4*20/32767 değerinimi alıcak yoksa 4 min değer olduğu için 0 mı gelicek beni aydınlatrsanız çok ama çok duacı olurum.Teşekkürler
rAmper_Input :=20 * INT_TO_REAL (nInput)/32767;


Gercek_rAmper :=(16 * INT_TO_REAL (nInput)/32767)+4;

Oran:=(nInput*(InputHiVal-InputLowVal)/(32767)+InputLowVal);



Gercek_Oran:=((rAmper_Input-4)/16)*(InputHiVal-InputLowVal)+InputLowVal;
IF Gercek_Oran <0 THEN
Gercek_Oran :=0;
END_IF


Ekli dosyalar
 
nIntValue 0-32767 arasındaki raw değer olmak üzere;

%Deger = 6.25 * (0.00048829 * nIntValue + 4)-25;

şeklinde bir formül kullanabilirsiniz.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…