Events der Intellibox mit VB abfangen
Events der Intellibox mit VB abfangen
Hallo,
ich will in meiner eignen Bahnsteuerung (VB 6), die Events der Intellibox abfangen.
Hat hier jemand Erfahrung und kann mir evtl. Quellcode schicken ? Ich versuche hier schon sehr lange voranzukommen, aber leider bisher ohne Erfolg, auch Uhlenbrock konnte mir hier bisher nicht helfen, das Programm was ich von Ihnen geschickt bekommen habe (QBasic) ist zwar sehr nett, die Umsetzung in VB funktioniert aber nicht so wie ich es mir vorstelle.
Für Eure Hilfe danke ich im voraus.
ich will in meiner eignen Bahnsteuerung (VB 6), die Events der Intellibox abfangen.
Hat hier jemand Erfahrung und kann mir evtl. Quellcode schicken ? Ich versuche hier schon sehr lange voranzukommen, aber leider bisher ohne Erfolg, auch Uhlenbrock konnte mir hier bisher nicht helfen, das Programm was ich von Ihnen geschickt bekommen habe (QBasic) ist zwar sehr nett, die Umsetzung in VB funktioniert aber nicht so wie ich es mir vorstelle.
Für Eure Hilfe danke ich im voraus.
@michael:
was meinst du eigentlich genau mit events?
ich habe als linux-user leider fast keine ahnung von vb. falls sich mit vb jedoch netzwerkverbindungen aufbauen lassen( sockets ), ließe sich da auch was mit dem srcp-projekt machen. man würde dann halt einen fertigen(aus dem internet heruntergeladenen) srcp-server an der intellibox laufen lassen, und diesen über die eigene software ansteuern.
hier gibts nen srcp-server für windows:
http://www.reukauff.de/TrackONE/
infos zu srcp unter:
http://www.der-moba.de/Digital/
was meinst du eigentlich genau mit events?
ich habe als linux-user leider fast keine ahnung von vb. falls sich mit vb jedoch netzwerkverbindungen aufbauen lassen( sockets ), ließe sich da auch was mit dem srcp-projekt machen. man würde dann halt einen fertigen(aus dem internet heruntergeladenen) srcp-server an der intellibox laufen lassen, und diesen über die eigene software ansteuern.
hier gibts nen srcp-server für windows:
http://www.reukauff.de/TrackONE/
infos zu srcp unter:
http://www.der-moba.de/Digital/
Hallo Bifi,
die Intellibox erzeugt, sogenannte Events, wenn z.B. ein Kurzschluß auf der Anlage ist oder wenn irgendetwas nicht so läuft, wie es "normal" ist. Da ich die Rückmeldungen der s88 über die IB laufen lasse, bekomme ich manchmal, bei o.g. Problemen unsinnige Daten gesendet, die dafür sorgen, dass mein Programm unsinn ausgibt.
Mein Problem ist, dass ich die Events nicht richtig eingelesen bekomme bzw. nicht richtig ausgewertet bekomme. Mein Wunsch wäre jetzt, wenn jemand eine Ahnung von diesen "Events" hat und Erfahrungen gesammelt hat, könnte er mir evtl. helfen.
Danke für die Info !
Gruß
Michi
die Intellibox erzeugt, sogenannte Events, wenn z.B. ein Kurzschluß auf der Anlage ist oder wenn irgendetwas nicht so läuft, wie es "normal" ist. Da ich die Rückmeldungen der s88 über die IB laufen lasse, bekomme ich manchmal, bei o.g. Problemen unsinnige Daten gesendet, die dafür sorgen, dass mein Programm unsinn ausgibt.
Mein Problem ist, dass ich die Events nicht richtig eingelesen bekomme bzw. nicht richtig ausgewertet bekomme. Mein Wunsch wäre jetzt, wenn jemand eine Ahnung von diesen "Events" hat und Erfahrungen gesammelt hat, könnte er mir evtl. helfen.
Danke für die Info !
Gruß
Michi
Hallo Michael,
da ich keine IB besitze kann ich Dir nur allgemeine Tips geben ...
Soweit ich informiert bin, schließt man die IB per serieller Schnittstelle an den PC an.
Microsoft Visual Basic 6.0 bietet ab der Professional Version ein ActiveX mit welchem
man, auf sehr einfache Weise, die serielle Schnittstelle bedienen kann. Dieses ActiveX musst
du über den Menüpunkt Project->Components->Microsoft Comm Control 6.0 (Englisches VB) einfügen.
Wenn Du das ActiveX auf deiner Form platziert hast, kannst Du mit F1 die Hilfe öffnen.
Du solltest dann sofort auf einfache Sourcecodebeispiele treffen ....
Falls Du Dich für die Variante mit dem SRCP-Server entscheidest, kannst Du das Microsoft
Winsock Control 6.0 verwenden. Mit diesem Control kannst Du einfache Socketverbindungen (TCP und UDP)
herstellen. Auch bei diesem Control findest Du gute Sourcecodebeispiele in der MSDN.
Beide Controls verwende ich in meinem SRCP-Client TRAINer!
http://members.aon.at/pkeintze/html/at/ ... enbahn.htm
Ich hoffe ich konnte Dir zu mindestens ein wenig weiterhelfen.
MfG POB
da ich keine IB besitze kann ich Dir nur allgemeine Tips geben ...
Soweit ich informiert bin, schließt man die IB per serieller Schnittstelle an den PC an.
Microsoft Visual Basic 6.0 bietet ab der Professional Version ein ActiveX mit welchem
man, auf sehr einfache Weise, die serielle Schnittstelle bedienen kann. Dieses ActiveX musst
du über den Menüpunkt Project->Components->Microsoft Comm Control 6.0 (Englisches VB) einfügen.
Wenn Du das ActiveX auf deiner Form platziert hast, kannst Du mit F1 die Hilfe öffnen.
Du solltest dann sofort auf einfache Sourcecodebeispiele treffen ....
Falls Du Dich für die Variante mit dem SRCP-Server entscheidest, kannst Du das Microsoft
Winsock Control 6.0 verwenden. Mit diesem Control kannst Du einfache Socketverbindungen (TCP und UDP)
herstellen. Auch bei diesem Control findest Du gute Sourcecodebeispiele in der MSDN.
Beide Controls verwende ich in meinem SRCP-Client TRAINer!
http://members.aon.at/pkeintze/html/at/ ... enbahn.htm
Ich hoffe ich konnte Dir zu mindestens ein wenig weiterhelfen.
MfG POB
Hallo Michael,
wenn ich Deinen Beitrag richtig verstehe, dann sendet die IB bei einem auftretenden Fehler während des laufenden Betriebs ein Datenbyte an den Rechner.
Geschieht dies parallel zur Timerabfrage der S88 selbständig oder muss dieses Byte abgerufen werden? Sind damit die Fehlermeldungen gemeint, die im Kapitel 11 auf Seite 61 beschrieben werden?
Ich habe sowohl die IB als auch das Interface der Fa. Märklin und steuere zur Zeit nur das Märklin-Interface an. Die CU von Märklin kann solche Fehlermeldungen nicht über das Interface weiterleiten.
Wenn die „Events“, wie Du sie nennst, sich auf die o.a. Fehlermeldungen beziehen, dann stell ich einfach mal folgende Theorie auf:
Das Abfragen der S88 erfolgt timergesteuert innerhalb einer Sekunde. Wenn nun ein Fehler auftritt, z.B. ein Kurzschluss, dann würde die IB erst ein Signal über die Datenleitung senden und dann auf „Nothalt“ schalten. Dein Programm sendet aber weiterhin Abfragen an die IB zur Auswertung der S88. Diese können nun von der IB nicht mehr verarbeitet werden. Kann hier vielleicht der Knackpunkt für die dann ankommenden unsinnigen Daten liegen?
Könntest Du mir vielleicht den QBasic –Quellcode zukommen lassen?
Da man ja nicht immer veraltete Betriebssysteme entsorgen soll, habe ich noch einen Satz
DOS 5.0 & WIN3.1 Installationsdisketten in der Schublade liegen. Zu diesem Betriebssystem
gehört auch der QBasic-Interpreter. Vielleicht kommen wir so weiter.
Ich habe meine ersten „Gehversuche“ im Programmieren von Modellbahnsteuerungen mit dem guten alten Powerbasic durchgeführt. Als Grundlage dienten mir dabei Demoprogramme, geschrieben in QBasic, die dem Märklin-Interface beilagen. Diese Demos habe ich dann nach PowerBasic portiert und auch später diese Programme von PowerBasic nach VB6 „umgebastelt“.
Wie war das doch gleich mit dem blinden Huhn und dem Schnaps, äääh Korn?
Schaun mer mal.
Viele Grüße
Bernd
wenn ich Deinen Beitrag richtig verstehe, dann sendet die IB bei einem auftretenden Fehler während des laufenden Betriebs ein Datenbyte an den Rechner.
Geschieht dies parallel zur Timerabfrage der S88 selbständig oder muss dieses Byte abgerufen werden? Sind damit die Fehlermeldungen gemeint, die im Kapitel 11 auf Seite 61 beschrieben werden?
Ich habe sowohl die IB als auch das Interface der Fa. Märklin und steuere zur Zeit nur das Märklin-Interface an. Die CU von Märklin kann solche Fehlermeldungen nicht über das Interface weiterleiten.
Wenn die „Events“, wie Du sie nennst, sich auf die o.a. Fehlermeldungen beziehen, dann stell ich einfach mal folgende Theorie auf:
Das Abfragen der S88 erfolgt timergesteuert innerhalb einer Sekunde. Wenn nun ein Fehler auftritt, z.B. ein Kurzschluss, dann würde die IB erst ein Signal über die Datenleitung senden und dann auf „Nothalt“ schalten. Dein Programm sendet aber weiterhin Abfragen an die IB zur Auswertung der S88. Diese können nun von der IB nicht mehr verarbeitet werden. Kann hier vielleicht der Knackpunkt für die dann ankommenden unsinnigen Daten liegen?
Könntest Du mir vielleicht den QBasic –Quellcode zukommen lassen?
Da man ja nicht immer veraltete Betriebssysteme entsorgen soll, habe ich noch einen Satz
DOS 5.0 & WIN3.1 Installationsdisketten in der Schublade liegen. Zu diesem Betriebssystem
gehört auch der QBasic-Interpreter. Vielleicht kommen wir so weiter.
Ich habe meine ersten „Gehversuche“ im Programmieren von Modellbahnsteuerungen mit dem guten alten Powerbasic durchgeführt. Als Grundlage dienten mir dabei Demoprogramme, geschrieben in QBasic, die dem Märklin-Interface beilagen. Diese Demos habe ich dann nach PowerBasic portiert und auch später diese Programme von PowerBasic nach VB6 „umgebastelt“.
Wie war das doch gleich mit dem blinden Huhn und dem Schnaps, äääh Korn?
Schaun mer mal.
Viele Grüße
Bernd
Deine Theorie entspricht genau der Realität, so interpretiere ich auch meinen Fehler, aber leider hab ich es noch nicht hinbekommen, dass zu umgehen. Ich schicke Dir nach Ostern gerne mal die Demo-Programme zu und vielleicht hast Du es ja schnell gelöst.
Danke für Deine Hilfe und schöne Ostern
Michael
Danke für Deine Hilfe und schöne Ostern
Michael
Deine Theorie entspricht genau der Realität, so interpretiere ich auch meinen Fehler, aber leider hab ich es noch nicht hinbekommen, dass zu umgehen. Ich schicke Dir nach Ostern gerne mal die Demo-Programme zu und vielleicht hast Du es ja schnell gelöst.
Danke für Deine Hilfe und schöne Ostern
Michael
Danke für Deine Hilfe und schöne Ostern
Michael
Das Abschalten des erweiterten Befehlssatzes löst das Problem nicht:
Wenn man seine eigene Steuerung erstellen kann, dann will man auch alle Möglichkeiten der Programmierung ausnutzen. Ergo beißt man sich an diesem Problem fest und will es lösen. Manchmal ist dann so, dass du fast an der Lösung dran bist, aber eben nur fast und du hast den Ehrgeiz, dieses Problem vollständig zu lösen.
Programmierer-Ergeiz würde ich es nennen.
Bernie-Bärchen
Wenn man seine eigene Steuerung erstellen kann, dann will man auch alle Möglichkeiten der Programmierung ausnutzen. Ergo beißt man sich an diesem Problem fest und will es lösen. Manchmal ist dann so, dass du fast an der Lösung dran bist, aber eben nur fast und du hast den Ehrgeiz, dieses Problem vollständig zu lösen.
Programmierer-Ergeiz würde ich es nennen.
Bernie-Bärchen
@Michael
Es gibt auf der Seite von Uhlenbrock eine Dokumentation zum erweiterten Befehlssatz der Intellibox. Den kann man auch abschalten, dann sendet die Intellibox nur noch die Events vom S88. Ist aber eigentlich langweilig, denn so Events wie Nothalt oder Kurzschluss sollte ein gutes Programm auch berücksichtigen. Gerade wenn man ein Programm mit Automatik schreibt, sind solche Events unverzichtbar.
Auf der Seite gibt es zusätzlich auch ein Beispielprogramm in Basic in dem die Eventbehandlung gut zu erkennen ist: http://www.uhlenbrock.de/3/0/2/0/ICD689 ... d/P50X.zip. Wenn du die Eventunterscheidung aus dem Beispielprogramm einfach in deine Abfrage der S88-Events mit einbaust, dann dürften die störenden Events eigentlich keine Probleme mehr bereiten.
Ciao
Martin, leider keine Intellibox zum ausprobieren habend...
Es gibt auf der Seite von Uhlenbrock eine Dokumentation zum erweiterten Befehlssatz der Intellibox. Den kann man auch abschalten, dann sendet die Intellibox nur noch die Events vom S88. Ist aber eigentlich langweilig, denn so Events wie Nothalt oder Kurzschluss sollte ein gutes Programm auch berücksichtigen. Gerade wenn man ein Programm mit Automatik schreibt, sind solche Events unverzichtbar.
Auf der Seite gibt es zusätzlich auch ein Beispielprogramm in Basic in dem die Eventbehandlung gut zu erkennen ist: http://www.uhlenbrock.de/3/0/2/0/ICD689 ... d/P50X.zip. Wenn du die Eventunterscheidung aus dem Beispielprogramm einfach in deine Abfrage der S88-Events mit einbaust, dann dürften die störenden Events eigentlich keine Probleme mehr bereiten.
Ciao
Martin, leider keine Intellibox zum ausprobieren habend...
Um die Events auslesen zu können, wird die IB als "Random-Datei" geöffnet und mit den entsprechenden Befehlen ausgelesen.
Um nun timergesteuert diese Prozedur hinzubekommen, müßte ein Timer regelmäßig die Daten aus der "Datei" auslesen. Damit habe ich, zumindest im Moment, so meine Probleme zumal zeitgleich ja auch die Rückmelder ausgewertet müssen.
Bernie-Bärchen
Um nun timergesteuert diese Prozedur hinzubekommen, müßte ein Timer regelmäßig die Daten aus der "Datei" auslesen. Damit habe ich, zumindest im Moment, so meine Probleme zumal zeitgleich ja auch die Rückmelder ausgewertet müssen.
Bernie-Bärchen
Eine Sprache, drei Dialekte.
Ich bin jetzt dabei die IB im Dialekt "PowerBasic" anzusteuern, da hier die Syntax der Befehle viel näher an QBasic liegt als an VB6.
Das Öffnen als Random-Datei ist ja nun nicht das Problem, das richtige Umsetzen des ausgelesenen "Datensatzes" in Verbindung mit der timergesteuerten Abfrage und Schaltbefehlen ist, noch, kritisch.
Kann es sein, dass das Problem nur dann auftritt, wenn die IB mit CHR-Befehlen versorgt wird?
Das Ansteuern von Befehlen im DCC-Modus ist mir noch nicht erschlossen, ich vermute daher einen Zusammenhang zwischen diesen beiden unterschiedlichen Varianten der Befehlsabgabe.
In diesem Zusammenhang ist mir aufgefallen, dass die IB trotz "Nothalt" weiterhin die Rückmelder abfragen kann. Vielleicht liegt darin ein Teil des Problems.
Bis demnächst
Bernd
Ich bin jetzt dabei die IB im Dialekt "PowerBasic" anzusteuern, da hier die Syntax der Befehle viel näher an QBasic liegt als an VB6.
Das Öffnen als Random-Datei ist ja nun nicht das Problem, das richtige Umsetzen des ausgelesenen "Datensatzes" in Verbindung mit der timergesteuerten Abfrage und Schaltbefehlen ist, noch, kritisch.
Kann es sein, dass das Problem nur dann auftritt, wenn die IB mit CHR-Befehlen versorgt wird?
Das Ansteuern von Befehlen im DCC-Modus ist mir noch nicht erschlossen, ich vermute daher einen Zusammenhang zwischen diesen beiden unterschiedlichen Varianten der Befehlsabgabe.
In diesem Zusammenhang ist mir aufgefallen, dass die IB trotz "Nothalt" weiterhin die Rückmelder abfragen kann. Vielleicht liegt darin ein Teil des Problems.
Bis demnächst
Bernd