События SerialPort не будут запускаться в Windows Server 2008 с использованием приложения .NET 2.0 - PullRequest
1 голос
/ 09 июля 2010

У меня есть программа, которая читает данные со сканера через последовательный порт.Эта программа отлично работает на Windows XP.У нас установлен сервер терминалов под управлением Windows Server 2008. Я запускаю HyperTerminal на нашем тестовом терминале, он подключается и считывает данные сканера через COM1.Я запускаю свое приложение на том же тестовом терминале и ничего не получаю при сканировании.

Мое приложение подключается к COM1 без ошибок и отключается без ошибок.НО, событие DataReceded НИКОГДА не запускается.Ни одно из событий ErrorReceived.Я играл с Handshaking, с RecieveBytesThreshhold и почти со всеми настройками, которые я нашел.Настройте его точно так же, как настройки Hyperterminal.Я даже пытался запустить таймер в другом потоке, чтобы каждую секунду вызывать ReadByte, чтобы попытаться сделать что-то подобное.Ничего не сработало.

Я пытался это исправить целый день.Добавил события в мой класс, пытаясь увидеть ВСЕ, что происходит.Все, что я знаю, это то, что он подключается к порту и правильно отключается от порта, но между ними ничего не происходит.Нет данных при сканировании.Между подключением к порту и отключением от него не происходило никаких событий.Я устал от Google.:-)

ПОМОГИТЕ !!Пожалуйста???

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

1 Ответ

0 голосов
/ 10 июля 2010

Боюсь, не совсем точный ответ, но несколько вещей, которые нужно попробовать / рассмотреть:

  • Имеет ли mvarSerialPort действительно значение «COM1» на терминале?

  • Возможно, попробуйте установить DtrEnable = True перед открытием порта.

  • Используя монитор порта,например, PortMon - хорошая идея, хотя она даёт вам информацию довольно низкого уровня.Вы можете сравнить результаты работы ПК с терминалом.По крайней мере, он может показать вам какую-либо активность, когда сканер делает свое дело.

  • Если у вас есть другой COM-порт на терминальном компьютере (хотя в наши дни это все менее вероятно, но вы могли бы использовать USB-Серверный преобразователь только для тестирования) вы можете попробовать / купить нуль-модемный кабель. Затем вы можете соединить оба этих порта вместе.Таким образом, ваше приложение может быть подключено к COM1, а Hyperterminal - к COM2 (или как угодно).Это позволит вам эффективно набирать текст в приложении с помощью гипертерминала.

...