【发布时间】:2010-07-09 15:43:14
【问题描述】:
我有一个程序通过串行端口从扫描仪读取数据。该程序在 Windows XP 上运行良好。我们有一个运行 Windows Server 2008 的终端服务器。我在我们的测试终端上运行 HyperTerminal,它通过 COM1 连接并读取扫描仪数据。我在同一个测试终端上运行我的应用程序,扫描时什么也没得到。
我的应用程序连接到 COM1 没有错误,并且断开连接没有错误。但是,DataRecieved 事件永远不会被触发。 ErrorReceived 事件也不是。我玩过握手、RecievedBytesThreshhold 以及我找到的几乎所有设置设置。完全按照超级终端上的设置进行设置。我什至尝试在不同的线程上启动一个计时器,以每秒调用 ReadByte 来尝试将这件事踢到做某事。没有任何效果。
我一整天都在尝试解决这个问题。向我的班级添加了事件,试图查看正在发生的一切。我所知道的是,它连接到端口并正确断开与端口的连接,但两者之间没有任何反应。扫描时没有数据。在连接到端口和从端口断开连接之间根本没有触发任何事件。我厌倦了谷歌。 :-)
帮助!!请???
PS 我还下载了其他简单的串行通信应用程序。 .NET 中没有任何效果。时期。 :-(
端口设置代码(mvarSerialPort 为 COM1):
If ComPort Is Nothing Then
ComPort = New SerialPort(mvarSerialPort)
ComPort.BaudRate = 9600
ComPort.Parity = Parity.None
ComPort.StopBits = StopBits.One
ComPort.DataBits = 8
ComPort.ReadTimeout = 2000
ComPort.Encoding = System.Text.Encoding.ASCII
ComPort.Handshake = Handshake.None
ComPort.ReceivedBytesThreshold = 1
End If
If Not ComPort.IsOpen Then ComPort.Open()
ComPort.DtrEnable = True
DataReceived 事件(从未在那个该死的终端上触发):
Private Sub Scan(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) Handles ComPort.DataReceived
Dim sDataStatus As String = ""
Select Case e.EventType
Case SerialData.Chars
sDataStatus = "Data Received Event - Chars "
Case SerialData.Eof
sDataStatus = "Data Received Event - Eof"
End Select
RaiseEvent ClassStatus(sDataStatus)
Dim delInvoke As ScanResults
delInvoke = New ScanResults(AddressOf RaiseScanEvent)
delInvoke.Invoke()
End Sub
RaiseScanEvent(这在我的电脑和我同事运行 XP 的电脑上效果很好)
Private Sub RaiseScanEvent()
Dim sScanned As String = ComPort.ReadLine.TrimEnd
RaiseEvent ClassStatus("RaiseScanEvent data: " & sScanned)
RaiseEvent ComDataReceived(sScanned)
End Sub
【问题讨论】:
-
如果您下载的代码和您的代码一样不起作用,那么这不是串口配置问题。问题似乎源于服务器本身——某些配置、策略、权限或其他任何东西——使应用程序无法接收数据。我建议您对这个问题采取技术支持的态度,通过诊断问题并从服务器端寻求可能导致此问题的原因的信息。尝试下载使用串行端口的其他应用程序。也许“免费串口监视器”会有所帮助。恕我直言,暂时将代码放在一边。
标签: c# .net vb.net .net-2.0 serial-port