#vb.net #serial-port
Вопрос:
У меня есть приложение (vb.net), который надежно работал в течение 12 лет, но начал выдавать сообщения об ошибках.
Я вычисляю значения вращения — отправляю их на сервопривод — затем проверяю, завершена ли передача.
Проблема в том, что readline выдает мне ошибку тайм-аута
Вот код —
Sub SendSerialData()
CurrentPositionDisplay.BackColor = Color.White
CameraServoReadOK = 0
' Send strings to CameraServo serial port.
ServoCommdataOut = ServoCommdataOut amp; vbCr
CameraServoComm.DiscardOutBuffer()
CameraServoComm.ReadTimeout = 150
CameraServoComm.Write(ServoCommdataOut)
CameraServoReadOK = 0
If VerboseLogging = 2 Then
dtString = dispDt.ToString(datePatt)
outMessage = dtString amp; " - " amp; ServoCommdataOut
Call WriteToLog(outLabel, outMessage)
End If
If outLabel = "Starting Picture Sequence " Then
SkipRead = True
End If
'wait code added to accomodate 5ms turnarround time at CameraServo
Call DelayTimer(10)
' If SkipRead = False Then
If SkipRead = False Then
Try
CameraServoCommDataIn = CameraServoComm.ReadLine()
Catch ex As Exception
outMessage = "Missed Read after servo write" amp; ex.ToString
Call WriteToLog(outLabel, outMessage)
End Try
CameraServoReadOK = InStr(CameraServoCommDataIn, CameraServoresponseStartString, CompareMethod.Text)
If CameraServoReadOK > 0 Then
CameraServoStatusDataIn = CameraServoCommDataIn
End If
End If
End Sub
Комментарии:
1. проверьте, открыт ли порт или нет, прежде чем читать строку » если cameraServoComm. isOpen затем CameraServoCommDataIn = CameraServoComm.ReadLine() В противном случае вызовите WriteToLog(надпись «Порт закрыт .. «) Конец, если `
2. Привет — проблема решена, но все еще запутана — решением было перейти на другой разъем USB3 на материнской плате. Никаких тайм-аутов приема. Однако со старым портом я мог отправлять и получать с помощью эмулятора терминала без ошибок. Я попробую предложенный открытый тест теперь, когда я знаю, что могу вернуться к отсутствию ошибок при перемещении USB.