32 Relais-Ausgänge steuern

Das jährliche Weihnachtsfest von Kattenvenne findet in der großen Scheune von Bauer Hagemann statt. Dieses Jahr soll eine besondere Beleuchtung mit über 30 Lampen zum Einsatz kommen. Alles muss vollautomatisch gesteuert werden. Da bietet sich das Relais-Interface an. Man kann z.B. vier Interfaces zusammen verwenden und hat dann bis zu 32 Ausgänge. Nur gab es bisher keine geeignete Software für diesen Zweck.

Die Lösung bringt das kleine VB-Programm Relais32.exe. Es erlaubt sowohl eine direkte Steuerung mit der Maus als auch eine Programmierung. Es wird vorausgesetzt, dass bis zu vier Relais-Interfaces mit den Adressen 1, 2, 3 und 4 angeschlossen sind. Es funktioniert aber auch, wenn nur zwei oder drei Interfaces verwendet werden.

Download Relais32.exe mit Quelltext (Relais32.zip, 42 KB)

Die Programmierung erfolgt durch die Datei Relais32.txt, die mit einem beliebigen Texteditor bearbeitet werden kann. Jeweils eine Zeile enthält die gewünschten Bitmuster, eine zweite die Zeit in Millisekunden. Die maximal erlaubte Zeit ist hier etwa 60000 ms, also eine Minute. Am Ende der Datei steht endweder "Stop" für einen einfachen Durchlauf oder "Endlos" für Dauerbetrieb.

11111111111100001000000110000000
500 ms
01111111000011111100001101000000
200 ms
00111111001111001110011100100000
500 ms
00011111000110001111111100010000
200 ms
00001111000000001110011100001000
500 ms
00000111000000001110101100000100
200 ms
00000011000000001110101100000010
500 ms
00000001000000001111111100000001
200 ms
00000000000000001111111100000000
500 ms
Stop  'Endlos  

Hier ein Auszug aus dem Quelltext: Im Timer2 wird die Datei Relais32.txt gelesen und ausgeführt. Es wird jeweils eine Zeile gelesen, in Blöcke von 8 Bits zerteilt und an die einzelnen Interfaces gesendet.

Sub Relaisout(Adr, Dat)
  SENDBYTE 27
  SENDBYTE Adr
  SENDBYTE 64
  SENDBYTE Dat
  SENDBYTE 0
End Sub
Private Sub Timer2_Timer()
 Input #1, zeile
 Kommando = Left(zeile, 4)
 If Kommando = "Stop" Then
   Close #1
   Timer2.Enabled = False
   Command1.Enabled = True
 End If
 If Kommando = "Endl" Then
   Close #1
   Open "Relais32.txt" For Input As #1
   Input #1, zeile
 End If
  
 Kommando = Left(zeile, 1)
 If (Kommando = "0") Or (Kommando = "1") Then
  n = Len(zeile)
  If n < 32 Then zeile = zeile + "                                 "
  Dat = 0
  d = Mid(zeile, 1, 1)
  If d = "1" Then Dat = Dat + 128
  d = Mid(zeile, 2, 1)
  If d = "1" Then Dat = Dat + 64
  d = Mid(zeile, 3, 1)
  If d = "1" Then Dat = Dat + 32
  d = Mid(zeile, 4, 1)
  If d = "1" Then Dat = Dat + 16
  d = Mid(zeile, 5, 1)
  If d = "1" Then Dat = Dat + 8
  d = Mid(zeile, 6, 1)
  If d = "1" Then Dat = Dat + 4
  d = Mid(zeile, 7, 1)
  If d = "1" Then Dat = Dat + 2
  d = Mid(zeile, 8, 1)
  If d = "1" Then Dat = Dat + 1
  Relaisout 1, Dat                         'Adr = 1
  Dat = 0
  d = Mid(zeile, 9, 1)
  If d = "1" Then Dat = Dat + 128
  d = Mid(zeile, 10, 1)
  If d = "1" Then Dat = Dat + 64
  d = Mid(zeile, 11, 1)
  If d = "1" Then Dat = Dat + 32
  d = Mid(zeile, 12, 1)
  If d = "1" Then Dat = Dat + 16
  d = Mid(zeile, 13, 1)
  If d = "1" Then Dat = Dat + 8
  d = Mid(zeile, 14, 1)
  If d = "1" Then Dat = Dat + 4
  d = Mid(zeile, 15, 1)
  If d = "1" Then Dat = Dat + 2
  d = Mid(zeile, 16, 1)
  If d = "1" Then Dat = Dat + 1
  Relaisout 2, Dat                          'Adr = 2
  Dat = 0
  d = Mid(zeile, 17, 1)
  If d = "1" Then Dat = Dat + 128
  d = Mid(zeile, 18, 1)
  If d = "1" Then Dat = Dat + 64
  d = Mid(zeile, 19, 1)
  If d = "1" Then Dat = Dat + 32
  d = Mid(zeile, 20, 1)
  If d = "1" Then Dat = Dat + 16
  d = Mid(zeile, 21, 1)
  If d = "1" Then Dat = Dat + 8
  d = Mid(zeile, 22, 1)
  If d = "1" Then Dat = Dat + 4
  d = Mid(zeile, 23, 1)
  If d = "1" Then Dat = Dat + 2
  d = Mid(zeile, 24, 1)
  If d = "1" Then Dat = Dat + 1
  Relaisout 3, Dat                           'Adr = 3
  Dat = 0
  d = Mid(zeile, 25, 1)
  If d = "1" Then Dat = Dat + 128
  d = Mid(zeile, 26, 1)
  If d = "1" Then Dat = Dat + 64
  d = Mid(zeile, 27, 1)
  If d = "1" Then Dat = Dat + 32
  d = Mid(zeile, 28, 1)
  If d = "1" Then Dat = Dat + 16
  d = Mid(zeile, 29, 1)
  If d = "1" Then Dat = Dat + 8
  d = Mid(zeile, 30, 1)
  If d = "1" Then Dat = Dat + 4
  d = Mid(zeile, 31, 1)
  If d = "1" Then Dat = Dat + 2
  d = Mid(zeile, 32, 1)
  If d = "1" Then Dat = Dat + 1
  Relaisout 4, Dat                          'Adr = 4
  Input #1, zeile
  Zeit = Val(zeile)
  Timer2.Interval = Zeit
 End If
End Sub


 


Zurück zur Startseite der MB-News
Zurück zur Startseite AK-Modul-Bus