2010-07-09 11 views
1

J'ai un programme qui lit les données d'un scanner via le port série. Ce programme fonctionne correctement sur Windows XP. Nous avons un serveur terminal configuré sous Windows Server 2008. Je lance HyperTerminal sur notre terminal de test, il connecte et lit les données du scanner via COM1. Je cours mon application sur ce même terminal de test et n'obtiens rien quand je scanne.Les événements SerialPort ne se déclenchent pas sous Windows Server 2008 à l'aide de l'application .NET 2.0

Mon application se connecte à COM1 sans erreurs et se déconnecte sans erreur. MAIS, l'événement DataRecieved ne se déclenche JAMAIS. L'événement ErrorReceived n'est pas non plus. J'ai joué avec le Handshaking, avec le RecievedBytesThreshhold et à peu près tous les paramètres d'installation que j'ai trouvés. Réglez-le exactement comme les paramètres sur Hyperterminal. J'ai même essayé de démarrer une minuterie sur un thread différent pour appeler ReadByte chaque seconde pour essayer de KICK cette chose en faisant quelque chose. Rien n'a fonctionné.

J'ai essayé de résoudre ce problème pendant une journée entière maintenant. Ajout d'événements à ma classe essayant de voir TOUT ce qui se passe. Tout ce que je sais est, il se connecte au port et il se déconnecte du port correctement, mais rien ne se passe entre les deux. Aucune donnée lorsque je numérise. Aucun événement n'a été déclenché entre la connexion et la déconnexion du port. Je suis fatigué de google. :-)

AIDE !! S'il vous plaît??? PS J'ai également téléchargé des applications de communications série simples d'autres utilisateurs. Rien dans .NET fonctionne. Période. :-(

Port Code SetUp (mvarSerialPort est 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 

événement DataReceived (qui n'a jamais tiré sur ce terminal darn):

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 (Cela fonctionne très bien sur mon ordinateur et mon ordinateur de coworker en cours d'exécution XP)

Private Sub RaiseScanEvent() 
    Dim sScanned As String = ComPort.ReadLine.TrimEnd 
    RaiseEvent ClassStatus("RaiseScanEvent data: " & sScanned) 
    RaiseEvent ComDataReceived(sScanned) 
End Sub 
+0

Si le code que vous avez téléchargé ne fonctionne pas, ainsi que le vôtre, que ce n'est pas un problème de configuration de port série.Le problème semble provenir du serveur lui-même - une certaine configuration, politique, autorisations ou autre - empêche les applications de recevoir jamais les données. Je vous suggérerais d'adopter une attitude de support technique à l'égard de ce problème, en diagnostiquant le problème et en cherchant des informations sur ce qui pourrait causer cela du côté du serveur. Essayez de télécharger des applications supplémentaires utilisant le port série. peut-être «moniteur de port série gratuit» aiderait. Laissez le code de côté pour l'instant, à mon humble avis. –

Répondre

0

Pas vraiment une réponse définitive Je suis peur, mais quelques petites choses à essayer/considérer:

  • Est-ce que mvarSerialPort vraiment ont la valeur de "COM1" sur le terminal?

  • Essayez éventuellement de définir DtrEnable = True avant d'ouvrir le port. L'utilisation d'un moniteur de port, tel que PortMon est une bonne idée, bien qu'elle vous donne des informations de bas niveau. Vous pourriez être en mesure de comparer les résultats des PC de travail avec la machine du terminal. Au moins, il peut vous montrer toute activité lorsque le scanner fait son truc. Si vous avez un autre port COM sur la machine du terminal (de plus en plus improbable ces jours-ci, mais vous pouvez utiliser un convertisseur USB-série juste à des fins de test), vous pouvez essayer/acheter un null-modem cable. Ensuite, vous pouvez connecter les deux thèses ports ensemble. De cette façon, vous pouvez avoir votre application connectée à COM1 et Hyperterminal à COM2 (ou autre). Cela vous permettra effectivement de taper dans votre application avec Hyperterminal.

+0

Oui, mvarSerialPort est vraiment COM1. :-) C'était la première chose que j'ai vérifiée. J'ai essayé de définir DtrEnable avant et après (avec plusieurs autres paramètres lol) Cela ressemble à un problème avec le logiciel du terminal. Les applications .NET fonctionnent sur CE4 mais pas sur CE5. Les gars du système appellent le fabricant pour savoir ce qui se passe. Je garderai cette question à jour au cas où quelqu'un d'autre se heurterait à ce problème. –

+0

@Pamela: OK, ce sera intéressant de voir ce qu'ils proposent. Bonne chance! – Andy

+0

Le fabricant doit résoudre le problème. Nous avons dû rétrograder le logiciel du terminal à la version précédente jusqu'à ce que la nouvelle version soit corrigée. –