logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Pytanie o obsługę portu RS pod Windows10/11 z fizycznym postem USB

trebuch1 03 Kwi 2023 12:31 993 15
REKLAMA
  • #1 20522695
    trebuch1
    Poziom 26  
    Posty: 823
    Pomógł: 84
    Ocena: 131
    Potrzebna mi jest prosta aplikacja konsolowa do odczytywania danych z portu szeregowego i zapisywania ich do pliku na komputerze. W darmowej wersji VisualStudio2022 poczyniłem prosty programik w którym nie mam w żadnych problemów z utworzeniem pliku i zapisywania do niego znaków z klawiatury czy stringów testowych wprost z programu. Nie mogę dobrać się do obsługi portu szeregowego. Przeszukałem w sieci różne przykłady lecz ich implementacja to dla mnie porażka. Pisanie "od zera" nie wydaje się być sensownym rozwiązaniem. Jak "rozkminić" ten temat w VisualStudio2022?
    Na YT jest jakiś tutorial ale niewiele tekstu widać na ekranie. Zamierzam podłączać mój układzik AVR do komputera Win10 lub 11, za pomocą konwertera RS/USB.
  • REKLAMA
  • #2 20522725
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1462
    Nie programuje się "pod" VisualStudio2022 , ale się programuje w jakimś języku. Jakim ?
    Jaki ten sławny kod już masz?

    Zdecydowanie nieprawdą jest, że implementacja portu szeregowego to porazka. Bardzo ładnie działa i jest może nie idealnie, ale całkiem wporzo zaprojektowane
  • #3 20522773
    trebuch1
    Poziom 26  
    Posty: 823
    Pomógł: 84
    Ocena: 131
    W moim poście nie występuje słowo "pod".
    Chodzi o programik w C++, o czym nie wspomniałem.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #4 20524075
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1462
    No tak, standardowe C++ nie WCALE przenośnych sposób na port szeregowy.
    Trochę zapomniałem, że można standardowe C++ używać w VS.

    Na Linuxach (przypuszczam) by mozna się wyżyć na trybach otwarcia pliku, który jest abstrakcją nad portem szeregowym, na Windows nie mam pojęcia, ale jestem pewien że jest biednie z kontrolą nad szczegółami.

    C++ utrzymane w konwencji Win32 lub C# (zamiennie VB) mają obsługę
  • REKLAMA
  • #6 20554478
    trebuch1
    Poziom 26  
    Posty: 823
    Pomógł: 84
    Ocena: 131
    _jta_ napisał:
    Z języków, których próbowałem: najprościej w Tcl-u, niewiele trudniej w Python-ie. Poza nazwą portu program powinien być przenośny Linux<->Windows.


    Dziękuję. W wolnym czasie zainteresuje się Tcl'em, ponieważ do tej pory nie zajmowałem się nim a jest ciekawy.
  • REKLAMA
  • #7 20554494
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1462
    trebuch1 napisał:
    W wolnym czasie zainteresuje się Tcl'em, ponieważ do tej pory nie zajmowałem się nim a jest ciekawy.


    Nie interesuj się.
    Język / ekosystem w zasadzie martwy. I słusznie.
    Miałem wątpliwą przyjemność opiekowac się wdrożeniem. Na poziomie rozwoju języków epoka kamienia łupanego, wszystko jest stringiem itd... koszmarne założenia

    Dodano po 51 [sekundy]:

    A co do porad na forach, a szczególnie elektrodzie: każda potwora ma swojego amatora.

    Dodano po 9 [minuty]:

    trebuch1 napisał:
    W darmowej wersji VisualStudio2022 poczyniłem prosty programik


    Jak długo będziesz myślowo w tych kategoriach, bez żadnej dystynkcji i szczegółów, nie wybierzesz optymalnie np języka, najwyżej "bo w internetach filmik był"
  • #8 20554545
    _jta_
    Specjalista elektronik
    Posty: 48923
    Pomógł: 3201
    Ocena: 4212
    Python ma sporo podobieństw do "zwykłych" języków, choćby C, jakkolwiek ma np. wymóg stosowania odpowiednich wcięć.

    Tcl nie jest podobny. Ale w Tcl-u dobierałem się do informacji z rejestru Windows - znajdowałem nazwę portu szeregowego.

    W Python-ie można zrobić program wielowątkowy "ręcznie", ma się dostęp do syscall-i... W Tcl-u łatwo robi się callback-i, np. można kazać wywoływać jakąś funkcję, gdy na porcie szeregowym jest znak do odczytania.
  • #9 20571158
    jestam
    Specjalista Automatyk
    Posty: 1794
    Pomógł: 210
    Ocena: 144
    trebuch1 napisał:
    Potrzebna mi jest prosta aplikacja konsolowa do odczytywania danych z portu szeregowego i zapisywania ich do pliku na komputerze.


    Dobierz właściwe narzędzie to problemu. C nie ma wbudowanych funkcji do pracy z portem szeregowym, potrzebna jest jakaś biblioteka. Pod Windows najprościej użyć C#

    
    using System;
    using System.IO;
    using System.IO.Ports;
    using System.Threading;
    
    static class Program
    {
        static void Main()
        {
            try
            {
                using (SerialPort port = new SerialPort("COM3", 115200, Parity.None, 8, StopBits.One))
                {
                    port.Open();
                    while (true)
                    {
                        if (port.BytesToRead > 0)
                        {
                            File.AppendAllText(@"output.txt", port.ReadExisting());
                        }
                        Thread.Sleep(100);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
    


    Umieść powyższy kod w pliku program.cs
    Popraw parametry portu COM i nazwę pliku.
    Skompiluj z linii poleceń:
    
    c:\Windows\Microsoft.NET\Framework\v4.0.30319\csc /t:exe program.cs
    


    Otrzymasz plik program.exe
    Pisane z palca, nie testowane.
  • #10 20761560
    trebuch1
    Poziom 26  
    Posty: 823
    Pomógł: 84
    Ocena: 131
    Zainstalowałem Microsoft Visual Studio Community 2022 (64-bitowy) - Current Wersja 17.7.4 z narzędziami C# 4.7.0
    Próba skompilowania powyższego kodu od użytkownika jestam zakończyla się poniższymi błedami:

    Ważność Kod Opis Projekt Plik Wiersz Stan pominięcia
    Błąd CS1069 Nie można odnaleźć nazwy typu „SerialPort” w przestrzeni nazw „System.IO.Ports”. Ten typ został przesłany dalej do zestawu „System.IO.Ports, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”. Rozważ możliwość dodania odwołania do tego zestawu. ConsoleApp4_Port_RS C:\Users\DELL\source\repos\ConsoleApp4_Port_RS\ConsoleApp4_Port_RS\Program.cs 15 Aktywne

    Ważność Kod Opis Projekt Plik Wiersz Stan pominięcia
    Błąd CS0103 Nazwa „Parity” nie istnieje w bieżącym kontekście ConsoleApp4_Port_RS C:\Users\DELL\source\repos\ConsoleApp4_Port_RS\ConsoleApp4_Port_RS\Program.cs 15 Aktywne

    Ważność Kod Opis Projekt Plik Wiersz Stan pominięcia
    Błąd CS0103 Nazwa „StopBits” nie istnieje w bieżącym kontekście ConsoleApp4_Port_RS C:\Users\DELL\source\repos\ConsoleApp4_Port_RS\ConsoleApp4_Port_RS\Program.cs 15 Aktywne


    Dziękuję wszystkim za dotychczasową pomoc. Temat dla mnie nie jest aż tak ważny aby nadal go drążyć.
  • #11 20761585
    jestam
    Specjalista Automatyk
    Posty: 1794
    Pomógł: 210
    Ocena: 144
    Z Visual Studio musisz utworzyć projekt „Console App (.NET Framework)” a nie domyślny „Console App” - ten drugi nie dołącza domyślnie wielu bibliotek, w tym System.IO.Ports. Można je oczywiście dodać do projektu. To sygnalizuje błąd CS1069. Reszta wynika z tego faktu.

    Z linii poleceń da się to skompilować bez Visual Studio.
  • #12 20761622
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1462
    @trebuch1

    a) ustaw język angielski
    b) uzyskany angielski komunikat wrzuć w google
  • #13 20761818
    sosarek

    Poziom 43  
    Posty: 83875
    Pomógł: 9318
    Ocena: 15484
    Konto firmowe:
    Z
    Pka, Poznań, 60-850
    Pomogłem? Kup mi kawę.
  • #14 20761922
    trebuch1
    Poziom 26  
    Posty: 823
    Pomógł: 84
    Ocena: 131
    >>20761622

    Próba kompilacji z wiersza poleceń:

    This compiler is provided as part of the Microsoft (R) .NET Framework, but only supports language versions up to C# 5, which is no longer the latest version. For compilers that support newer versions of the C# programming language, see http://go.microsoft.com/fwlink/?LinkID=533240

    Czyli wymagana jest starsza wersja kompilatora od tej którą mam zainstalowaną.
    Tak więc sprawa jest jasna.
  • Pomocny post
    #15 20762172
    jestam
    Specjalista Automatyk
    Posty: 1794
    Pomógł: 210
    Ocena: 144
    Kolego, rozumiem nieznajomość angielskiego, ale istnieją darmowe tłumacze.

    Cytat:

    Ten kompilator jest dostarczany jako część Microsoft (R) .NET Framework, ale obsługuje tylko wersje językowe do C# 5, który nie jest już najnowszą wersją.


    Windows zawiera kompilator języka C# wersji 5 (i starszych). Aktualna wersja to C# 11. To nic nie szkodzi, używanie nowych funkcji języka jest opcjonalne. Kod z mojego postu jest możliwy do kompilacji starym kompilatorem z linii poleceń.
  • #16 20762513
    trebuch1
    Poziom 26  
    Posty: 823
    Pomógł: 84
    Ocena: 131
    Przyznaję, zbyt pochopnie wyciągnąłem błędny wniosek. Przykładowy programik skompilował się.
    Ponadto - załączonym poleceniem - skompilował mi się inny testowy programik, który otwiera plik tekstowy i go listuje. I to działa.

Podsumowanie tematu

✨ Użytkownik poszukuje prostego rozwiązania do odczytu danych z portu szeregowego w systemach Windows 10/11, korzystając z konwertera RS/USB. W programie napisanym w C++ w Visual Studio 2022 napotyka trudności z implementacją obsługi portu szeregowego. Uczestnicy dyskusji sugerują, że standardowe C++ nie oferuje wbudowanej obsługi portów szeregowych, a zalecają użycie C# lub Pythona, które mają lepsze wsparcie dla tej funkcjonalności. Wskazano również na konieczność dodania odpowiednich bibliotek w Visual Studio oraz na możliwość kompilacji z linii poleceń. Użytkownik ostatecznie zdołał skompilować przykładowy program, co potwierdziło, że problem został rozwiązany.
Wygenerowane przez model językowy.
REKLAMA