使用.NET 2.0应用程序不会在Windows Server 2008上触发SerialPort事件

时间:2010-07-09 15:43:15

标签: c# .net vb.net .net-2.0 serial-port

我有一个程序通过串口从扫描仪读取数据。此程序在Windows XP上运行正常。我们有一台运行Windows Server 2008的终端服务器。我在测试终端上运行HyperTerminal,它通过COM1连接并读取扫描仪数据。我在同一个测试终端上运行我的应用程序,在扫描时什么也得不到。

我的应用程序连接到COM1没有错误,并且没有错误地断开连接。但是,DataRecieved事件永远不会被解雇。也没有ErrorReceived事件。我玩过Handshaking,RecievedBytesThreshhold以及我找到的几乎所有设置设置。设置与Hyperterminal上的设置完全相同。我甚至尝试在不同的线程上启动一个计时器来每秒调用ReadByte来尝试将这个东西踢进去进行SOMETHING。没有任何效果。

我一直试图解决这个问题一整天。向我的班级添加了一些事件,试图查看正在进行的所有事情。我所知道的是,它连接到端口并正确地从端口断开连接,但两者之间没有任何反应。我扫描时没有数据。在连接到端口和从端口断开连接之间没有任何事件被触发。我厌倦了谷歌。 :-)

HELP !!请???

PS我还下载了其他简单的串行通信应用程序。 .NET中没有任何东西可行。期。 :-(

Port SetUp代码(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

1 个答案:

答案 0 :(得分:0)

恐怕不是一个明确的答案,但有一些事情要考虑/考虑:

  • mvarSerialPort 真的 在终端上的值是否为“COM1”?

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

  • 使用端口监视器,例如PortMon是一个好主意,虽然它确实为您提供了相当低级别的信息。您可以将工作PC的结果与终端机进行比较。至少它可能会在扫描仪完成任务时显示任何活动。

  • 如果您在终端机器上有另一个COM端口(虽然现在越来越不可能,但您可以使用USB-Serial转换器仅用于测试目的),您可以尝试制作/购买null-modem cable.然后你可以将这两个端口连接在一起。这样,您可以将应用程序连接到COM1,将Hyperterminal连接到COM2(或其他)。这将有效地允许您使用Hyperterminal键入您的应用程序。