Forum: PC-Programmierung VB Signal zur Ereignisauslösung von der COM-Schnittstelle


von Tino (Gast)


Lesenswert?

Hallo allerseits,

ich möchte ein paar Einlese-Experimente mit der COM-Schnittstelle und 
einem 4021 über VB 2008 machen. Da ich nicht die ganze Programmlaufzeit 
eine Schleife laufen lassen möchte, die die COM-Schnittstelle ständig 
abfragt, möchte ich gern wissen, wie ich in VB eine Ereignisauslösung 
über einen Eingang an der COM ralisieren kann. Das soll heißen, ich 
nutze ein zusätzliches Eingangspin am Com welches immer gestetzt wird 
wenn eine Schaltzustandsänderung Eingangsseitig am 4021 anliegt. Welchen 
Eingang am Com kann ich dafür am besten benutzen und wie muß ich mir den 
Programmaufbau bzw. Ablauf vorstellen, damit bei einer Zustandsänderung 
am 4021 das Abfragen des IS's automtisch abläuft?

Danke im voraus

Gruß Tino

von Ralf (Gast)


Lesenswert?

> Da ich nicht die ganze Programmlaufzeit eine Schleife laufen lassen
> möchte, die die COM-Schnittstelle ständig abfragt,
Das macht man auf einem PC auch nicht in einer Schleife (bzw. wenn dann 
in einem eigenen GUI-unabhängigen Thread), sonst hängt die Kiste.

> Das soll heißen, ich nutze ein zusätzliches Eingangspin am Com welches
> immer gestetzt wird wenn eine Schaltzustandsänderung Eingangsseitig am
> 4021 anliegt.
Weisst du wieviele verschiedene 4021-ICs es gibt? Schieberegister, 
digitale Potis, blablabla. Solltest halt schon die genaue Bezeichnung 
mal posten, damit wir wissen was du da hast...

> Welchen Eingang am Com kann ich dafür am besten benutzen
Entweder über einen Timer zyklisch auslesen (dann geht's ohne 
zusätzlichen Pin) oder über DSR/CTS-Pin-change-Events.

> wie muß ich mir den Programmaufbau bzw. Ablauf vorstellen, damit bei einer
> Zustandsänderung am 4021 das Abfragen des IS's automtisch abläuft?
Sowohl bei Timer- als auch DSR/CTS-Implementierung reagierst du auf das 
entsprechende Event, indem du dann ausliest. Im Timerfall musst du durch 
einen Datenvergleich alt gegen neu entscheiden ob sich was getan hat, im 
anderen Fall signalisiert dir ja offensichtlich der unbekannte Chip die 
Änderung direkt.

Ralf

von Tino (Gast)


Lesenswert?

Hallo
die Programmierung zur Abfrage des Schieberegisters 4021 (parallel zu 
seriell) soll nicht im Vordergrund meiner Frage stehen! Was mich 
interessiert, wie kann ich dem VB-Programm mittels 
„DSR/CTS-Implementierung“ der Status an den Eingängen geändert hat, 
damit das einlesen der Daten beginnen kann! Die Timerlösung würde ich 
als zweite Möglichkeit in Betracht ziehen!
Wie löse PinChangeEvent aus und wie reagiert VB darauf? Ich kenne mich 
damit überhaupt nicht aus! Kann mir jemand auf die Sprünge helfen?

Danke!

Gruß Tino

von Bernd H. (geeky)


Lesenswert?

Bei "VB 2008" gehe ich mal von nem Visual Basic mit .Net-Framework aus:
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport_events.aspx

von Tino (Gast)


Lesenswert?

Hallo,

Danke für die Hilfe!!
Hab dann doch was im Netz gefunden und erfolgreich getestet!

Public Class Form1                             'Schalter zwischen DTR 
und CTS überwachen
    Private Delegate Sub Test()
    Private PegelWechsel As New Test(AddressOf Pinchange)
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles MyBase.Load
        SerialPort1.Open()
        SerialPort1.DtrEnable = True
        Pinchange()
    End Sub

    Private Sub SerialPort1_PinChanged(ByVal sender As Object, ByVal e 
As System.IO.Ports.SerialPinChangedEventArgs) Handles 
SerialPort1.PinChanged
        If e.EventType = IO.Ports.SerialPinChange.CtsChanged Then
            Me.Invoke(PegelWechsel)
        End If
    End Sub
    Private Sub Pinchange()
        If SerialPort1.CtsHolding Then
            Me.Text = "offen"
        Else
            Me.Text = "geschlossen"
        End If
    End Sub
End Class

Gruß Tino

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.