Immer noch gibt es einige Freaks, die privat noch mit BASIC (Beginners All purpose Symbolic Instruction Code) programmieren. Diese haben den Vorteil, alles, also auch das Handling der kompletten Modellbahn, selbst in die Hand zu nehmen.
Im Prinzip kann jeder Rechner, der eine serielle Schnittstelle besitzt, die Märklin 6050 oder 6051 ansprechen. Da es faktisch unmöglich ist, alle Codes und Befehle auswendig zu kennen, möchte ich auf diesem Wege einige Tipps "loswerden".
Beginnen wir mit der Schnittstelle selbst:
Bei Märklin heißt dieses Gerät 6050 oder 6051, und ist die Verbindung zwischen dem Rechner und der 6021 / 80f, also den Fahrpulten, angeschlossen auf der rechten Seite der Geräte.
Damit die Bahn die gegebenen Befehle "versteht", bedarf es eines Protokolls, das sowohl der Sender, als auch in Gegenrichtung der Empfänger kennen.
Baudrate: 2400 bit/s (die Anzahl der Datenbits je Sekunde, die übermittelt werden können)
Startbits: 1 (daran erkennt der Empfänger, dass ein Datenwort übermittelt wird)
Stopbits: 2 (daran wird das Ende des Datenwortes erkannt)
Datenbits: 8
Paritätsüberprüfung: keine ( Fehlerkorrektur)
Mit Basic würde der erste Befehl an die Schnittstelle zur Initialisierung so aussehen:
OPEN "COM1: 2400,N,8,2,CS10000,DS" AS #1
(BASIC- Programmierer verstehen so ein Kauderwelsch tatsächlich…)
CTS wird also 10 Sekunden lang überprüft, Aus- und Eingabekanal der seriellen Schnittstelle wäre dann Nummer 1.
Damit "kennt" jetzt die Rechnerschnittstelle, WAS sie mit den Befehlen, WIE, machen soll.
Der nächste Befehl wäre dann ein Reset an das Interface 6050/51 wie folgt:
PRINT #1, CHR$(97);
Übrigens: 93 und 97 nacheinander gesendet stellt den letzten bekannten Betriebszustand der Anlage wieder her, der vor dem Ausschalten der Anlage vorhanden war.
Wichtig ist, dass das Semikolon am Ende eines Befehles nicht fehlen darf, da ansonsten ein Zeilenumbruch (Zeichen 13) gesendet wird, der natürlich in der Anlage nichts zu suchen hat.
Damit sich überhaupt etwas „bewegt“, muss natürlich die GO – Taste der 6021 gedrückt werden oder über das Programm der Code 96 gesendet werden:
PRINT #1, CHR$(96);
Um nun Weichenbefehle über das Gleis zu erteilen, bedarf es jeweils zwei Datenwörter, die sich wie folgt zusammensetzen:
1. ein Informationszeichen =34 (Weiche rund oder Signal =rot)
2. ein Adresszeichen, z.B. 22 (Weiche 22) und das Semikolon
Für „gerade oder grün“ wird 33 gesendet mit anschließender Adresse (und Semikolon)
Da wir nicht wie bei Binärsignalen mit NULL anfangen zu zählen, trägt der erste Magnetartikel die Adresse 1 und der letzte die Adresse 0 (anstelle 256)
Beispiel: Weiche 120 soll auf gerade gestellt werden:
PRINT #1,CHR$(33)+CHR$(120);
Nun soll das Signal für die Weichen aber nicht „ewig“ stehen bleiben, denn die Endabschaltung könnte mal versagen und anschließend die Weiche in die ewigen Jagdgründe schicken. Daher folgt nun, nach einer Pause (GOSUB – Befehl) von ca. ½ Sekunde, der Code 32, der den Ausgang wieder abschaltet. Bei Signalen natürlich nicht))
Ich glaube, das Prinzip ist jetzt klar.
Kommen wir zur Steuerung der Lok´s:
Auch hier bedarf es wieder zweier Datenwörter, die aber erst „ausgerechnet“ werden müssen.
Hier setzt sich die Information aus der Fahrinformation und der Lokadresse zusammen.
0 bedeutet: die Lok bleibt stehen
1 bis 14 bedeuten de Fahrstufen 1 bis 14
15 bedeutet UMSCHALTEN
0 = Lokfunktion aus
16= Lokfunktion ein
Beispiel:
Eine Lok mit der Adresse 78 soll mit Fahrstufe 10 und eingeschalteter Funktion fahren:
Info: 10 + 16 = 26
Adresse: 78
PRINT #1, CHR$(26) + CHR$(78);
Verstanden ? OK !
Aber auch die Sonderfunktionen können über das Programm gesteuert werden:
1 mal F1 + 2 mal F2 + 4 mal F3 + 8 mal F4 + 64
Eingeschaltet: 1
Ausgeschaltet: 0
Beispiel gleiche LOK aber Funktionen 2 und 3 ein:
Info: 1 mal 0 + 2 mal 1 + 4 mal 1 + 8 mal 0 + 64 ergibt 70
PRINT #1, CHR$(70) + CHR$(78);
Was jetzt noch fehlt, ist die Rückmeldung der Gleisbesetztmelder. Auch das ist natürlich über die gleiche Schnittstelle möglich:
Das Wort berechnet sich für den Einlesevorgang wie folgt:
CHR$() = 192 + Nummer des Rückmeldemoduls.
Wenn also Informationen vom 6. Rückmeldemoduls eingelesen werden soll, so muss man das Zeichen (192 + 6= 198) übermittelt werden:
PRINT #1, CHR$(198);
DO
LOOP UNTIL LOF(1) = 512
Wenn nun der Wert “zurückkommt”, so zeigt er rechnerisch die Stellung der Rückmeldekontakte an:
Man muss nur immer durch 2 teilen können und erfährt auf diese Weise, welche Kontakte belegt sind und welche frei:
Beispiel:
1. Wert, der empfangen wurde ist 245
245 : 2 = 122 Rest 1: Kontakt 1 = belegt
122 : 2 = 61 Rest 0: Kontakt 2 = frei
61 : 2 = 30 Rest 1: Kontakt 3 = belegt
30 : 2 = 15 Rest 0: Kontakt 4 frei
15 : 2 = 7 Rest 1: Kontakt 5 belegt
7 : 2 = 3 Rest 1: Kontakt 6 belegt
3 : 2 = 1 Rest 1: Kontakt 7 belegt
1 : 2 = 0 Rest 1: Kontakt 8 belegt
2. Wert, der empfangen wurde ist 24
24 : 2 = 12 Rest 0: Kontakt 9 = frei
12 : 2 = 6 Rest 0: Kontakt 10 frei
6 : 2 = 3 Rest 0: Kontakt 11 frei
3 : 2 = 1 Rest 1: Kontakt 12 belegt
1 : 2 = 0 Rest 1: Kontakt 13 belegt
0 : 2 = 0 Rest 0: Kontakt 14 frei
0 : 2 = 0 Rest 0: Kontakt 15 frei
0 : 2 = 0 Rest 0: Kontakt 16 frei
Mit den Angaben dürfte es den BASIC – Programmierern möglich sein, sein eigenes Programm zur Steuerung der MOBA zu schreiben.
Aber auch für die reinen Nutzer sind die Erläuterungen interessant, da sie nun „verstehen“, was in Ihrer Interfacebox so abläuft, wenn über ein herkömmliches Programm die Anlage bedient wird.
Gruß und fleißiges Programmieren
Charly


LinkBack URL
About LinkBacks
))



Zitieren
Lesezeichen