【问题标题】:SerialPort events won't fire on Windows Server 2008 using .NET 2.0 ApplicationSerialPort 事件不会在使用 .NET 2.0 应用程序的 Windows Server 2008 上触发
【发布时间】: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


【解决方案1】:

恐怕不是一个确定的答案,但有几件事可以尝试/考虑:

  • mvarSerialPort真的在终端有“COM1”的值吗?

  • 可能在打开端口之前尝试设置 DtrEnable = True。

  • 使用端口监视器,例如PortMon 是个好主意,尽管它确实为您提供了非常低级的信息。您可以将工作 PC 与终端机的结果进行比较。至少它可以在扫描仪执行其操作时向您显示任何活动。

  • 1234563将这两个端口连接在一起。这样,您可以将您的应用程序连接到 COM1 并将超级终端连接到 COM2(或其他)。这将有效地允许您使用超级终端在您的应用中输入内容。

【讨论】:

  • 是的,mvarSerialPort 确实是 COM1。 :-) 这是我检查的第一件事。我确实尝试在之前和之后设置 DtrEnable(以及其他几个设置哈哈)看起来这是终端软件的问题。 .NET 应用程序可在 CE4 上运行,但不能在 CE5 上运行。系统人员打电话给制造商以弄清楚发生了什么。我会及时更新这个问题,以防其他人遇到这个问题。
  • @Pamela :好的,看看他们想出什么会很有趣。祝你好运!
  • 制造商必须解决问题。在他们修复新版本之前,我们不得不将终端软件降级到以前的版本。
猜你喜欢
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 2010-12-17
  • 2011-05-11
  • 2018-02-20
  • 2012-10-29
  • 2011-07-01
  • 1970-01-01
相关资源
最近更新 更多