if komutu

Başlatan seco06, 03 Mart 2010, 23:05:14

seco06

If komutu kullanılarak yapılan işlem
    IF OLCUM>AYAR+2 THEN  
     ROLE=0
    ENDIF
   
    IF OLCUM<AYAR-2 THEN
    ROLE=1
    ENDIF
  RETURN
Ölçülen değer ile ayarlanan değer kıyaslamasında bu şekilde bir komut dizini yazdım.İstediğim ölçülen değer ayarlanan değerin altında olduğunda +2 değerine kadar röle çalışsın o değere ulaşınca dursun.sonra ölçülen değer ayarlanan değerin -2 seviyesine düşene kadar çalışmasın ama tekrar -2 seviyesinin altına düştüğünde çalışsın taki +2 seviyesine kadar. Yazdığım bu satırlar istediğimi yapmıyor.Yardımlarınızı bekliyorum.

drmp

kolay gelsin vermis olduun kodlarda bir problem görünmüyor baska ara derim

gladi

yanılmış olabilirim ...

AYAR+2  i ... bir değiş kene aktarman gerekiyor sanıyorum

mesala

SET = AYAR+2

IF OLCUM>SET THEN

bunun gibi


böyle bir denermisin ...
misafir olan kimse, beraberce getiremediği birşeye kalbini bağlamaz.

ete

Seco06,
İstediğn şey ile ilgili yaptığın açıklamaya bir daha bakıp doğruluğunu onaylarmısın. Sanki yazdıklarında hata var gibi geliyor bana.
Mümkünse birde örnek ver: Aşağıdaki örnek üzerinden cevap verebilirsin.
Set=20 derece olsun

Sıcaklık şayet yukarıdan aşağı doğru iniyor ise (düşüyor ise)
23 Role=0 Okunan>Set+2
22 Role=0 Set+2
21 Role=0 Set+1
20 Role=0 Set
19 Role=0 Set-1
18 Role=0 Set-2
17 Role=1 Okunan<Set-2
şeklinde sistem çalışacaktır.

Sıcaklık aşağıdan yukarı doğru çıkıyor ise
23 Role=0   Okunan>Set+2
22 Role=1   Set+2
21 Role=1   Set+1
20 Role=1   Set
19 Role=1   Set-1
18 Role=1   SET-2
17 Role=1   Okunan<(SET-2)

Şeklinde çalışacaktır sistem. Bana göre çalışma şekli doğru.

Sen nasıl çalıştırmak istiyorsun istiyorsun acaba?

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

seco06

Aslında yapmak istediğimi ETE bey anlamış. Bir ortamın sıcaklığını on-off mantığı ile sabit tutmak. Bu da ancak histerisiz ya da sabit band tekniği ile olabilir. Yani benim yazmaya çalıştığım kod gibi. Sıcaklık - ve + değerler arasında olarak ısı üreteci çalıştırılır. Siz 20 dereceye ayarlamış iseniz set değerini ısı üreteci ortamı 22 dereceye kadar ısıtır ve sonrasında durur.Ortam 18 dereceye düştüğünde tekrar çalışır ve 22 derecede durur. Bunu bir subrutine ile yapmak istiyorum.Gosub komutu ile bu kontrol yapılacak ona görede çıkış verilecek. Yazdığım komut bu işi aslında tam olmasada yapıyor.Fakat çıkış sanki bir flip flop gibi davranıyor :) ETE bey yazmış olduğunuz satırlarda epeyce if kullanılması gerekli sanırım.Bunu daha kısa ve anlattığım şekilde nasıl yapabiliriz. İlginize teşekkür ederim.

ete

Senin yazdıkların yeterli bu işin yapılması için.

IF OLCUM>(AYAR+2) THEN LOW ROLE
IF OLCUM<(AYAR-2)  THEN HIGH ROLE

Hepsi bu kadar. Bu iki satır yaklaşık 4 derecelik bir histeriz verecektir sisteme.

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

seco06

Teşekkür ederim. O halde neden röle çıkışı flip flop gibi davranıyor.Gosub ile buraya dallandığında röle aktif geri geldiğinde pasif oluyor.

ete

Böyle durumlarla çok karşılaştım. Alt programda röle aktif ediliyor ama program Return ile geri döndüğü zaman bir başka yerde röleyi kapatan bir başka komut görüyordur mutlaka. Onu araştırmalısın.

Programın tamamını vermeden diğer yerleri ile ilgili soru sormaman gerekirdi.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com