ortalama değer hesabı

ANTONİAS

Üye
Katılım
5 Mar 2008
Mesajlar
53
Puanları
1
Yaş
40
merhaba arkadaşlar şöyle bir sorunum var;
analog akımdan gelen değerin ortalamasını almak istiyorum
örneğin 1 saniye içersinde değer 10 sefer veya daha fazla değerle toplanıp aynı degere
bölünecek bunu nasıl formüle edebiliriz acaba?
cevablarız için şimdiden teşekürler
 
Merhabalar

Analog değerin sanırım stabilize değil eğer 1sn de bir deger senin işini görüyorsa şöyle bir formül yazdım.
Daha doğru Analog değer almak istiyorsan topraklama yapmayı unutma.


PROGRAM PLC_PRG
VAR
ortalama:ARRAY [0..10] OF INT;
analog_giris:INT;
deger:INT;
zaman:TON;
sayma:CTU;
sayma_izle: INT;
END_VAR

zaman(IN:=NOT ZAMAN.Q, PT:=T#100MS);
sayma(CU:=zaman.Q, PV:=10, RESET:=sayma.Q);
sayma_izle:=sayma.CV;
ortalama[sayma_izle]:=analog_giris;
IF (sayma.Q) THEN
deger:=(ortalama[0]+ortalama[1]+ortalama[2]+ortalama[3]+ortalama[4]+ortalama[5]+ortalama[6]+ortalama[7]+ortalama[8]+ortalama[9 ])/ 10;
END_IF

iyi çalışmalar
 
Merhabalar

Analog değerin sanırım stabilize değil eğer 1sn de bir deger senin işini görüyorsa şöyle bir formül yazdım.
Daha doğru Analog değer almak istiyorsan topraklama yapmayı unutma.


PROGRAM PLC_PRG
VAR
ortalama:ARRAY [0..10] OF INT;
analog_giris:INT;
deger:INT;
zaman:TON;
sayma:CTU;
sayma_izle: INT;
END_VAR

zaman(IN:=NOT ZAMAN.Q, PT:=T#100MS);
sayma(CU:=zaman.Q, PV:=10, RESET:=sayma.Q);
sayma_izle:=sayma.CV;
ortalama[sayma_izle]:=analog_giris;
IF (sayma.Q) THEN
deger:=(ortalama[0]+ortalama[1]+ortalama[2]+ortalama[3]+ortalama[4]+ortalama[5]+ortalama[6]+ortalama[7]+ortalama[8]+ortalama[9 ])/ 10;
END_IF

iyi çalışmalar

öncelikle göndermiş olduğunuz programm için teşekürler
bu programı hazır bir lib. dosyasına dönüştürüb, tekrar yazarmısınınız?
saygılarımla
 
FUNCTION_BLOCK ORTALAMA_ANALOG
VAR_INPUT
analog_giris:INT;
END_VAR
VAR_OUTPUT
deger:INT;
END_VAR

VAR
ortalama:ARRAY [0..10] OF INT;
zaman:TON;
sayma:CTU;
sayma_izle: INT;
END_VAR

zaman(IN:=NOT ZAMAN.Q, PT:=T#100MS);
sayma(CU:=zaman.Q, PV:=10, RESET:=sayma.Q);
sayma_izle:=sayma.CV;
ortalama[sayma_izle]:=analog_giris;
IF (sayma.Q) THEN
deger:=(ortalama[0]+ortalama[1]+ortalama[2]+ortalama[3]+ortalama[4]+ortalama[5]+ortalama[6]+ortalama[7]+ortalama[8]+ortalama[9 ])/ 10;
END_IF

Merhabalar
Yukarıdaki programı function block oluşturarak kullanabilirsin. İstediğin programda çağırır kullanırsın.
iyi çalışmalar
 
FUNCTION_BLOCK ORTALAMA_ANALOG
VAR_INPUT
analog_giris:INT;
END_VAR
VAR_OUTPUT
deger:INT;
END_VAR

VAR
ortalama:ARRAY [0..10] OF INT;
zaman:TON;
sayma:CTU;
sayma_izle: INT;
END_VAR

zaman(IN:=NOT ZAMAN.Q, PT:=T#100MS);
sayma(CU:=zaman.Q, PV:=10, RESET:=sayma.Q);
sayma_izle:=sayma.CV;
ortalama[sayma_izle]:=analog_giris;
IF (sayma.Q) THEN
deger:=(ortalama[0]+ortalama[1]+ortalama[2]+ortalama[3]+ortalama[4]+ortalama[5]+ortalama[6]+ortalama[7]+ortalama[8]+ortalama[9 ])/ 10;
END_IF

Merhabalar
Yukarıdaki programı function block oluşturarak kullanabilirsin. İstediğin programda çağırır kullanırsın.
iyi çalışmalar
hocam başaramadım hiç olmasa şu programı lib çevirip dowloand etmemizi sağlayabilirmisiniz.
saygılarımla
 
Merhabalar

Söylediğin fonksiyon blok daha gelişmiş. Gelen değerlerin en yükseğini, en düşüğünü ve de ortalamasını veriyor. Ben sana sadece sade bir mantıkla gelen değeri 1 sn de bir ortalamasını yapan bir blok yazdım. Sen istersen geliştirebilirsin. İstersen başka fonksiyon blokları da deneyebilirsin.

iyi çalışmalar
 
merhaba arkadaşlar şöyle bir sorunum var;
analog akımdan gelen değerin ortalamasını almak istiyorum
örneğin 1 saniye içersinde değer 10 sefer veya daha fazla değerle toplanıp aynı degere
bölünecek bunu nasıl formüle edebiliriz acaba?
cevablarız için şimdiden teşekürler

Yani sürekli dinlediğin Analog kanalı tek tek değerlere bakmana gerek yok bence...

Siz izin verdiğiniz sürece gördüğü Max ve Min değerleri alırsınız. O değerlerin ortalamasını alırsınız...
Aynı yola çıkar kanımca..

Örnek:

(* Bu blok kayıt tetiklemesi ile gelen değeri tutar kayıt düstükten sonra
Maximum ve minimum farkı cıkartır. *)


(*Outputlar*)


#O_Raft := #S_O_Raft;
#RaftOk := #S_RaftOk;
#RaftNok := #S_RaftNok;
#SavePick := #S_SavePick;


(* Maximum minumun değer kaydı *)


IF #SaveStart = true AND #Rst = false THEN

IF #FırtSave = false THEN
#S_SavePick := #X_PV;
#Max_Data := #X_PV;
#Min_Data := #X_PV;
END_IF;

IF #X_PV > #Max_Data THEN
#Max_Data := #X_PV;
END_IF;

IF #X_PV < #Min_Data THEN
#Min_Data := #X_PV;
END_IF;

#FırtSave := true ;

ELSE
#FırtSave := False ;


END_IF;


(* Reset aksiyonu *)
IF #SaveStart = false AND #Rst = true THEN
#Min_Data := 0.0;
#Max_Data := 0.0;
#S_SavePick := 0.0;
#S_RaftOk := False;
#S_RaftNok:= false;
END_IF;




#S_O_Raft := #Max_Data - #Min_Data ;


IF #SaveStart = False AND #Rst = false THEN

#MidValue:= #Max_Data - (#S_O_Raft / 2);
 

Forum istatistikleri

Konular
129,833
Mesajlar
930,591
Kullanıcılar
452,660
Son üye
sari59

Yeni konular

Geri
Üst