2016-08-19 6 views
-1

у меня есть серийное ком GUI и мне нужно, чтобы текст, отображаемый в окне основой на то, что существующие данные серийного порта есть, но не точно, что данные последовательного порта. Например, если существующая строка последовательного порта - «! +0007.», Я хотел бы, чтобы мое текстовое поле прочитало «Тип K». Я пробовал несколько методов, таких как If-Then и Select Case, и мне не повезло.Как отображать текст в поле на основе последовательного порта существующих данных

Private Sub GetInput_Click(sender As Object, e As EventArgs) Handles GetInput.Click 
    SerialPort1.Write("$" & ComboBox4.Text & ComboBox5.Text & "06" & vbCr) 
    System.Threading.Thread.Sleep(50) 
    If SerialPort1.ReadExisting = "!+0007." Then 
     GetInputBox.Text = "Type K" 
    End If 

    SerialPort1.DiscardOutBuffer() 
End Sub 

Не повезло с этим

Private Sub GetInput_Click(sender As Object, e As EventArgs) Handles GetInput.Click 
    Dim value As String = SerialPort1.ReadExisting 
    SerialPort1.Write("$" & ComboBox4.Text & ComboBox5.Text & "06" & vbCr) 
    System.Threading.Thread.Sleep(50) 
    Select Case value 
     Case value = "!+0007." 
      GetInputBox.Text = "Type K" 
    End Select 
    SerialPort1.DiscardOutBuffer() 
End Sub 

Ни здесь ни. Любые предложения?

+0

В первом примере попробуйте 'SerialPort1.ReadLine()' вместо 'SerialPort1.ReadExisting'. Вы также можете поэкспериментировать с увеличением значения в 'Sleep'. –

+0

@JimHewitt ReadLine() заставляет программу замораживать –

+0

Вы пытались установить 'SerialPort1.NewLine = vbCR'? –

ответ

0

Предложения:

  1. Start, регистрируя данные, которые вы отправляете и полученные с помощью Console.Writeline
  2. Похоже, ваш вызова ReadExisting перед отправкой данных в последовательный порт, то вы будете ждать, то проверить его , То, что я подозреваю, что вам нужно делать (и вы должны это уточнить), - это отправить данные в COM-порт, подождать, а затем прочитать ответ. В этом случае вы хотите:

     SerialPort1.Write("$" & ComboBox4.Text & ComboBox5.Text & "06" & vbCr) 
        System.Threading.Thread.Sleep(50) 
        Dim value As String = SerialPort1.ReadExisting 
    
  3. Вы очистив исходящий буфер, но не ваш входящий буфера так, скорее всего, вы будете иметь частичные пакеты из предыдущего порта связи там.

  4. Не предполагайте, что вы всегда получите 1 пакет из 1 ответа ... следовательно, необходимо регистрировать данные.

+0

Итак, я добавил код, который вы сказали, и положил после него 'If value ="! +0007. " Тогда getinputbox.text = "Тип K" ' –

+0

Хорошо ... у вас есть вопрос? Или несколько журналов для меня? – FloatingKiwi

+0

Мне не повезло с тем, что вы предлагаете, я просто получаю пустое текстовое поле. Я очень новичок в этом, поэтому я открыт для всего –