vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Hilfe bei empfang auf einem COM-Port (mehrere Geräte gleichzeitig, Byteempfang) 
Autor: Bibobernie
Datum: 22.10.12 15:56

Hallo

Ich nutze aktuell einen Rs232 zu RS485 Schnittstellenwandler um verschiedene Geräte anzusteuern. Die Kommunikation ist dabei komplett identisch mit der einer RS232 Schnittstelle. Bei einem RS485 Bus können aber mehr als 10 Geräte gleichzeitig kommunizieren.

Aktuell nutze ich 3 Module welche eine freundlicherweise mittels Ascii-Zeichen kommunizieren. Diese Terminieren ihre Antworten benutzerfreundlich mit einem <CR>. Dank Syclock ist eine Kommunikation mit allen drei Geräten über eine Schnittstelle kein Problem. Hier mal als Beispiel der Code:

    Friend Function SendeBefehl(ByVal Befehl As String) As String
        SyncLock RS485Port
            With RS485Port
                Try
 
                    .Write(Befehl & vbCr)
                    Dim Antwort As String = .ReadTo(ChrW(13))
 
                    If Antwort.Contains(">") OrElse Antwort.Contains("!") _
                      Then    'Antwort scheint OK
                        Return Antwort
                    Else
                        Return "?Fehler"
                    End If
 
                Catch ex As TimeoutException
                    Fehlerbehandlung(Fehlercodes.Timeout, ex.Message)
                    Return "?Fehler"
                Catch ex As Exception
                    Fehlerbehandlung(Fehlercodes.Unbekannter_Fehler, ex.Message)
                    Return "?Fehler"
                End Try
            End With
        End SyncLock
    End Function
Mein Problem stellt sich nun beim vierten Gerät, welches mit eingebunden werden soll. Hierbei handelt es sich um einen Temperaturregler welcher eine Bytekommunikation nutzt. Terminiert werden die Signale hierbei über eine CRC16 Checksumme. Das senden von Befehlen an das Gerät ist mir nach anfänglichen Problemen auch möglich allerdings hapert es bei mir auf der Empfangsseite. Bei dem Regler kann ich aber leider nicht bis zu einem bestimmten Zeichen einlesen lassen da die Terminierung hier nicht über <CR> sondern eine sich ändernde CRC16-Summe erfolgt.

Theoretisch wäre die Nutzung eines DataRecive-Events denkbar. Das funktioniert auch sehr gut sofern nur der Regler genutzt wird. Sobald die Module dazukommen wird dieses Event nicht mehr ausgelöst.

Ich wollte das ganze nun so lösen:

    Private Sub SendeBefehl(ByVal Befehlsbytes() As Byte)
 
        _puffer.Clear()
 
        SyncLock RS485Port
            With RS485Port
                Try
                    .Write(Befehlsbytes, 0, Befehlsbytes.Count)
 
                    Dim StopUhr As New Stopwatch
                    StopUhr.Start()
 
                    Do Until StopUhr.ElapsedMilliseconds >= 10
 
                        _puffer.Add(CByte(.ReadByte))
 
                    Loop
 
                    StopUhr.Stop()
                    StopUhr.Reset()
 
                    'Datenaufbereitung(_puffer.ToArray)
 
                Catch ex As Exception
                    'Fehlerbehandlung
                End Try
            End With
        End SyncLock
 
    End Sub
Der Puffer enthält dann aber keine Daten. Hab auch schon versucht das ganze über
Do Until .BytestoRead > 0
_puffer.Add(CByte(.ReadByte))
loop
zu lösen. Auch ohne Erfolg. Hat jemand nen Tipp für mich wie ich in so einem speziellen Fall vorgehen kann?

Ahnungsloser ahnungsloser...

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Hilfe bei empfang auf einem COM-Port (mehrere Geräte gleichz...1.306Bibobernie22.10.12 15:56

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel