C# serial port problem z odczytem

0

Witam piszę program do odczytu wartości z licznika sea Pozyton. Pierwszy raz piszę program do obsługi portów dla tego proszę o pomoc i wyrozumiałość. Komputer jest podłączony do moxa nport ten zaś do licznika (RS485). Komunikacja jest rozpoczynana po wysłaniu przez PC znak enter , następnie wysyłamy numer licznika /A513.0022229 ze znakiem enter i na tą wiadomość licznik powinien odpowiedzieć /g513.0022229 i znak enter. Problem w tym że w moim programie po wczytaniu odpowiedzi za pomocą port.ReadExisting() otrzymuje string o długości 0 a powinienem dostać konkretną odpowiedź. Za wszelką pomoc dziękuje.

static void Main(string[] args)
        {
            try
            {
                char znak_enter = (char)13;
                string wysylane_slowo;
                SerialPort port = new SerialPort(); 
                port.PortName = "COM2";//jaki port chce otworzyć
                port.BaudRate = 4800;//prędkość 
                port.DataBits = 7;//bity danych
                port.StopBits = StopBits.One;//bity stopu
                port.Parity = Parity.Even;

                

                port.Open();//otwarcie portu
                

                if (port.IsOpen)//sprawdzam czy port został otwarty
                    Console.WriteLine("Port otwarty");//port otwarty
                else
                    Console.WriteLine("Port zamknięty");//port zamknięty

                Console.WriteLine("Lista co odbieram i wysyłam");
                wysylane_slowo = "" +znak_enter; //wysyłam znak enter by rozpocząć rozmowe
                port.Write(wysylane_slowo);
                
                Console.WriteLine("W:" + wysylane_slowo );
                Console.WriteLine("R:" + wysylane_slowo.Length);
                wysylane_slowo = "/A513.0022229" + znak_enter;
                
                port.Write(wysylane_slowo);
                Console.WriteLine("W:" + wysylane_slowo);
                Console.WriteLine("R:" + wysylane_slowo.Length);
                
                string slowo = port.ReadExisting(); 

                Console.WriteLine(slowo.Length);
               if (port.IsOpen)//zamknięcie portu
                    port.Close();

                
                Console.WriteLine("Koniec transmisjii");
                
                
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            

        }
0

char znak_enter = (char)13;

Jesteś pewien że 13, a nie 10, albo sekwencja 13,10?

Spróbuj dać opóźnienie przed ReadExisting, albo nawet Console.ReadKey().

0

sprawdziłem z 13 i 10 jak pisałeś i dodałem czekanie na naciśnięcie guzika niestety nie pomogło ale dzięki za odpowiedź.

0

string LF = "\x0A";
string CR = "\x0D";
string ACKN = "\x06";

DataTX = "/A523.1111111";
konsola.AppendText(DataTX);
portcom.Write(DataTX + CR + LF);
konsola.AppendText(CR);

//------------------------- Odczyt
DataRX = portcom.ReadLine();
konsola.AppendText(DataRX);
konsola.AppendText(CR);

1 użytkowników online, w tym zalogowanych: 0, gości: 1