Für Steuerungen aller Art gibt es das Relais-Interface, das bereits seit vielen Jahren in Ausbildung, Industrie und Hobby eingesetzt wird. Bisher fehlte noch ein Interface zum Abfragen von Eingängen. Mit dem RD30 steht nun ein Gerät zur Verfügung, das bis zu 30 Schalter oder Kontakte lesen kann. Es kann mit einem oder mehreren Relais-Interfaces an einer gemeinsamen COM-Schnittstelle betrieben werden.
Das Gerät fragt bis zu 30 Schalter oder Kontakte ab und meldet
Änderungen über die RS232 an den PC. Die ersten 24 Eingänge
sind auf Masse bezogen, sechs weitere sind über Optokoppler isoliert.
Die massebezogenen Eingänge 1 ... 24 belegen jeweils eine Klemme.
Über die größeren Schraubklemmen in der Mitte steht viermal
Masse (GND) zur Verfügung. Ein Schalter wird zwischen Masse und einem
Eingang angeschlossen. Die isolierten Eingänge 25 ... 30 belegen jeweils
zwei Klemmen. Hier muss eine Spannung im Bereich 5 V ... 24 V angeschlossen
werden, um einen Eingang zu aktivieren.
Bedienungsanleitung RD30.PDF (489 KB)
Technische Daten:
Stromversorgung: 9...12V, 100 mA
Schnittstelleneinstellung: 9600,N,8,1
Eingänge 1 ... 24: Kontakte werden gegen GND angeschlossen
Eingänge 25 ... 30: Potenzialfrei 5....24 V
Das folgende Beispielprogramm in Visual Basic zeigt laufend den Zustand aller 30 Eingänge. Rd30vb.zip (41 KB)
Das Interface sendet selbständig alle Änderungen der Schaltzustände mit jeweils einem Byte: Wenn ein Schalter geschlossen wird, wird ein Byte 128 + Nr gesendet, also z.B. 130 für den Eingang 2. Beim Öffnen des Kontakts wird entsprechend der Wert 64 + Nr, also z.B. 66 für Eingang 2 gesendet. Die potentialfreien Eingänge 1 bis 6 werden dabei als Eingänge 25 bis 30 gezählt.
Private Sub Timer1_Timer() Do d = READBYTE If d > 0 Then If (d > 128) And (d < 159) Then n = d - 128 - 1 Eingang(n) = 1 Check1(n).Value = 1 End If If (d > 64) And (d < 95) Then n = d - 64 - 1 Eingang(n) = 0 Check1(n).Value = 0 End If End If Loop Until d = -1 End Sub
Beim Starten eines Programms könnten bereits einige Kontakte geschlossen sein, sodass keine Meldung gesendet wird. Für diesen Fall gibt es die direkten Abfragekommandos 32, 33 und 34, die jeweils acht Eingänge direkt abfragen. Mit dem Kommando 25 können entsprechend die sechs potenzialfreien Eingänge gelesen werden.
Private Sub Allelesen() SENDBYTE 32 d = READBYTE If d = -1 Then d = 0 b = 1 For n = 0 To 7 Eingang(n) = (d And b) / b b = b * 2 Next n SENDBYTE 33 d = READBYTE If d = -1 Then d = 0 b = 1 For n = 0 To 7 Eingang(n + 8) = (d And b) / b b = b * 2 Next n SENDBYTE 34 d = READBYTE If d = -1 Then d = 0 b = 1 For n = 0 To 7 Eingang(n + 16) = (d And b) / b b = b * 2 Next n SENDBYTE 35 d = READBYTE If d = -1 Then d = 0 b = 1 For n = 0 To 5 Eingang(n + 24) = (d And b) / b b = b * 2 Next n For n = 0 To 29 Check1(n).Value = Eingang(n) Next n End Sub
Das RD30 besitzt einen Erweiterungsanschluss für das Relais-Interface.
Ein PC-Programm kann daher zugleich Eingänge abfragen und Relais schalten.
Beide Geräte verwenden die gleiche Baudrate aber unterschiedliche
Kommandos. Das folgende Beispielprogramm steuert acht Relais über
zugewiesene Eingänge.
RD30_Relais.zip (42 KB)
Private Sub Timer1_Timer() Do d = READBYTE If d > 0 Then If (d > 128) And (d < 159) Then n = d - 128 - 1 Eingang(n) = 1 Check1(n).Value = 1 End If If (d > 64) And (d < 95) Then n = d - 64 - 1 Eingang(n) = 0 Check1(n).Value = 0 End If End If Loop Until d = -1 'Relais-Steuerung b = 1 RelaisMuster = 0 For n = 0 To 7 Steuereingang = Val(Text1(n).Text) - 1 If Steuereingang > (-1) Then If Eingang(Steuereingang) = 1 Then RelaisMuster = RelaisMuster + b End If End If b = b * 2 Next n If RelaisMuster <> RelaisMusterAlt Then SENDBYTE 27 SENDBYTE 1 SENDBYTE 64 SENDBYTE RelaisMuster SENDBYTE 0 End If RelaisMusterAlt = RelaisMuster End Sub
Zurück zur Startseite der MB-News
Zurück zur Startseite AK-Modul-Bus