Ausgabe 24, März 1999

Programmierung:
Turbo-Relais
Ansteuerung des Relais-Interfaces unter Turbo Pascal

Seit das Relais-Interface in CompaS 22 vorgestellt wurde, haben es zahlreiche Anwender in verschiedenen Programmiersprachen verwendet. Für manchen ist jedoch der erste Anfang nicht leicht. Hier soll deshalb ein Beispielprogramm in Turbo Pascal gezeigt werden.

Grundlagen

Für die Ansteuerung in Turbo Pascal benötigt man zunächst einen Zugang (Basisprozeduren) zur seriellen Schnittstelle. Hier wurde von einem Programmbeispiel zum CompuLAB [1] ausgegangen. Zu beachten ist allerdings, daß das Relais-Interface mit 9600 Baud arbeitet. Die Baudrate und alle anderen Parameter werden in der INIT-Prozedur festgelegt. Zusätzlich wird nur noch die SENDE-Prozedur benötigt, weil das Interface keinerlei Rückmeldung benötigt.

Ansteuerung

Das Programm RELAIS.PAS steuert ein Interface über die Schnittstelle COM2 an. Die Geräteadresse nach der Auslieferung des Geräts ist 1. Das Programm verwendet die Prozedur AUSGABE zur Realisierung eines einfachen Lauflichts. Außerdem wird über PROGRAMMSTOP sichergestellt, daß kein autonomes Programm im Interface aktiv ist.

Alle speziellen Ansteuerprozeduren zum Relais-Interface senden fünf Bytes an das Gerät. Als erstes wird ein ESC-Byte (27) gesendet. Dann folgt die Geräte-Adresse. Das dritte Byte ist ein Interface-spezipifisches Kommando. Alle Kommandos wurden bereits in CompaS 22 vorgestellt und befinden sich auch in der Hilfedatei zum Relaisinterface. Die beiden letzten Bytes sind notwendige Parameter oder Füllbytes (0).

Das Listing zeigt die Grundprozeduren und ein Lauflicht-Beispiel

Program Relais;

uses DOS, CRT;

const COM1: Integer=$03F8;

 COM2: Integer=$02F8;

 COM3: Integer=$03E8;

 COM4: Integer=$02E8;

var BA: Integer;







procedure Init (COM: Integer);

var i, Dummy: Byte;

begin

 BA:= COM;

 Port[BA+3]:=128;

 Port[BA+0]:=12; {9600 Baud}

 Port[BA+1]:=0;

 Port[BA+3]:=7; {8 Bit, n-Parity, 2 Stopbits}

 Port[BA+1]:=0; {keine Interrupts}

 Port[BA+4]:=0; {DTR=0, RTS=0}

 for i:= 1 to 3 do Dummy:= Port[BA]; {UART leeren}

end;







procedure Sende (Zeichen:Byte);

begin

 while (Port[BA+5] AND 32)=0 do; {bereit?}

 Port[BA]:= Zeichen;

end;







procedure Adresse_zuweisen (Adr: Byte);

begin

 Sende (27);

 Sende (255); {Senden an alle}

 Sende (72); {Kommando: ID-Adresse Zuweisen}

 Sende (Adr);

 Sende (0);

end;







procedure Ausgabe (Adr, Dat: Byte);

begin

 Sende (27);

 Sende (Adr);

 Sende (64); {Kommando: Direktausgabe}

 Sende (Dat);

 Sende (0);

end;







procedure Programmiere (Adr, EEadr, Dat: Byte);

begin

 Sende (27);

 Sende (Adr);

 Sende (66); {Kommando: EEPROM programmieren}

 Sende (EEadr);

 Sende (Dat);

end;







procedure Programmstart_Endlos (Adr: Byte);

begin

 Sende (27);

 Sende (Adr);

 Sende (68); {Kommando: Start, endlos}

 Sende (0);

 Sende (0);

end;







procedure Programmstop (Adr: Byte);

begin

 Sende (27);

 Sende (Adr);

 Sende (70); {Kommando: Stop}

 Sende (0);

 Sende (0);

end;







procedure Programmstart_Einfach (Adr: Byte);

begin

 Sende (27);

 Sende (Adr);

 Sende (74); {Kommando: Start, einfach}

 Sende (0);

 Sende (0);

end;







procedure Lauflicht;

begin

 Ausgabe (1,1); Delay (250);

 Ausgabe (1,2); Delay (250);

 Ausgabe (1,4); Delay (250);

 Ausgabe (1,8); Delay (250);

 Ausgabe (1,16); Delay (250);

 Ausgabe (1,32); Delay (250);

 Ausgabe (1,64); Delay (250);

 Ausgabe (1,128); Delay (250);

end;







begin;

 Init(COM2);

 Programmstop (1);

 writeln ('Relais-Interface, ID-Adresse 1');

 writeln ('Lauflicht-Test');

 repeat

 Lauflicht

 until KeyPressed;

end.

Steuerprogramm

Ein zweites Beispiel (RELAISST.PAS) demonstriert die Verwendung eines autonomen Steuerprogramms im Relais-Interface. Die erforderlichen Daten werden in das interne EEPROM des Interfaces übertragen. Der prinzipielle Aufbau des internen Programms wird ebenfalls in der Hilfe-Datei erläutert. Jeder Programmschritt wird mit einem Bitmuster und einer Zeit festgelegt. Zusätzlich sind Einstellungen zur verwendeten Zeiteinheit und eine Endemarkierung für die Endlosschleife zu berücksichtigen. Jedes einzelne Byte wird mit der Prozedur PROGRAMMIERE übertragen.

Das Beispiel verwendet zwei Programmschritte mit den Bitmustern 01010101 und 10101010 mit Dauern von jeweils 0,5 s. Die Programmschritte werden in einer Endlosschleife ausgeführt. Das Programm bleibt auch nach dem Trennen der Verbindung zum PC aktiv und startet mit jedem neuen Einschalten des Relais-Interface wieder neu, bis es mit PROGRAMMSTOP abgebrochen wird. Ein laufendes Programm wird übrigens von Direktausgaben nicht abgebrochen, sondern führt diese zusätzlich aus.

Das Listing zeigt die Programmierung eines autonomen Programms.

procedure ProgrammTest;

begin

 ProgrammStop (1);

 Programmiere (1,2,0); {Zeitbasis Highbyte}

 Programmiere (1,3,8); {Zeitbasis Lowbyte, 1/2 s}

 Programmiere (1,4,85); {Bitmuster 1}

 Programmiere (1,5,1); {1 Zeiteinheit}

 Programmiere (1,6,170); {Bitmuster 2}

 Programmiere (1,7,1); {1 Zeiteinheit}

 Programmiere (1,8,170); {Bitmuster 1}

 Programmiere (1,9,0); {Ende der Schleife}

end;



begin;

 Init(COM2);

 writeln ('Relais-Interface, ID-Adresse 1');

 writeln ('TestProgramm starten');

 ProgrammTest;

 Programmstart_endlos(1);

end.

Download

Die Programmbeispiele zeigen den grundlegenden Umgang mit dem Relais-Interface. Die Umsetzung in weitere Programmiersprachen dürfte damit relativ einfach sein. Die Beispielprogramme können als Quelltext und als ausführbare Programme geladen werden (7 KB).

Relais.zip


Zurück zum CompaS-Archiv
Zurück zur Startseite AK-Modul-Bus