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



Teraz jest 24 lis 2024, o 10:41


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 2 wrz 2013, o 14:58 

Pomógł: 0

Mam mały problem, w zielonej książce jest świetnie opisane parsowanie danych z komendami AT.

Potrzebował bym jeszcze w jak prosty sposób można w drugą stronę, czyli wysyłając komendę AT z procesora do urządzenia i dostając odpowiedź, ją sparsować.
Na początek wystarczyła by obsługa zwykłego [OK] i [ERROR], jak to ugryźć? przecież nie da się bezpośrednio porównywać stringa? a może się da?, ale czy to nie będzie za bardzo zasobnożerne?

Jak w prosty sposób poradzić sobie z tym, potrzebuje wysyłać konfigurację do wizfi, dostaję zwrotnie albo samo [OK], albo dosyć sporo parametrów z których potrzebuje wyłuskać np IP.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 2 wrz 2013, o 15:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 maja 2012
Posty: 174
Lokalizacja: Gliwice
Pomógł: 19

Cześć, w bibliotece string.h jest funkcja do porównania dwóch stringów. Jeżeli są takie same funkcja zwraca 0 a jeżeli różne to 1. Funkcja wyglądała jakoś tak strcmp (tab1, tab2). Jak będę w domu to potwierdzę nazwę

Edit.
Oczywiście funkcja porównuje dwie tablice zawierające stringi

Wysłane z mojego GT-I9100 za pomocą Tapatalk 4



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 wrz 2013, o 20:34 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27310
Lokalizacja: Szczecin
Pomógł: 1041

rezasurmar napisał(a):
przecież nie da się bezpośrednio porównywać stringa?


Nie ? .... a to jakby działały funkcje, które opisujesz, że działają ? ;) przecież w tym kodzie na który patrzysz do obsługi AT są właśnie funkcje porównujące stringi ;) W C masz ich od groma i ciut ciut.

Komunikacja komend AT w drugą stronę ? ... ja bym się tu mniej przejmował porównywaniem stringów ... ale bardziej skoncentrowałbym się na timeoutach - bo zaczyna się asynchroniczność na maxa że tak powiem ;)

Ja do tego tematu przyłożę się z wyjasnieniem dopiero w 3 książce przy okazji SMS/GSM/GPRS ... sam muszę usystematyzować wszystkie swoje pomysły w tym zakresie, a książka będzie dobrym celem. Niestety minęło tyle czasu od zapowiedzi a nadal nie ruszyłem niestety - więc to jeszcze troszkę potrwa.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 wrz 2013, o 07:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 lis 2011
Posty: 582
Lokalizacja: okolice Wrocławia :)
Pomógł: 24

Antystatyczny napisał(a):
.........

To jest pisane pod wpływem impulsu, taka nagła wizja, więc proszę mnie zweryfikować.
Aha... i juz teraz nie jestem pewien czy sim900 wysyła do 255 bajtów... czy mój gps. Kurcze, zwątpiłem.



Do podstawowej pracy z GSM na SIM900 używam bufora 128 bajtów zakładając że obsługuję tylko kilkunastoznakowe SMS'y (zdalna konfiguracja, nic więcej).
Jeżeli chcesz obsłużyć pełną długość SMS'a musisz mieć już prawie 200 bajtów.
Z GPS'em wszystkie ramki podchodzą już pod 255 bajtów :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 wrz 2013, o 07:33 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27310
Lokalizacja: Szczecin
Pomógł: 1041

Anty, ale oczywiście że masz rację - że z takich modułów może nadlatywać bardzo dużo tekstu ;) nawet więcej niż 256 bajtów w stringu ...

ale ... oczywiście, że są sposoby na rozwiązywanie takich zadań i realizowałem je niejednokrotnie ... To nie jest tak, że liczę, że dopiero wpadnę na te pomysły ... Krótko mówiąc sposoby są dwa ;) (co najmniej dwa)

1. zastosować np mikrokontroler ATmega1284 który ma 16kB RAM ;) ... no ale to takie banalne

2. zastosować w miarę potrzeb parsowanie "W LOCIE" też się da ;) i wtedy można do obróbki użyć nawet ATtiny2313 ;) który przecież całego RAM'u ma bidulek, tylko 128 bajtów ;)

z tym, że pisałem właśnie o tym uporządkowaniu i usystematyzowaniu tych moich pomysłów na ten drugi sposób, bo realizowałem to wielokrotnie, ale prawie zawsze nieco inaczej (wiesz jak jest) i ciężko byłoby to wyjaśnić wtedy w szczegółach. A tymczasem gdy człowiek usiądzie, pomyśli (sam tak przecież masz - jesteś mistrzem w tym!) napisze jakiegoś LIB'sika .... który nawet nie musi być zaraz tym NAJ... NAJ... lepszym libsikiem - ale umożliwi zrozumienie jak można do tego podchodzić - to wtedy jest fajnie ...

tylko to miałem na myśli

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 wrz 2013, o 07:41 

Pomógł: 0

Dzięki za wszelkie sugestie.

Mirku mam nadzieje, że zależnościami czasowymi aż tak nie będę się musiał przejmować.
Parsowanie danych wejściowych (masa w ascii + parę innych drobnych komunikatów) to w zasadzie mam już załatwione ;).
Gorzej sprawa wygląda z obsługą wizfi po AT, bo po pierwsze nie wiem, czy iść w "ordynarne" wrzucanie do modułu za każdym włączeniem parametrów startowych, czy jednak zrobić jakieś zapytania.

Jakoś porównywanie stringów, taka wielka biblioteka do takiej pierdoły ;).

PS. Ależ Mirku nie musisz się tłumaczyć :), po prostu Anty miał na myśli (przynajmniej tak mi się wydaje), że ty masz już obcykane te parsowanie i nawet ja by cie obudzić o 3 rano to byś sparsował nawet zapytanie do serwera sql ;) po rs232.
No ale ja to ja, nie widzę pewnych aspektów od razu.

Przykład funkcja z twojej biblioteki at_lcd_service(....)
gdzie pasowane są dane dla wyświetlacza, dla mnie to jakiś potwór ;).
Przydało by się za każdym razem takie tłumaczenie jak na stronie 431 greenbooka, toż to poezja :)
Przykładowy "tekst" a potem rozłożenie go na czynniki :D.

U mnie lata sporo więcej, bo np. (nie wiem czy uda mi się oddać wygląd z terminala) tu jest ręczne łączenie,
ale np. jeżeli APek nie będzie odpowiadał już przy AT+WA=Teraoka, wywali [ERROR] na terminal, zamiast [OK].
Obrazek

Nie wiem, czy nie chcę za dużo, ale jakaś obsługa błędów by się przydała.
Procek to będzie Atmega644P (PA) więc flasza sporo, ramu też w miarę.



Ostatnio edytowano 3 wrz 2013, o 08:10 przez rezasurmar, łącznie edytowano 1 raz

Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 3 wrz 2013, o 08:08 
Offline
Użytkownik

Dołączył(a): 05 lut 2013
Posty: 302
Pomógł: 19

Jak ci biblioteka za duza to sobie wez strcmp z implementacji standardowej i ja przerob pod siebie:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 wrz 2013, o 08:14 

Pomógł: 0

Dzięki, o tym też pomyślałem :).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 3 wrz 2013, o 09:33 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27310
Lokalizacja: Szczecin
Pomógł: 1041

rezasurmar napisał(a):
Mirku mam nadzieje, że zależnościami czasowymi aż tak nie będę się musiał przejmować.


Tzn o tym (wydaje mi się), że będziesz musiał pomyśleć ... i już tłumaczę dlaczego

tzn wiem że parsowanie masz już obcykane i super ... ale rozmowa z modemami za pomocą komend AT wymaga czy tego chcesz czy nie chcesz timeoutów. Tzn o ile chcesz to zrobić dobrze .... Bo fakt można to pominąć ... i jakoś tam na sztywno gadać z modemem ...

to jednak pragnę zwrócić uwagę na pewien fakt, który po jakimś czasie zacznie (chyba jak każdemu kto zaczyna tą zabawę) spędzać czas z oczu, przyprawiać o siwe włosy albo ich utratę przez wyrywanie sobie z głowy ...

do rzeczy ...

1. rozważmy taki przypadek - wysyłasz polecenie AT i .... kurka wodna nie dostajesz ŻADNEJ odpowiedzi ;) ... i na co wtedy zda się całe parsowanie ? :( .... pomyśl co się w takich sytuacjach może dziać ... i nie zakładaj, że tobie się one nigdy nie pojawią. Albo że to są tylko jakieś strachy na lachy - bo to nie jest straszenie tylko zwrócenie uwagi na pierwszy podstawowy aspekt każdej ASYNCHRONICZNEJ i dobrze obsłużonej komunikacji. Zwykle osoby zaczynające zabawę w komunikację komendami AT ale w kierunku DO MODEMU na tym łamią pierwsze zęby

2. drugi przypadek to standardowy komunikat ERROR w komedach AT, który wymaga czasem niezłych rozgałęzień w programie ;) tu też zaczyna się często HARDCORE ... bo taki niewinny napis ERROR trzeba np czasem obsłużyć w ten sposób aby ponownie wysłać komendę (o ile pewni jesteśmy jej składni) a do tego przewidzieć po drodze to co wyżej w pkt.1 czyli TimeOUT ;)

3. kolejny przypadek to np odpowiedzi z modemu gdy nadlatuje UWAGA! może się z tym jeszcze nie spotkałeś - PACZKA STRINGÓW hmmm może inaczej LISTA STRINGÓW ... a dopiero na samym końcu komunikat "OK" - to jest "smakowity kąsek" do kodowania ;)

Generalnie gdy oprogramowuje się to na PC, gdzie człowiek ma pod ręką sprzętowe WĄTKI - to jest dużo łatwiej ... a tu? ... a tu trzeba się troszkę namęczyć

a pewnie (odnoście pkt nr.1) nie chciałbyś mieć takiej sytuacji, że kiedyś urządzenie zrobi totalną zwiechę bo po wysłaniu AT+COŚTAM będziesz czekał na odpowiedź ...

I to miałem na myśli pisząc o zależnościach czasowych - stąd moja sugestia aby od razu myśleć o tym - tak zawczasu, bo później przerobić program - oj będzie ciężko ...

co więcej - żeby dobrze się dogadywać z modemem to gdy zdarzy się TimeOUT zawsze warto co najmniej 3 razy powtórzyć wysłanie tego samego polecenia i dopiero po kilku powtórzeniach timeoutu ostatecznie podjąć decyzję w programie o tym, że mamy jakąś awarię ... choć nie zawsze musi to oznaczać awarii całego modemu - tylko jakiejś jego części że tak powiem ...

No generalnie dużo można by pisać o tym jakie są sposoby podejść do komunikacji za pomocą komend AT

ale na pewno te przeróżne wyrywkowe pokazywane przykłady czy to w internecie czy w niektórych publikacjach - często w ogóle nie poruszają tego bardzo ważnego zagadnienia i później mamy taki efekt, że ktoś coś zrobi ... i pojawiają się kłopoty z których nawet nie wiadomo jak wybrnąć ... dopiero długa żmudna analiza i praca z tym umożliwia dojście do takich wniosków. A jest to o tyle niewdzięczna analiza ;) że niestety takiego głupiego Timeouta nie uda się wywołać na zamówienie szczególnie podczas próby odbioru nagle dużej ilości danych - bo tu bywają one najgorsze.

wiem wiem ... może to co piszę to trochę takie masło maślane ... i wygląda jakbym się mądrzył czy straszył czymś .... co przecież zwykle w takich prostych testach prawie nigdy się nie zdarza. No ale ... kurczę na prawdę uważam, że jest to zagadnienie warte uwagi i przemyślenia chociaż ... I to właśnie to podejście chcę sam sobie usystematyzować - jak się uda to wtedy będę w stanie to dokładnie opisać i w kodach pokazać - a na razie tylko sygnalizuję.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 wrz 2013, o 10:04 

Pomógł: 0

Nie wiem czy nie przekombinowałem ;)

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A tu main.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 3 wrz 2013, o 10:53 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27310
Lokalizacja: Szczecin
Pomógł: 1041

taki mały hint ;) zamiast tego

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


korzystaj pan z bibliotek wbudowanych, będzie łatwiej, prościej, lepiej, szybciej i przyjemniej ... o np tak

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


albo:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


bardzo przydatna funkcja w wielu przypadkach - a leży gotowa i się marnuje - no nie ? ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 wrz 2013, o 11:43 

Pomógł: 0

Dzięki Mirku za wszelkie sugestie, o tym, jak to ładnie określiłeś obsługiwaniu błędów cały czas myślę i spędza mi to sen z powiek ;). Bo projekt poważny i nie ma to tamto :).
30 urządzeń będzie na raz włączanych, i po pierwsze musi być bardzo dobrze ogarnięte które ma problem, po drugie, w przypadku jak padnie coś to nie chciał bym za każdym razem jeździć do Ustki ;).

Do tych timeoutów świetnie nada się softwerowy timer,
będę was zamęczał moimi wypocinami ;).



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

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