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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 13 lip 2025, o 12:02


    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 2 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