我有一个程序通过串口从扫描仪读取数据。此程序在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
答案 0 :(得分:0)
恐怕不是一个明确的答案,但有一些事情要考虑/考虑:
mvarSerialPort 真的 在终端上的值是否为“COM1”?
在打开端口之前,可能尝试设置DtrEnable = True。
使用端口监视器,例如PortMon是一个好主意,虽然它确实为您提供了相当低级别的信息。您可以将工作PC的结果与终端机进行比较。至少它可能会在扫描仪完成任务时显示任何活动。
如果您在终端机器上有另一个COM端口(虽然现在越来越不可能,但您可以使用USB-Serial转换器仅用于测试目的),您可以尝试制作/购买null-modem cable.然后你可以将这两个端口连接在一起。这样,您可以将应用程序连接到COM1,将Hyperterminal连接到COM2(或其他)。这将有效地允许您使用Hyperterminal键入您的应用程序。