Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Solved] Visual Basic 2010 odczyt RS232 i zapis do pliku

marcin_rs 26 May 2019 17:14 672 5
  • #1
    marcin_rs
    Level 10  
    Witam

    Mam taki problem - otrzymuje dane z portu RS232 (z Arduino Nano za pomocą funkcji print).

    Cyklicznie na port podawane jest:

    " cisnienie=983.44 | temperatura=22.53 | wilgotnosc=36.81 "

    Chcę uzyskać w zapisywanym pliku tekstowym tylko coś takiego:

    cisnienie=983.44
    temperatura=22.53
    wilgotnosc=36.81

    jeśli dane się zmienią z następnym cyklem, stare mają zostać zastąpione nowymi

    kod programu wygląda następująco:

    Code: vbnet
    Log in, to see the code



    Bardzo proszę o pomoc bo utknąłem w miejscu.
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • Helpful post
    #2
    tzok
    Moderator of Cars
    Musisz resetować pozycję w pliku, czyli pisać od początku a nie dopisywać.
    Po co przesyłasz to jako tekst, ma to jakieś uzasadnienie? Dlaczego nie przesyłasz 3 kolejnych wartości double? Po co tak marnować pamięć w Arduino i pasmo łącza szeregowego?
  • #3
    marcin_rs
    Level 10  
    My.Computer.FileSystem.WriteAllText("c:\a\_dane_meteo.txt", Me.RichTextBox1.Text, False)

    w visual basic " False " - powinien wyczyścić plik i zapisać na nowo a tak nie robi ?!

    jestem otwarty na inne rozwiązanie, docelowo chcę uzyskać, aby program w VB robił plik (np dane.php) w którym będzie zawsze najnowszy wpis w stylu:

    <?php

    $cisnienie = 983.50;
    $temperatura = 22.49;
    $wilgotnosc = 36.89;

    ?>

    Dodano po 13 [godziny] 31 [minuty]:

    visual basic dobrze zapisuje plik - on czyści i robi nowy wpis w tym, że z portu com za każdym razem "wracają dane od początku" i to zapisuje:

    pierwszy cykl zapisuje jeden string -> kasuje zapisuje plik
    2-gi cykl zapisuje już 2 stringi -> kasuje plik zapisuje 2 stringi
    3-ci cykl zapisuje już 3 itd...

    Dodano po 2 [godziny] 40 [minuty]:

    Doszedłem do tego, że dane są zapisywane z TextBox'a, mimo zerowania pliku i tak zawsze zapisuje to co znajduje się w TextBox (czyli z każdym cyklem coraz więcej).

    Rozwiązałem to w ten sposób:

    - arduino wysyła dane co 5 sekund na serial port
    - visual basic odczytuje dane i je zapisuje do pliku, następnie timer kasuje zawartość TextBox co 5 sekund

    mała wada tego rozwiązania, że czasami zapisany plik jest niekompletny (częścią kodu), jednak kolejny cykl już znowu zapisuje poprawnie plik

    kod teraz wygląda tak:


    Code: vbscript
    Log in, to see the code



    Jak ktoś ma sugestie niech pisze, może uda się to lepiej dopracować.

    Pozdrawiam
    .
  • Helpful post
    #4
    MArSTER_1
    Level 19  
    Code: vbnet
    Log in, to see the code


    Jeśli dane są wysyłane co 5 sekund, to możesz ustawić Timer na 4 sekundy i zobaczysz co wyświetli się w okienku MsgBox . Jeśli twoja wysyłana z mikrokontrolera linia to wystarczy obrobić tą zmienną (podzielić na trzy zmienne) i zapisać za pomocą StreamWriter z wartością False co przy istniejącym pliku NADPISUJE dane.
    po odebraniu danych przez port szeregowy można wykonać:
    serialPort1.DiscardInBuffer() 'opróżnienie bufora portu szeregowego z tego co mogło by tam się znajdować.
  • #5
    marcin_rs
    Level 10  
    Teraz już nie pamiętam, było kilka modyfikacji programu jedne działały lepiej inne gorzej, ale satysfakcjonującej koncepcji nie uzyskałem.

    Może i stabilność pracy dałoby się dopracować, ale Arduino "wiszące" na kablu USB bardzo ogranicza, zwłaszcza odległością...

    Skoro więcej jest przeciw niż za - potrzebna jest zmiana koncepcji, rozwiązałem to wysyłaniem danych przez sieć Ethernet - problem zniknął!

    Pozdrawiam wszystkich i zamykam temat.
  • #6
    marcin_rs
    Level 10  
    Teraz już nie pamiętam, było kilka modyfikacji programu jedne działały lepiej inne gorzej, ale satysfakcjonującej koncepcji nie uzyskałem.

    Może i stabilność pracy dałoby się dopracować, ale Arduino "wiszące" na kablu USB bardzo ogranicza, zwłaszcza odległością...

    Skoro więcej jest przeciw niż za - potrzebna jest zmiana koncepcji, rozwiązałem to wysyłaniem danych przez sieć Ethernet - problem zniknął!

    Pozdrawiam wszystkich i zamykam temat.

    Dodano po 2 [minuty]:

    Rozwiązanie powyżej - zmiana koncepcji ;)

    Pozdrawiam!