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



Teraz jest 29 lis 2024, o 16:35


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 12 wrz 2018, o 15:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 gru 2013
Posty: 121
Pomógł: 16

Witam

Przy okazji zabaw z kontrolerem CAN natrafiłem w nim na funkcjonalność nazwaną Timestaping (znaczniki czasowe) . Te znaczniki czasowe generuje w kontrolerze CAN timer 32 bitowy odpalany na życzenie użytkownika. Wartość znacznika odczytana z timera jest wysyłana z ramką CAN. Po stronie odbiorcy odczytamy sobie te wartość ale teraz pytanie do czego to wykorzystać w praktyce ? Wiem , że ogólnie synchronizacja czasowa w sieci etc ale czy byłby ktoś uprzejmy wyjaśnić to jak chłop chłopu przy piwie :)

Z góry dziękuję.

_________________
http://strefapic.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 wrz 2018, o 17:32 
Offline
Użytkownik

Dołączył(a): 05 wrz 2017
Posty: 169
Pomógł: 31

Hej.
Z tego dobrodziejstwa (jeszcze) w CAN nie korzystałem ale swego czasu w projekcie z RS485 FD dodałem właśnie znaczniki czasu, czyli stan licznika 32 bit wysyłany razem z ramką danych lub jako samodzielne dane.
Problemem, który zmusił mnie do zastosowanie timestamp'ów była synchronizacja czasu i punktu pracy kilku urządzeń. W telegraficznym skrócie kilka generatorów musiało pracować synchronicznie (lub w sterowany sposób asynchronicznie) i jakoś wymieniać się informacjami takimi jak obciążenie (żeby je równo rozłożyć), częstotliwości pracy, awaria tranzystorów mocy itp. Przy starcie urządzenia master synchronizował sobie slave z wykorzystaniem znaczników czasu (urządzenia startowały z różnym opóźnieniem), potem MST zarządzał self testy i mierzył czas wykonania dla każdego SLV (na podstawie znaczników) - zbyt długi self test wiadomo zwiastował problemy (najczęściej przewody od RS'a).
Nie pamiętam teraz jaka była dokładnie rozdzielczość licznika czasu ale coś w granicach 1-10ms przerwanie tylko z rozkazem inkrementacji rejestru i z wykorzystaniem CTXT (dodatkowe akumulatory ograniczające prolog i epilog przerwania). Częstotliwość przerwań była wymuszona wymaganą dokładnością synchronizacji.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 wrz 2018, o 19:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 maja 2013
Posty: 174
Lokalizacja: Kraków
Pomógł: 8

Myślę że można by to wykorzystać do funkcji "HEARTBEAT" czyli kontroli czy dane urządzenie żyje na magistrali. Spotkałem się z taką funkcją w urządzeniach przemysłowych, np. falowniku.

_________________
Rozwój i utrzymywanie Oprogramowania



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2018, o 10:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 gru 2013
Posty: 121
Pomógł: 16

Czyli z grubsza jeśli chcemy jak zrozumiałem synchronizować urządzenia w węzłach CAN od chwili startu lub wykonania jakiejś czynności, to nadzorca czasu mierzy swój odcinek czasu od startu a urządzenie podlegające synchronizacji mierzy swój odcinek i porównuje go do nadzorcy. Z porównania wychodzi czy należy zwolnić proces czy przyspieszyć.

Dobra dziękuję chłopaki coś tam zaczyna świtać pod czaszką :)

_________________
http://strefapic.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2018, o 18:14 
Offline
Użytkownik

Dołączył(a): 05 wrz 2017
Posty: 169
Pomógł: 31

Coś w ten deseń, chociaż jeśli chcesz sobie poćwiczyć z znacznikami czasu to proponuje "zabawę" którą sobie wymyśliłem jak nie mogłem ogarnąć synchronizacji.
1. Master i slave powinny mieć oscylatory stabilizowane kwarcem (albo dokładne wewnętrzne).
2. Master synchronizuje zegar (licznik) slave'ów z swoim.
3. Każdy rozkaz roboczy (włączenie LED itp.) jest dodatkowo powiększony o czas wykonania ("godzinę" startu).
Działało to w ten sposób, że po zsynchronizowaniu zegarów (zawartości rejestrów z danymi zliczania czasu) master do każdego rozkazu dołączał informację przy jakiej wartości licznika czasu rozkaz ma zostać wykonany. Może śmiesznie to zabrzmi ale zainspirował mnie do tego jakiś niskobudżetowy film szpiegowski gdzie bohaterzy synchronizowali zegarki przed akcją :P Do takiego algorytmu dodawałem symulowane błędy komunikacji itp. żeby sprawdzić jak długie powinno być okno wymiany danych (czas do wykonania) i w ogóle wszystkie głupoty jakie przyszły mi do głowy.
Powyższa metoda jest dosyć powolna ale skuteczna o ile nie sieć nie wpadnie w bezustanne odpytywanie uszkodzonego slave.
Powodzenia z CAN.



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: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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