if ile karşılaştırma

Başlatan enigmagazi, 12 Ekim 2011, 14:58:16

enigmagazi

Arkadaşlar elimde dörtane motordan gelen tur bilgileri var ex1 ex2 ex3 ex4 diye ben bunları bir birleriyle karşılaştırmak istiyorum

mesela ex1 in tur sayısı diğerlerinden kucukse diğerlerinin cıksını pasif yapmak. ex2 nin tur sayısı azsa ex2 motoru haric diğerlerini pasif yapmak istiyorum o motorların da isimleri

mot1 ex1 in bağlı olduğu
mot2 ex2 in bağlı olduğu
mot3 ex3 in bağlı olduğu
mot4 ex4 in bağlı olduğu

töleranslı bir şekilde nasıl ifle yada başka bir yöntemle karşılaştıra bilirim yani bazı durumlarda tur sayısı 3   4 tur farkedebilir bunu gözardı etmek istiyorum yani 3 4 tur farkı ihmal ede bilirim bunu en hızlı nasıl yaparım.

justice_for_all

arkadasım cewabını kendin wermis en hızlısi ifli karsılastrmayla olur
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

enigmagazi

 :) tmm ama asıl olay hepsini nasıl kontrol edeceğim yani 4 değeride kontrol edip zıt yondekileri yani tur sayısı az olanları durdurmam gerekiyor.

justice_for_all

hepsini tek iftemi kontrol etmek istyosunuz
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

enigmagazi

farketmez asıl sorunum diğer işlemcilerden spı ile tur sayılarını aldığım için en doğru ve en hızlı şekilde karar verip çıkışları yönlendirmek.

kudretuzuner

Merhaba
Anladığım kadarı ile dört pervaneli bir aparatın motor devir hızlarını ayarlamak istiyorsunuz.Gelen dataların a-b-c-d olduğunu var sayarsak(rakkamsal olarak)

if a< b then b=0  (a, b'den küçük ise b'yi sıfıra eşitle)
if a< c then c=0
if a< d then d=0

if b< a then a=0
...................
..................
en basit anlatımı ile böyle olmalı bu döngüyü tüm değişkenler için yazar ve de çalıştırırsanız işlemci en üst seviyeden alıp sürekli tek tek kontrol eder ve dengelemeye çalışır diye düşünüyorum.
Amatör

enigmagazi

bende bu şekilde yaptım ama sorun mesela hep a dan başadık kontrole ya a da sorun varsa a pervanesi az donduyse  az donduyse hemen a<b doğru kabul edip  b=o a geçicek yani hata b de diye kalıyo ama asıl az donen a motoru. bunu çözemiyorum.

enigmagazi

yani referans aldığım motor donmuyorsa yada yavaş donduyse dongüdeki en yakın hataya geciyor ama sorun referans aldığım motorda bunu algılatmam gerekiyor yada başka bir motodla referans sayısı bulmam lazım ama nasıl.

justice_for_all

RPM=60*T1CLK/N           N=bi turda sayılan darbe sayısı
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

ete

Şöyle bir mantık kurulabilirmi?
SAYI=65000
IF EX1<SAYI THEN
   SAYI=EX1:MOTOR=1
ENDIF

IF EX2<SAYI THEN
   SAYI=EX2:MOTOR=2
ENDIF

IF EX3<SAYI THEN
    SAYI=EX3:MOTOR=3
ENDIF

IF Ex4<SAYI THEN
   SAYI=EX3:MOTOR=4
ENDIF
SELECT CASE MOTOR
CASE 1
  Motor1 haric diğerleri pasif
Case 2
  Motor2 hariç diğerleri pasif
Case 3
  Motor3 hariç diğerleri  pasif
Case 4
Motor4 hariç diğerleri pasif
End select.

Yazılan kod dan anlaşılacağı üzere karşılaştırma bir referans değeri ile yapılıyor ve motorların tamamı bu karşılaştırmaya katılıyor.
Sonunda en küçük olanı bulunuyor ve onun üzerinden  işlem yapılıyor.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

The Gariban

#10
ETE hocanın yazdığı gibi olur.
Ancak bu karşılaştırmalar sadece en az devirle dönen motoru pasif etmek için gereken kodlardır.
Oysa programda daha devir ler arasındaki farkın oranınıda hesap eden kodlarında eklenmesi gerekir.(En az dönen motor la en yavaş 2.dönen motor arasında belkide 3-5 devirlik olmuş olabilir bu fark belkide hiçbir motorun pasif edilmemesini sağlayacaktır.
ayrıca  alt limitinde belli olması lazım (örneğin en hızlının % 1 ine indiğinde o motoru kapat gibi)
Ayrıca eğer karşılaştırma ya başlamadan 4 motordan herhangi birinin pasif olup olmadığınında kontrolu yapılması gerekir.
Zira programda belkide 1 motor pasifse diğer başka motor pasif edilmemelidir.(yada edilmesine izin verilmelidir)
Ama programın başlangıcı iin yeterli olan kısım yukardaki kısım


mcan

4 elemanlı dizi oluştur , bu diziye spı dan gelen dataları yazdır.Sonra sıralama algoritması ile sırala.Sıralama sonucu en küçük atıyorum 4. eleman olsun, 4.ile 1. yi karşılaştır sonuca gore 3-4 tur fark farsa bisi yapma (ya da yap bu sana baglı) fark fazla ise ilk uc motoru durdur yada ne istiyorsan yap.

Yada sana en hızlı ve en yavas lazımsa ilk gelen(1.motor) datayı iki ayrı degiskene yaz, sonra gelen dataları bu iki degiskenle karşılaştır küçüğü birine büyüğünü diğerine yazdır.Sırasıyla 3 motoru da karsılastır sonucda elinde en buyuk ve en kucuk bulunacak bunlarla isleme devam et.Karşılaştırmaları if ile yapabilirsin.

enigmagazi

Arkadaşlar zaten sorunum referans değerim yani projem şu elimde 4 ayaklı bir masa var masanın her ayağında bir motor ben bu masanın aynı hızda aynı tur saysında yukarı kaldırmak istiyorum ama mesela birinci bacağı referans alıp ona gore diğerlerini kontrol etsem bir ya donmuyosa yada az donuyosa direk en yakın karşılaştırmayı yapıyo atıyorum mesela a motoru turu yavaş olsun referansımda a motoru olsun

if b>a  ozaman  b yi yavaşlat   ama sorun a da a yavaş yada başka bir bacakla karşılaştırayım ama referans aldığım motor hangisiyse ilk baş o yavaş olunca şartım direk ilk if li ifadeyi gercek sayıyo bunu çözemiyorum.

Andromeda

Kaldırma hızına karar ver.....
Ondan sonra motorları buna eşitlemeye çalış....
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

enigmagazi

kaldırma hızı derken anlamadım yani ben motorların paralel kalkmasını istiyorum paralelde inmesini.