• Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe durch. Du musst dich vermutlich registrieren!, bevor du Beiträge verfassen kannst. Klicke oben auf 'Anmelden oder registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.

PC-Programm selbst erstellen

wd1407

Bahnlehrling
Hallo Selectrix-Freunde,

wer schreibt eigene Programme auf seinem PC (für den Hausgebrauch) zur Modellbahnsteuerung und benutzt intelligente Besetztmelder (von MÜT)?

Freue mich auf einen regen Gedankenaustausch.

Mit besten SX-Grüßen

wd1407
 
S

sbbre460

AW: PC-Programm selbst erstellen

Hallo,

Ich bin seit 1995 begeisterter Selectrixler, 1995 mit Trix CC2000 begonnen und jetzt seit 2009 mit 2 Stärz ZS1 Zentralen an der Anlage und einer Zentrale ZS1 in der Wohnung und für mobile Einsätze.

Anfänglich, 1995, habe ich auch ans selber Programmieren gedacht, aber relativ schnell verworfen und heute finde ich den Aufwand für das selber Programmieren viel zu hoch, besonders auch bei der genügend grossen Auswahl von Steuersoftware für Selectrix (z.B. iTrain (das ich aktuell einsetze), TrainController 7 Gold (das auch noch installiert ist), Windigipet (wenn man gerne die "Musik" der rotierenden Kopierschutz-CD hört, weshalb ich es nicht mehr einsetze), Railware (das 2006 nur 28 SX-Fahrstufen kannte), usw.

Ja, mich interessiert heute das selber Programmieren nicht mehr und weil bisher noch niemand reagiert hat, bin ich vermutlich mit dieser Meinung auch nicht allein.

Freundliche Grüsse

Gian
 

wd1407

Bahnlehrling
AW: PC-Programm selbst erstellen

Hallo Gian,
große Freude über eine Reaktion nach langer Zeit.

Bekanntlich ist bei MoBahnern der Weg das Ziel. So auch beim Programmieren. Nach jedem gelösten Teilproblem steigt meine Stimmung. Deshalb erwog ich nie den Kauf eines Programmes.
Ich bin noch für 3 Jahre in meinen handwerklichen Aktivitäten gebremst. Deshalb nutze ich die Zeit, meine schon lange schwelenden Ideen für die Sicherung des Betriebsablaufes zu verwirklichen.

Meine MÜT-Zentrale MC2004, die ein Interface besitzt, verbinde ich mit dem PC und kann alle Adressen lesen und beschreiben.
Damit kein Schnickschnack im Hintergrund ausgeführt wird und mir die Reaktionszeiten verlängert, verzichte ich auf Windows und benutze echtes DOS oder DOS im VM zusammen mit Turbopascal, das bekanntlich superschnelle Progamme erzeugt.
Der Mangel an Schönheit bei DOS spielt keine Rolle, da das Programm im Hintergrund arbeiten soll und i. a. bei Normalbetrieb der MoBa keiner Eingabe bedarf.
Der prinzipielle Betriebsablauf sieht so aus, daß das Personal Weichen und Signale bedient und die Geschwindigkeiten der Loks wählt; das Programm soll dann eigentlich nur für die Sicherheit sorgen. Dazu gehören:
- Blockbetrieb
- Weichensicherung (Flankenfaht)
- Verhinderung von Fehlern des Personals wie:
. Weichenumschaltung bei besetzter Weiche
. Schalten eines Signals auf HALT, wenn der Abstand der Lok bis zum Signal zu gering für eine Notbremsung ist

Nebenbei fällt dann natürlich auch das weiche Anfahren und Bremsen genau vor dem Signal entsprechend der gewählten Massesimulation mit ab.

Um das zu realisieren sind einige Hürden zu nehmen, z. B. ein Taktsignal von 1 ms zu erzeugen (bekanntlich kann DOS nur 55ms-Takt) und die Kontrolle über die Position jedes Zuges.
Eines der größten Probleme war die Idendifizierung der Lokadresse. Das löste sich prinzipiell als der intelligente Besetztmelder auf den Mark kam. Nur halten sich die Hersteller ziemlich bedeckt bzgl. des Handlings der iBM. Durch viele Versuche habe ich so recht und schlecht deren Arbeitsweise erforscht und mich deshalb an das Forum gewandt um Gleichgesinnte zu finden.

Die geringe Reaktion zeigt, daß Du Recht hast.

Trotzdem mache ich weiter; es macht Freude und schult den Verstand.

Danke nochmal für Deine Antwort.

Beste Grüße

Wolf-Dieter
Man sollte das Unmögliche versuchen um das Möglichste zu erreichen
 

teddych

Teammitglied
Innendienst
AW: PC-Programm selbst erstellen

Hallo Wolf-Dieter

Turbopascal ist eine verhältnismässig langsame Programmiersprache (C/C++ wäre deutlich schneller). Aber für dich ist das quasi nicht relevant. Relevant ist, dass du den zeitintensiven grafischen Schnickschnack weglässt und darauf kommt es an. Das ist grundsätzlich auch mit Linux oder OS X zu erreichen. Nur nicht mit Windows.

Nun, der Weg ist das Ziel und dein Ziel ist eine DOS-Applikation. Ev. kannst du aber in der portablen und quelloffenen C++-Applikation Rocrail abschauen, wie andere das gelöst haben (setzt natürlich voraus, dass du C++ lesen kannst). Zumindest wird die MC2004 von Rocrail unterstützt.

Ich hoffe, ich konnte dir damit weiterhelfen.

Gruss
Teddy
__________________________
Technisches
 

wd1407

Bahnlehrling
AW: PC-Programm selbst erstellen

Hallo Teddy,

danke für die Hinweise.

Meine Entscheidung für TP waren pragmatischer Natur. Zum einen hatte ich in den 80er Jahren beruflich viel mit TP programmiert und gute Erfahrungen gemacht, zum anderen konnte ich die zugehörige Software über die Jahrzehnte retten und hatte einen leichten Start ohne große Anfangsmühen.

Ein kleines Problem drückt mich noch.
MC2004 könnte 19200 als Busgeschwindigkeit. Ich kriege aber nur 9600 hin.
An der serielle Schnittstelle kann auf den Bits 7 - 5 die Baudrate zwischen 110 Bd (=000) und 9600 Bd (=111) festgelegt werden. Wie aber geht 19200?
Kann jemand helfen?

Beste Grüße an alle

Wolf-Dieter
Wage das Unmögliche, dann schaffst du das Mögliste
 

teddych

Teammitglied
Innendienst
AW: PC-Programm selbst erstellen

Hallo Wolf-Dieter

TP hat auch seine Vorteil, vor allem dass der Compiler schon viele Fehler zwangsvermeidet.

Meine TP-Zeit ist aber schon Jahrzehnte her, deshalb kann ich dir nicht direkt weiterhelfen. Im Linux-Kernel habe ich aber folgende Definitionen gefunden, wobei bei Bxxx das xxx die Baudrate ist:

/* c_cflag bit meaning */
#define CBAUD 0010017
#define B0 0000000 /* hang up */
#define B50 0000001
#define B75 0000002
#define B110 0000003
#define B134 0000004
#define B150 0000005
#define B200 0000006
#define B300 0000007
#define B600 0000010
#define B1200 0000011
#define B1800 0000012
#define B2400 0000013
#define B4800 0000014
#define B9600 0000015
#define B19200 0000016
#define B38400 0000017
#define EXTA B19200
#define EXTB B38400
#define CSIZE 0000060
#define CS5 0000000
#define CS6 0000020
#define CS7 0000040
#define CS8 0000060
#define CSTOPB 0000100
#define CREAD 0000200
#define PARENB 0000400
#define PARODD 0001000
#define HUPCL 0002000
#define CLOCAL 0004000
#define CBAUDEX 0010000
#define BOTHER 0010000 /* non standard rate */
#define B57600 0010001
#define B115200 0010002
#define B230400 0010003
#define B460800 0010004
#define B500000 0010005
#define B576000 0010006
#define B921600 0010007
#define B1000000 0010010
#define B1152000 0010011
#define B1500000 0010012
#define B2000000 0010013
#define B2500000 0010014
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
#define CIBAUD 002003600000 /* input baud rate */
#define CMSPAR 010000000000 /* mark or space (stick) parity */
#define CRTSCTS 020000000000 /* flow control */
#define IBSHIFT 8 /* Shift from CBAUD to CIBAUD */

Ich interpretiere daraus, dass hier fünf Bit für die Baudeinstellung verwendet werden. Ob das aber direkt in ein RS232-Register geschrieben wird entzieht sich meiner Kenntnis.

Gruss
Teddy
__________________________
Meine Spielanlage
 

wd1407

Bahnlehrling
AW: PC-Programm selbst erstellen

Hallo Teddy,

danke für die Information. Das muß ich erst mal verarbeiten. Ich melde mich in ein paar Tagen wieder.

Beste Grüße

Wolf-Dieter
Wage ruhig das Unmögliche, dann schaffst du das Mögliche
 

wd1407

Bahnlehrling
AW: PC-Programm selbst erstellen

Hallo Teddy,

der UART (SIO-Baustein) kann über INT14h, AH=00h mit einem Byte in AL initialisiert werden:
Bit 0 und 1: Wortlänge 7 oder 8 Bit
Bit 2 : Anzahl STOP-Bits 1 oder 2
Bit 3 und 4: Parität keine, ungerade und gerade
Bit 5 - 7 : Baudrate zwischen 110 und 9600

So funktioniert es in meinem Programm.

Mittlerweile habe ich mich belesen und herausgefunden, daß das nur eine verkürzte Form der Initialisierung ist.
Der UART hat 11 Register für die Initialisierung, unter anderem
DLL (Baudratenregister LSB, xF8h) und
DLM (Baudratenregister MSB, xF9h),
über die die Baudrate zwischen 50 und 115200 eingestellt werden kann.

Nun muß ich nur noch versuchen, das in meinem Programm unterzubringen.

Leider kann ich die Definition aus dem Linux-Kernel in diesem Sinne nicht deuten. Trotzdem danke nochmal.

Beste Grüße

Wolf-Dieter
Man sollte das Unmögliche versuchen um das Möglichste zu erreichen.
 

teddych

Teammitglied
Innendienst
AW: PC-Programm selbst erstellen

Hallo Wolf-Dieter

DOS als solches unterstützt lediglich den UART Baustein 8250 bzw. 16450 aus den 70er-Jahren. Dieser hatte lediglich 1-Byte-Buffer und max. 9600bps.

Für alles was schneller gehen sollte wurde der 16550A mit 16-Byte-Buffer und mindestens 115.2kbps eingesetzt (so ab dem 286er glaub ich).

DOS ist diesbezüglich aber in den 70er-Jahren stehen geblieben und unterstützt die 16550A und ff. nicht, bzw. du musst die Initialisierung des UART selbst machen. Inwieweit dich DOS dann bei der Kommunikation noch unterstützen kann weiss ich nicht. Ich würde erwarten, dass du selbst für das Timing verantwortlich bist und du die Daten direkt via I/O an den UART senden musst.

Viel Spass beim Lesen des Datenblatt des 16550D und Tüfteln.

Gruss
Teddy
__________________________
Kontaktgleis im Selbstbau
 

wd1407

Bahnlehrling
AW: PC-Programm selbst erstellen

Hallo Teddy,

danke für die Hinweise.

So werde ich es tun. UART initialisieren und einen Ringpuffer aufbauen.

Wird schon werden.

Beste Grüße

Wolf-Dieter
Ich versuche das Unmögliche, dann schaffe ich alles Mögliche.
 

teddych

Teammitglied
Innendienst
AW: PC-Programm selbst erstellen

Hallo Wolf-Dieter

Jetzt habe ich noch eine ganz andere Idee:
Rocrail kann nach meinem Verständnis auch MÜT sprechen, ist jedenfalls in der Rocrail-MÜT-Doku so beschrieben. Dann solltest du die Kommunikation auch im SourceCode finden. Rocrail ist ja OpenSource.

Gruss
Teddy
__________________________
LED an Wechselstrom
 
Oben Unten