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



Teraz jest 27 lis 2024, o 12:54


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 22 kwi 2012, o 09:37 
Offline
Użytkownik

Dołączył(a): 23 sty 2012
Posty: 27
Pomógł: 0

postanowiłem dokończyć rozgrzebany projekt, ale ostatnio utknąłem na komunikacji rs485 między dwoma modułami, które wymieniają się danymi dwu-kierunkowo,

generalnie w BSC można wybrać dwa sposoby wymianę danych:
1. printbin <-> inputbin
2. print <-> Inkey()

ja wybrałem ten 1, no i pytanie czy to słuszny kierunek, bo w większości rozwiązań na sieci dominuje ten 2(zmienna zamieniana jest na stringa i wysyłana w postaci znakowej)

w moim przypadku komunikacja działa bez zakłóceń w trybie jedno-kierunkowym, natomiast problemy zaczynają się w momencie trybu dwu-kierunkowego - od czasu do czasu moduły zawieszają się, poniżej załączam listingi("identyczne w obu modułach"),

proszę o opinię osób, które wcześniej uporały się z komunikacją rs485 :roll:

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


>podprogram wysłania(przesyłam komendę i zmienną )
Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 kwi 2012, o 10:14 
Offline
Moderator
Avatar użytkownika

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

Ja powiem tak - z doświadczenia już wiem bo widzę - że ogromna ilość ludzi tak się boi i obawia komunikacji za pomocą znaków ASCII - Ten twój sposób nr.2) ..... że od razu przechodzą na tryb transmisji binarnej - bo ten wydaje się TAK oczywisty i prosty że szok.

Tyle że ta ogromna większość ludzi nie zdaje sobie sprawy że tylko im się tak WYDAJE i czycha na nich pułapka .... proszę bardzo - właśnie w nią wpadasz ale dodam że jeszcze nie doleciałeś do dna tego wilczego dołu - pułapki - bo na dole czekają na ciebie jeszcze ostre kolce ;)

Tylko proszę mnie źle nie zrozumieć - nie chcę przez to powiedzieć, że transmisja binarna jest jakaś mega koszmarnie trudna i do zrealizowania tylko dla jakichś orłów. Raczej chodzi mi tu o przedstawienie takie obrazowe - różnicy pomiędzy transmisją ASCII a binarną ....

Bo transmisja ASCII to w porównaniu do tych wilczych szańców jak - spacer na boso o poranku po pięknej zielonej łące wilgotnej od porannej rosy ;) ;)

ale cóż - na początku - zwykle każdy widzi niestety to inaczej na swój pohybel :(

Tak pokrótce o co chodzi:

1. jeśli transmisja binarna to musisz pan opanować:
a. budowanie prawidłowych ramek zawierających znaczniki startu, końca i ew sumy kontrolen
b. posługiwanie się timeoutami !!!!!! - tak o tym długo nikt nie wie i stąd ten ból i kolce

jeśli nie wierzysz to sprawdź sobie jak wygląda pięknie zrobiona transmisja MODBUS RTU - tylko uwaga żeby ci się nie zrobiło niedobrze od analizy kodu - bo mi się zrobiło niedobrze - jak kiedyś to zobaczyłem ;)

reasumując trzeba ściśle pilnować czasu pomiędzy ramkami, dbać o odstępy prawidłowe - i reagować na opóźnione albo uszkodzone ramki - bez tego masz i będziesz miał kaszankę najwyższej jakości


Gdybyś zaś zdecydował się na transmisję ASCII - którą nawet w Bascomie łatwo do pewnego stopnia zrobić na na pewno łatwiej niż binarną (tak mi się wydaje) ..... to wiesz jak może wyglądać ramka ????

coś pięknego - jedna ramka to po prostu najzwyklejszy łańcuch danych tekstowych zakończony znakiem ENTER !!!! może także zawierać CRC ale również jako tekst np liczby HEC (ASCII)

obsługa nadlatujących końców linii w postaci znaków ENTER gigantycznie ułatwia pracę - jak myślisz dlaczego praktycznie większość modemów posługuje się właśnie ASCII - znane ci pewnie ze słyszenia chociaż "komendy AT" ;) ????

dlatego że to super proste do implementacji

no tak a czego tak się boją początkujący w tej transmisji ASCII i to jak wielkiego włochatego jeża ???


a no tego że jak tu przesłać kilka zmiennych różnego typu gdy jedna to liczba, druga to tekst a trzecia to np liczba z przecinkiem

nic prostszego - zamieniasz te liczby na tekst (w Bascomie to pryszcz) i formujesz łańcuch gdzie każda dana oddzielona jest np przecinkiem, np:

zmienna WORD A = 183
zmienna SINGLE B = 27.83
zmienna tekstowa STRING = "ala i as

proszę bardzo po złączeniu może być przesłany taki łańcuch:

"183,27.83,ala i as" i od razu po tym znak ENTER

no tak o ile to jeszcze wydaje się proste to już jak to po drugiej stronie rozłożyć na kawałki? :( każdy myśli ... a co ? Od czego macie panowie w Bascomie polecenia typu mid(), left(), right(), val(), str() itp ?????

toż to proste jak drut - no ale ..... niestety coś za coś - jeśli to ma być w Bascomie to niestety zajmie to sporo miejsca we Flash i nie ma co liczyć na realizację zawrotnych prędkości - ale bez przesady - da się !!!! nawet z prędkościami 115200 bps !!!!!!!!! Jak mówię o zawrotnych to np 3MBit/s ;)

Wtedy warto przesiąść się na C a szczególnie że w drugiej części mojej książki mam nadzieję że pięknie odczaruję tą transmisję ASCII, której wszyscy się tak boją ;)

spójrz na ostatni element z listy tego co będzie w tej książce - szczerze ci to polecam i nie tylko tobie, ma to w linku poniżej:

post4396.html#p4396

wracając do Bascoma - zanim poznałem C to z powodzeniem w ten opisany przeze mnie sposób i z użyciem buforowania dobrze przygotowanego przez Bascom - realizowałem transmisje w sterownikach swoich pracujących na RS232 ale i na RS485

_________________
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: 22 kwi 2012, o 10:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8587
Pomógł: 337

I w ten sposób Mirku ująłeś całą praktycznie spuściznę tragizmu jakim niewątpliwie jest komunikacja realizowana na poziomie binarnym. I to jak zwykle w poetycki sposób :)

Reasumując komunikacja ASCII jest w naprawdę jak najbardziej idealna do 99.9% zastosowań
zwłaszcza w Bascomie gdzie jest ona bardzo dobrze udokumentowana choć w istocie zasobożerna,
ale to tylko BSC tu w zasadzie do końca nie wiadomo co właściwie kompilator robi z kodem :)

Jeśli kolego jeszcze nie ugrzęzłeś na dobre w bascomowym Bagnie szybko z niego uciekaj,
nie bynajmniej nie mam na myśli że jest zły , bo mi się też zdarza z niego korzystać jeszcze,
głównie do mniej ambitnych projektów , choć wypiera go powoli Arduino gdzie jest jeszcze prościej
i ma się większą kontrolę nad kodem. Bo z czasem nabierzesz dziwnych nawyków , a później przyjdzie rozgoryczenie i frustracja.

Wysyłanie łańcuchów ASCII to prosta i sprawdzona metoda, ta droga powinieneś iść .

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 kwi 2012, o 11:34 
Offline
Użytkownik

Dołączył(a): 23 sty 2012
Posty: 27
Pomógł: 0

Panowie dzięki za obrazujące przedstawienie problematyki tematu,
jednym słowem muszę obrać inny kierunek(w komunikacji rs485),

co do C, uczę się go równolegle i oczywiście czekam na 2 książkę,

ale obecnie muszę zakończyć ten projekcić, który rozpocząłem w BSC, potem przyjdzie kolej na przenoszenie wszystkiego do C



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 kwi 2012, o 11:55 
Offline
Moderator
Avatar użytkownika

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

No to właśnie potrenuj tą transmisję ASCII - bo w Bascomie też ci wyjdzie - a jak pisał SunRiver w 99,9% można to wykorzystywać

_________________
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  
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 1 gość


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