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



Teraz jest 27 lis 2024, o 19:18


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 29 wrz 2016, o 15:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 mar 2014
Posty: 55
Lokalizacja: Wrocław
Pomógł: 0

Witam!
Nie wiem jak zorganizować transmisję po RS232.
Dotychczas działało to tak, że uC zbierał dane i w pętli głównej czekał aż przyjdzie znak 1, 2 lub 3 i wykonywał odpowiednie działania.

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


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


Czyli aplikacja przez timer1 co 1sek wysyłała znak '1' uC odbiera i wysyła swoje dane.
Problem takiego rozwiazania polega na tym ze z gory musze znac ilosc znakow wyslanych przez uC do konkretnego Labela czy Panelu.
Gdybym np chcial odebrac z Ds18b20 nr seryjny to moze on zawierac od 8 do 24 znakow.

Wolałbym wysyłać z uC ciągiem wszystkie dane rozdzielane separatorem a w aplikacji rozdzielać je i umieszczać w odpowiednich okienkach typu panel1, panel2 itd. ale nie mam pojęcia jak to zrobić.
Może ktoś pomóc ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 wrz 2016, o 18:19 
Offline
Moderator
Avatar użytkownika

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

Pierwszym mega podstawowym problemem jaki tu widzę to jest fakt, że ty próbujesz programować totalnie LINIOWO ... i to cię gubi a wręcz uniemożliwia żeby jakkolwiek to rozwinąć ... A liniowo piszesz soft zarówno w procku ... ale także w PC a to to już katastrofa niestety.

Przyznam też, że chociaż próbowałem to w ogóle nie rozumiem tego fragmentu kodu w Bascomie ... ale też bascomem to ja zajmowałem się już chyba 6 lat temu więc praktycznie nic nie pamiętam... Chociaż ... wiem że i w Bascomie można sobie programować w oparciu o zdarzenia i sam to kiedyś robiłem ... no ale nie taką liniową funkcją INKEY() :(

-------------------------------------------------------------------------------

ciężko mi zatem pomóc bo ty tutaj ściśle sprzęgasz komunikację procka z programem na PC a jak się z jednej strony źle pisze to z drugiej ciężko nawet reagować

Mi zaś ciężko podpowiadać jak rozwiązać coś w Bascomie - nie to że nie chcę tylko po prostu nie wiem - nie pamiętam na dzisiaj. Tu musi ktoś z Bascoma może coś podpowiedzieć .... ?

Ty nawet sam potrafisz dostrzec i DOKŁADNIE określić swój problem, bo piszesz:

MaciejF napisał(a):
Problem takiego rozwiazania polega na tym ze z gory musze znac ilosc znakow wyslanych przez uC do konkretnego Labela czy Panelu.

I masz tu 100000% racji

więc może jednak czas na próbę nauki jak to robić w sposób "nieblokujący" w oparciu o zdarzenia .... ?

Od strony procka to mógłbym ci polecić Greenbooka i tam opisaną komunikację przez RS232 no ale jaki to ma sens jeśli ty tworzysz w Bascomie ?

MaciejF napisał(a):
Wolałbym wysyłać z uC ciągiem wszystkie dane rozdzielane separatorem a w aplikacji rozdzielać je

I to jest dobry pomysł ... dobra droga - ważne że to już przynajmniej czujesz przez skórę ... dalsze kroki musisz podjąć sam

Bo procek powinien formować jakieś dane, zaś raz na sekundę jakaś procedura typu zdarzenie wywoływane niezależnie od pozostałej części programu powinna je zbierać, formować w ramkę ASCII i wysyłać do PC. To NAJLEPSZA droga ... Ale jeśli ty na razie jesteś na etapie GoSub , Goto to hmmm no może być to ciężko zrealizować ... a przecież nawet Bascom ma funkcje - tylko nie wiedzieć czemu mnóstwo ludzi piszących soft w tym języku z nich nie korzysta na rzecz właśnie goto, gosub, goto, goto, gosub itd Nie mówię tego broń Boże ironicznie - raczej wskazuję kierunek ...

W programie na PC - też kompletnie zapomnij o takim pisaniu linijka po linijce odbieraniu pojedynczych znaków czy coś bo - tu sam widzisz że wychodzi ci MASAKRA po prostu MASAKRA - tak nie można...

Zapoznaj się z komponentem z którego korzystasz i mogę się założyć, że posiada on zdarzenia - np OnRxData czy coś w tym stylu - i to te zdarzenia trzeba oprogramować

bo pomyśl sobie - jakbyś miał odebrać milion znaków z UART to byś pisał milion linijek w kodzie ? Ma to jakiś sens ?

Zdarzenia są po to żeby wyłapać nadlatujące dane - dostajesz je pewnie w jakimś buforze który przekazywany jest w argumencie funkcji zdarzenia .... i tam trzeba je parsować ... Gorzej oczywiście jeśli ty z kolei z Bascoma - cykasz je też w sposób liniowy no i się wszystko w końcu zacina i nic nie działa jak trzeba a programu nie ma jak rozbudować ...

Nawet jeśli zacząłbym poradniki Delphi a tobie udałoby się to wdrażać jakoś w Lazarusie (bo ja nie znam Lazarusa ni w ząb) .... to co z tego - jeśli ja będę pokazywał komplementarne przykłady od strony procka jeśli chodzi o komunikację w C w oparciu właśnie o zdarzenia opisane już dawno w GB ?

w tym jest właśnie problem

_________________
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: 29 wrz 2016, o 19:23 
Offline
Użytkownik

Dołączył(a): 29 mar 2012
Posty: 595
Lokalizacja: Jaworzno
Pomógł: 39

Nie wiem na ile pomogę ale wykopałem procedurę którą napisałem w 2004 roku w Delphi do pobierania danych wysyłanych z AVRa. Procedura wyświetlała temperaturę na wykresie i zapisywała dane do bazy Firebird. Program na uC był napisany w Bascomie z użyciem typowych funkcji do wysyłania stringów(jakieś print() czy coś, nie pamiętam Bascoma). Nie sprzątałem kodu przed publikacją bo istotne linie można sobie wyłuskać

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

_________________
Pozdrawiam
PP



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

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