Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 24 lip 2026, o 07:49


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 28 maja 2014, o 16:48 
Offline
Nowy

Dołączył(a): 04 maja 2014
Posty: 18
Pomógł: 0

Napisałem program w którym jednej z funkcji nie potrafię zdefiniować a dotyczy porównania czasu odczytanego z pamięci z czasem zegara systemowego.
Są cztery kanały realizujące funkcje załącz/ wyłącz z uwzględnieniem dni tygodnia tzn; od poniedziałku do piątku [10 nastaw czasu] i sobota-niedziela [cztery] nastaw czasu co łącznie daje 14 wartości czasu]. Ta część pracuje zgodnie z założeniami gdy czas załącz/wyłącz odroczono o np; 3 godziny gdy czas wyłączenia ustawiono na godz 20:00. Zastosowane sumowanie godzin*60+minuty przykładowo daje 2000 i teraz gdy dodać do tego 3godz*60 mamy 2300 i funkcja działa ale gdy czas wyłączenia jest 2300 + zwłoka 3*60 otrzymuje 2600 a że doba ma 2400 to wtedy ta wyliczanka po prostu się nie sprawdza i funkcja przestaje działać. Po przetestowaniu kilkunastu rozwiązań po prostu nie mam koncepcji jak to zrobić dlatego bardzo proszę o pomoc w napisaniu takiej funkcji.
Część kodu odczytującego czas systemowy oraz nastawy zegara sterującego;
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 maja 2014, o 19:25 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Po pierwsze to dni tygodnia są zaszyte w tym zegarze. Zobacz na stronie 7 http://www.nxp.com/documents/data_sheet/PCF8583.pdf
Nie wiem dokładnie co tam robisz w innych funkcjach, ale sekundy są w rejestrze numer 2 licząc od 0 (w razie czego zmień sobie).
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Sterowanie włącz/wyłącz można zrealizować na zasadzie sprawdzania w każdej sekundzie czy nadszedł czas wykonania danej akcji.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 maja 2014, o 12:03 
Offline
Nowy

Dołączył(a): 04 maja 2014
Posty: 18
Pomógł: 0

Można zrobić porównanie czasu w każdej sekundzie ale wystarczy dokładność minutowa
jest tylko kłopot z dodanym czasem opóźnienia np; trzy godziny.
Pomyślałem by "utrzymać" np; otwartą pętlę warunkową
jeżeli czas nastawy i zwłoka różna od 0 np;23:00 i zwłoka [godzina] 1*60 [aby było w minutach]
i teraz wykorzystując impulsy minutowe zegara systemowego odejmować je od czasu zwłoki
do chwili gdy zostanie spełniony warunek
czas nastawy równy czas zwłoki 0
Czy to ma szansę zadziałać ???
Wstawię cały kod to może będzie bardziej czytelniejsze...
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Ostatnio edytowano 31 maja 2014, o 11:46 przez margas, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 maja 2014, o 21:42 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 517
Pomógł: 26

Kolego nie rozumię twojego przykładu co podałeś z tymi wyliczeniami .Jeśli masz przykład że coś załączasz o godzinie 20:00 i przedłużasz to o 3 godziny to najlepiej zamienić to na minuty lub sekundy. Czyli godzina 20*60 minut=1200minut następnie zwłoka 3*60=180 . Czas który cię interesuje to 1380minut o tej porze ma ON/OFF i teraz musisz przeliczyć aktualny czas pobierany z zegara. Jeśli PCF pobrałeś godziny i minuty i np jest to 18:20 to bierzesz 18 * 60=1080 i masz godziny przeliczone na minuty. Następnie do tego dodajesz minuty czyli 1080+20=1100minut to jest twój aktualny czas i teraz jeśli zrobisz warunek "If aktualny przeliczony czas (1100)== czas ze zwłoką (1200) to zrób coś tam . Mam nadzieję że coś zrozumiałeś. Oczywiście nie pomogę w C bo jeszcze się nie przesiadłem na ten język. Natomiast w Bascomie mi ten system działa który ci przedstawiłem

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 maja 2014, o 11:43 
Offline
Nowy

Dołączył(a): 04 maja 2014
Posty: 18
Pomógł: 0

Zgadza się to tak działa ale ten warunek nie spełnia się gdy suma czasu wykracza poza dobę więc do porównania np, czasu załącz o 22:00 +3 godziny zwłoki nie dojdzie bo suma czasu nastawy będzie 25:00 więc większa od maksymalnego czasu [23:59] zegara systemowego...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 maja 2014, o 16:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Ale przecież 22:00 + 3h to nie jest 25:00 tylko 1:00 .
wstaw warunek przy obliczaniu zwłoki
np.
jeśli czasOnOff > 24:00 wtedy czasOnOff = 3 - (24:00 - 22:00)

nie wiem czy nie zamotałem za mocno ale ogólnie
chodzi oto żeby uwzględnić że robisz operacje na czasie
który musi się mieścić w dwudziestu czterech godzinach lub w 1440-stu minutach



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 maja 2014, o 23:02 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 517
Pomógł: 26

Kolego mogę tylko potwierdzić rozwiązanie kolegi Zaba Robiąc to na minutach zrobił bym warunek If liczba ze zwłoką (25:00)> (24:00) to
Nowa_liczba(1:00)= 25:00-24:00
if aktualny_czas== nowa_liczba to zrób coś tam......

Nawet jak byś miał w tedy zwłokę 5h to masz:
liczba ze zwłoką 27:00 natomiast nowa liczba ci wyjdzie 27:00-24:00=3:00
Najlepiej zamienić to na minuty lub sekundy. A i wydaje mi się że powinno być 23:59 a nie 24:00 ale to sobie już sam doliczysz

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 cze 2014, o 21:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 sty 2014
Posty: 178
Pomógł: 24

jeżeli w porównaniu czasu doliczonego, z czasem z rtc bierzesz pod uwagę dni tygodnia to w przypadku gdy "miniesz" 24 doliczając te trzy godziny powinieneś doliczyć też dzień (np. doliczasz w środę o 22:00 3 godziny i wychodzi czwartek 01:00 to teraz w pamięci powinieneś zmienić dzień też na czwartek ,żeby pasował do tego czwartku z rtc'ka.) :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO