DS1302 ile zamanlayıcı yapımı...

Başlatan mikrotronik, 03 Nisan 2016, 10:28:27

mikrotronik

Merhaba Arkadaşlar;

DS1302 ile iki zaman arasında bir roleyi kontrol etmek istiyorum.
Şöyleki;
Saat 17:30 da role çeksin ,01:20 de bıraksın ve 07:00 da role çeksin,06:00 da role bıraksın.
Saat formatı 24 ve role sayısı iki .

Ben şu şekilde denedim ancak saat sıralamasında 01:20,17:30 dan küçük olduğu için çalışmıyor.

Örneğin;
1.role kapama saati : 17:30
1.role açma saati : 01:20

if 1.role kapama saati >= saat and 1.role açma saati <=saat then
low 1.role

Teşekkürler,

Selçuk Şimşek

#1
if 1.role kapama saati = saat and 1.role_cekti=0 then
1.role_cekti=1
high role
endif

1.role_cekti değişkeni 1 olduğunda artık yukarıdaki koşul sağlanmadığı için saat kaç olursa olsun röle çekmeye çalışmayacak röle sadece 1 kez çekecek
ve kapanma saati gelene kadar çekili kalacak.  kapanma saati geldiğinde kapanıp açılma saatini bekleyecek.


if  1.role açma saati =saat and 1.role_cekti=1 then
low 1.role
1.role cekti=0
endif


mikrotronik

Selçuk bey merhaba,
Cevabınız için teşekkür ederim ancak sorun şu ki,zaman karşılaştırmalarında elektrik kesildiğini var sayarsak koşul sağlanmadığı için role ya On konumunda kalacak,yada Off konumunda .

Aslında sizin verdiğiniz komutta elektrik kesildiğinde role 1 konumunda ise 0 konumuna geçecegi için direkt olarak Off kalacak.

Diğer yandan aşağıdaki komutu oluşturdum ancak ondada stop saati start saatinden küçük ise role çalışmıyor.

Dim SAAT1X As Word
Dim SAAT2X As Word
Dim SAATX As Word

    SAAT1X = SAAT1 * 60 + DAKIKA1  ' Start Saati  'saat 07:00  = 420
    SAAT2X = SAAT2 * 60 + DAKIKA2  ' Stop Saati   'saat 02:40  = 160
    SAATX  =  SAAT * 60 + DAKIKA   ' Şu anki Saat 'saat 17:35  = 1055


If SAATX >= SAAT1X And SAATX < SAAT2X Then   
  High Role1
Else
  Low Role1
EndIf

Örneğin ; Saat dilimi 24;
Rolenin 07:00 ile 02:40 arası çalışacağını varsayalım.Saatimizde 20:50 ,bu arada elektrik 1 saat kesildiğini de  varsayalım. Bu kod üzerinde stop zamanı 02:40 olduğu için role çekmiyor.

mehmet

RTC' yi batarya ile besleyin, RAM alanını kullanıp
röle durumunu kaydedin.

Enerji kesilip gelince, RTC' nin RAM alanından
okuduğunuz röle durumu ile işleminize devam
edebilirsiniz...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

mikrotronik

Mehmet Bey merhaba,
Konuya çok mantıklı yaklaşmışsınız ancak karşılaştırma zamanında elektrik kesilirse yine role ON yada OFF konumunda sabit kalır.
Teşekkürler,

Selçuk Şimşek

alarm başlangıç
17:30
03.04.2016


şimdi
21:00

alarm bitiş
01.20
04.04.2016

if (bitiş_saat<baslangic_saati) 
bitiş_saat=bitiş_saat+24 ;//sonraki güne geçmiştir.

fark_saat=bitiş_sat-baslangic_saat;//25-17=8 saat fark

fark_dakika=bitiş_dakika-baslangic_dakika ;//20-30=-10

toplam_fark=(saat_fark*60)+dakika_fark  ;//  8*60= 480 - (-10)  =470 dk  saati de dakikaya çevirdik



if (bitiş_saat<simdiki_saati) 
bitiş_saat=bitiş_saat+24 ;//sonraki güne geçmiştir.

fark_saat=bitiş_sat-simdiki_saat; 25-21=4

fark_dakika=bitiş_dakika-simdiki_dakika ;20-0=20

simdiki_fark=(saat_fark*60)+dakika_fark  ; 240+20=260  röle çekili


if (şimdiki_fark < toplam_fark and simdiki_fark > 0)  alarm başlamadan once fark toplam farktan buyuk olacağı ve alarm bitiş saatinden sonra 0 dan kuçuk olacağı için  şart sağlanmayacak
high role
else
low role











mikrotronik

#6
Selçuk Bey merhaba,
Verdiğiniz kodlarda bitis zamanı yazılım işlemeye başladıgında değişiyor dolayısı ile verilen set degeride degişiyor. Ayrıca biraz karmaşık geldi biraz daha sadeleştirebilirmisiniz.

Teşekkürler,