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



Teraz jest 14 lut 2025, o 16:22


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 20 paź 2014, o 22:20 
Offline
Użytkownik

Dołączył(a): 20 paź 2014
Posty: 91
Pomógł: 0

Witam,
Robię aplikację w C#, w której m. in. rejestruję przebieg zmiany napięcia z dwóch czujników analogowych. Mam dwa przyciski Start i Stop, które zatrzymują i wznawiają rysowanie wykresu, otwieram zamykam porty. Mam taki problem, że czasami podczas startu, aplikacja mi się wykrzacza pisząc, że jest nieprawidłowy format danych wejściowych, zauważyłem, że otwierając port szeregowy w arduino IDE, czasami jako pierwszy pomiar pokazuje się 'dziwna' dana lub pusta linia. Jeżeli wyświetlam dwa pomiary w formacie np:44 78, to czasami do pierwszego pomiaru doklejana jest liczba lub jakas spacja np: 456 90. Tak jakby podczas otwierania portu były jeszcze jakieś pozostałości z poprzedniego pomiaru? Podobnie dzieje się podczas wciskania przycisku stop, czasami program się zatrzymuję, myślę, że jest to spowodowane tym, że przycisk jest naciskany podczas trwania wątku, podczas trwania rejestracji pomiaru.
Pytanie czy ktoś wie jak to rozwiązać, żeby ten program się nie wysypywał w losowych momentach jak dostanie błędy pomiar? Jest jakaś możliwość ominięcia tego pierwszego pomiaru przy starcie? Miał ktoś podobny problem podczas rejestracji danych z czujników? Dodam, że próbkowanie odbywa się co 100ms.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 paź 2014, o 23:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

Hey,

Oczywiscie , ze jest. Najprostszy to probowac lapac bledy czyli to co robimy w bloku try / catch

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


Oczywiscie, jesli spodziewasz sie tylko liczb (nawet jesli robisz to w formacie ASCII czyli masz string a nie int ) to mozesz uzyc np REGEX ktory bedzie wylapywac tylko liczby

Tutaj masz linka http://tinyurl.com/otjhklo zebys zobaczyl co sie dzieje kiedy np uzywasz Regex (wizualnie)

Natomiast sama implementacje zostawiam juz Tobie :D


Powodzenia!

Raf

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 paź 2014, o 14:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2013
Posty: 79
Lokalizacja: Rybnik
Pomógł: 2

Ominac pierwszy pomiar mozesz latwo. Robisz poprostu pierwszy odczyt ktorego nie wykorzystujesz. Przyklad:
mySerialPort.Readline();
buf=mySerialPort.Readline();
To jest taki lopatologiczne ominiecie bledu odczytu. Blad odczytu wynika z tego ze uC nadaje ramke danych i ty w pewnym momenci zaczynasz odczytywac, nie koniecznie w odpowiednim momencie czyli np mozesz trafic na srodek ramki danych.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 paź 2014, o 17:15 
Offline
Użytkownik

Dołączył(a): 20 paź 2014
Posty: 91
Pomógł: 0

Dzięki za odpowiedź, metoda z try i catch działa i przy starcie już działa, ale problem teraz jest z kolei przy przycisku OFF po naciśnięciu w losowych momentach aplikacja się zawiesza, wykres przestaje się rysować, nic nie można zrobić. Nie wyrzuca błedu po prostu staje program i nic się nie da zrobić. Ktoś ma jakiś pomysł?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 paź 2014, o 19:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2013
Posty: 79
Lokalizacja: Rybnik
Pomógł: 2

Nie pokazujesz kodu zrodlowego. Ale taka mysl na teraz to ze nie zamykasz polaczenia. Kolejny sugestia, dobra praktyka to wykorzystanie osobnwgo watku do odbierania/wysylania danych. Wtedy masz pewnosc ze twoj interface sie nie zatnie i nie bedzie np brak odpowiedzi. Problem moze pojawic sie w momencie przekazywania danych pomiedzy watkiami ale tez mozna to spokojnie opanowac.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 paź 2014, o 19:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

Dokladnie !

Kolego - pokaz kod zrodlowy ... bo w przeciwnym wypadku :) wg mnie blad lezy..... hmmmm w 247 lini kodu ?! :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2014, o 14:09 
Offline
Użytkownik

Dołączył(a): 03 lis 2014
Posty: 28
Pomógł: 0

Panowie mają rację . Co do osobnych wątków, z których powinieneś korzystać to poczytaj o BeginInvoke i delegatach.



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

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