Лучший способ узнать, все ли данные получены через последовательный порт - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть это приложение c # windows form, которое получает данные через последовательный порт от другого ПК и отправляет данные в веб-приложение во всех полных данных.Теперь моя проблема, я знаю, что я не могу знать, если данные, полученные завершен, потому что нет Stoper слова или символа в полученных данных, потому что я не имею никакого контроля над данными, которые, посылаемыми.Каков наилучший подход в моей ситуации?Я попытался поставить поток, чтобы сделать время ожидания, но ир не помогает.

вот мой код:

public void DataReceivedHandler_2(object sender, SerialDataReceivedEventArgs e)
        {
           Thread.sleep(5000);
            SerialPort sp = (SerialPort)sender;
            byte[] buffer = new byte[sp.ReadBufferSize];

            if (tString == string.Empty)
            {
                SetText("SPC_CLEAR_TEXT");
                SetTextProcessed("SPC_CLEAR_TEXT");

            }

            int bytesRead = sp.Read(buffer, 0, buffer.Length);
            tString += Encoding.ASCII.GetString(buffer, 0, bytesRead);






            if (tString.Contains("[DATA]"))
            {
                SetText(tString);

                FormatRawData(txtRawData.Text);
                SendToSPC();
                tString = string.Empty;



                //    string workingString = tString.Substring(0, tString.IndexOf((char)_terminator));
                //    tString = tString.Substring(tString.IndexOf((char)_terminator));
                //    MessageBox.Show(workingString, "with terminator", MessageBoxButtons.OK);
            }           
        }

Я также пробовал это, но это работало в виртуальном порту, но не на самом деле

 while (sp.BytesToRead > 0)
            {
                bytesRead = sp.Read(buffer, 0, buffer.Length);
                tString += Encoding.ASCII.GetString(buffer, 0, bytesRead);
            }

Формат данных:

[HEADER]
Comment 
View    
H_Number
V_Number

[CONTROL VALUE]
Label   Sn
Target  ******
UCL   15.000
LCL    7.000
Mean UCL    ******
Mean LCL    ******
Range UCL   ******
Range LCL   ******


    [DATA]
    Sn  Batch no.   Date / Shift:   User Name:
       9.408        19-09-20A   JOUIE
       8.711        19-09-20A   JOUIE
       9.820        19-09-20A   JOUIE

иногда он содержит более 50 строк, и я получаю данные только после номера партии SN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...