Das digitale Interface RD30

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

RD30 und Relais-Interface


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