SRCP-Grundlagen: Unterschied zwischen den Versionen

aus DerMoba, der Wissensdatenbank für Modellbahner
Wechseln zu: Navigation, Suche
(Kategorien + CRCF-Kapitel ergänzt)
K (Allgemeines)
 
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= SRCP-Spezifikation =
+
= Allgemeines =
Die aktuelle SRCP-Spezifikation hat die Version 0.8.3 ([http://srcpd.sourceforge.net/srcp/srcp-083.html HTML], [http://srcpd.sourceforge.net/srcp/srcp.pdf PDF]). SRCP 0.8.x ist inkompatibel zu früheren SRCP-Versionen. Bereits vorhandene Software für SRCP 0.7.x wird im Laufe der Zeit auf SRCP 0.8.x umgestellt.
+
Bei SRCP (Simple Railroad Command Protocol) handelt es sich um eine Sprachdefinition, mit der Computerprogramme zur Modellbahnsteuerung in einem Client-Server-System Informationen untereinander austauschen können. Das Protokoll selbst ist in der Anwendung vergleichbar mit anderen Internetprotokollen wie SMTP, HTTP, FTP etc., widmet sich aber speziell den Anforderungen der Steuerung einer digitalen Modellbahn.
 +
 
 +
Die Entwicklung des Protokolls erfolgt über die Newsgroup '''de.rec.modelle.bahn'''. Änderungsvorschläge können dort vorgetragen und deren Vor- und Nachteile abwägend diskutiert werden. Zweckmäßgerweise werden Beiträge zum Thema SRCP in der Betreffzeile durch ein einführendes [SRCP] kenntlich gemacht. Wird eine Übereinkunft zur Änderung erzielt, fließt diese in die Spezifikation ein. Für komplexere und kontrovers diskutierte Änderungen kann der Artikel [[SRCP-Erweiterungen]] genutzt werden, um Aussagen zusammenzutragen und diese überschaubar darzustellen.
 +
 
 +
Eine Auflistung der bislang verfügbaren SRCP-Programme befindet sich im Artikel [[Digitalprojekt]].
 +
 
 +
= Spezifikation =
 +
Die aktuell gültige SRCP-Spezifikation trägt die Versionsnummer 0.8.3 ([http://srcpd.sourceforge.net/srcp/srcp-083.html HTML], [http://srcpd.sourceforge.net/srcp/srcp.pdf PDF]).
 +
 
 +
Die nächste Version ist unter der Nummer [http://srcpd.sourceforge.net/srcp/srcp-084.html 0.8.4] derzeit in Bearbeitung.
 +
 
 +
Beim Übergang von Version 0.7.3 auf 0.8.0 gab es größere Änderungen im Protokoll, bei der eine Abwärtskompatibilität aufgegeben werden mußte. Programme, die nur eine der beiden Protokollvarianten implementieren, können sich daher nicht mit Programmen der jeweils anderen Variante verständigen. Bereits vorhandene Software für SRCP 0.7.x wird daher im Laufe der Zeit auf SRCP 0.8.x umgestellt.
  
 
== Historische Spezifikationsversionen ==
 
== Historische Spezifikationsversionen ==
Zeile 10: Zeile 21:
 
* [[SRCP - Simple Railroad Command Protocol 0.7.3]]
 
* [[SRCP - Simple Railroad Command Protocol 0.7.3]]
 
* [[SRCP - Simple Railroad Command Protocol 0.8.0]]
 
* [[SRCP - Simple Railroad Command Protocol 0.8.0]]
 +
* [http://srcpd.sourceforge.net/srcp/srcp-082.html SRCP - Simple Railroad Command Protocol 0.8.2]
  
 
= Designprinzipien =
 
= Designprinzipien =
Zeile 19: Zeile 31:
  
 
Der Server stellt seine Dienste im Netzwerk bereit. Zur Verbindungsaufnahme sind sein
 
Der Server stellt seine Dienste im Netzwerk bereit. Zur Verbindungsaufnahme sind sein
Hostname (ersatzweise die IP Adresse) und der Netzwerkport (z.B. 4303) bei jedem
+
Hostname (ersatzweise die IP-Adresse) und der Netzwerkport (z.B. 4303) bei jedem
 
Client anzugeben. Der Client kann diese Angaben über andere Dienste anfordern (Bonjour,
 
Client anzugeben. Der Client kann diese Angaben über andere Dienste anfordern (Bonjour,
 
Zeroconf, Active Directory).  
 
Zeroconf, Active Directory).  
Zeile 25: Zeile 37:
 
[[Bild:Srcp-connect-command.png|framed|Einrichtung einer Kommandositzung zwischen SRCP-Client und -Server nach Protokollversion 0.8. [], ---: optional, 1-8: Handshake-Phase, 9: Kommandoaustausch]]
 
[[Bild:Srcp-connect-command.png|framed|Einrichtung einer Kommandositzung zwischen SRCP-Client und -Server nach Protokollversion 0.8. [], ---: optional, 1-8: Handshake-Phase, 9: Kommandoaustausch]]
 
Nach Verbindungsaufnahme wird vom Server eine zunächst anonyme Sitzung (Session) gestartet. Diese wird »Handshake« genannt. In ihr kann der Client verschiedene Betriebsparameter einstellen.
 
Nach Verbindungsaufnahme wird vom Server eine zunächst anonyme Sitzung (Session) gestartet. Diese wird »Handshake« genannt. In ihr kann der Client verschiedene Betriebsparameter einstellen.
Derzeit sind zwei unterschiedliche Betriebsmodi definiert: COMMAND und INFO. Weitere Parameter
+
Derzeit sind zwei unterschiedliche Betriebsmodi definiert:
betreffen z.B. die SRCP-Version, die benutzt werden soll. Da die Wahlmöglichkeit für unterschiedliche Protokollversionen erst ab Version 0.8 des SRCP enthalten ist, bieten frühere, aber noch immer benutzte Versionen des SRCP (0.7), diese Möglichkeit nicht.
+
  
Mit dem Befehl GO wird die Handshake-Phase beendet und die noch anonyme Session erhält eine
+
* COMMAND und
Session-ID. Gleichzeitig wird die Verbindung auf den gewählten Betriebsmodus eingestellt. Die Session-ID ist ein numerischer Wert, der die Sitzung identifiziert.  
+
* INFO
 +
 
 +
Weitere Parameter betreffen z.B. die SRCP-Version, die benutzt werden soll. Da diese Wahlmöglichkeit für unterschiedliche Protokollversionen erst mit Version 0.8 eingeführt wurde, bieten frühere, aber noch immer benutzte Versionen (0.7), diese Möglichkeit nicht.
 +
 
 +
Mit dem Befehl GO wird die Handshake-Phase beendet und die noch anonyme Sitzung erhält eine
 +
Identifikationsnummer (Session-ID). Gleichzeitig wird die Verbindung auf den gewählten Betriebsmodus eingestellt. Die Session-ID ist ein numerischer Wert, der die Sitzung identifiziert.  
  
 
Im Betriebsmodus INFO wird ausschließlich vom Server zum Client kommuniziert. Es werden
 
Im Betriebsmodus INFO wird ausschließlich vom Server zum Client kommuniziert. Es werden
 
alle im Protokoll als INFO gekennzeichneten Angaben (Code 100 bis 199) übertragen. Alle
 
alle im Protokoll als INFO gekennzeichneten Angaben (Code 100 bis 199) übertragen. Alle
Angaben markieren Veränderungen. Der Client beendet die INFO-Session, indem er die
+
Angaben markieren Veränderungen. Der Client beendet die INFO-Sitzung, indem er die
Verbindung kappt (es besteht keine Möglichkeit zur Kommandoübermittlung an den Server).
+
Verbindung kappt; es besteht für diesen Modus keine Möglichkeit zur Kommandoübermittlung an den Server.
  
 
Im Betriebsmodus COMMAND wartet der Server auf Kommandos vom Client. Sobald ein Kommando
 
Im Betriebsmodus COMMAND wartet der Server auf Kommandos vom Client. Sobald ein Kommando
Zeile 47: Zeile 63:
  
 
Eine Gerätegruppe markiert Geräte mit gleichen Parametern. Dies können reale Geräte
 
Eine Gerätegruppe markiert Geräte mit gleichen Parametern. Dies können reale Geräte
wie Decoder sein (Jeder hat eine Adresse, einen Motor mit unterschiedlichen Fahrstufen
+
wie Decoder sein (jeder hat eine Adresse, einen Motor mit unterschiedlichen Fahrstufen
 
und 0 oder mehr Funktionsausgängen) oder nur logische Geräte wie das TIME-Device sein,
 
und 0 oder mehr Funktionsausgängen) oder nur logische Geräte wie das TIME-Device sein,
 
die nicht unbedingt ein Hardwarependant haben müssen.
 
die nicht unbedingt ein Hardwarependant haben müssen.
Zeile 64: Zeile 80:
 
=== Kommandoworte ===
 
=== Kommandoworte ===
 
Die Kommandoworte wurden zugunsten einer größeren Gerätegruppenzahl klein und abstrakt gehalten. Jeden beeinflußbaren Parameter kann man via GET/SET bearbeiten. Es wurde allgemein für einfacher gehalten, neue Gerätegruppen mit den definierten Kommandos zu kombinieren als für neue Geräte auch neue Kommandos einzuführen.
 
Die Kommandoworte wurden zugunsten einer größeren Gerätegruppenzahl klein und abstrakt gehalten. Jeden beeinflußbaren Parameter kann man via GET/SET bearbeiten. Es wurde allgemein für einfacher gehalten, neue Gerätegruppen mit den definierten Kommandos zu kombinieren als für neue Geräte auch neue Kommandos einzuführen.
 +
 +
= Kommerzielle Anwendung =
 +
Natürlich ist es wünschenswert, daß sich SRCP auch über die Grenzen des '''DER_MOBA''' Digitalprojekts verbreitet. Deshalb ist auch der Einsatz von SRCP in kommerziellen Produkten erlaubt. Allerdings sind folgende Bedingungen einzuhalten:
 +
 +
# Sowohl in der Software, wie auch in der zugehörigen Dokumentation wird auf die SRCP-Entwicklergruppe und diese Internetseite verwiesen.
 +
# Es findet keine eigenmächtige Erweiterung von SRCP statt. Stattdessen werden Erweiterungen mit der SRCP-Entwicklergruppe diskutiert und offiziell in SRCP integriert bzw. verworfen.
 +
# Bei kommerziellem Erfolg des jeweiligen Produktes würden wir es gerne sehen, wenn sich die Entwickler über eine Spende zur Unterstützung von '''DER_MOBA''' Gedanken machen ;-).
  
 
= Common Railroad Configuration Files (CRCF) =
 
= Common Railroad Configuration Files (CRCF) =
  
Ein Entwurf für ein Dateinformat, das eine zentrale Serverkonfiguration beschreibt, stammt von Edbert van Eimeren und ist zur Diskusssion in der Newsgroup '''de.rec.modelle.bahn''' freigegeben. Die weitere Entwicklung der Spezifikation und eine Ideensammlung zu dessen Nutzung unter SRCP findet im Abschnitt [[SRCP-Erweiterungen]] statt.
+
Ein Entwurf für ein Dateinformat, das eine zentrale SRCP-Server-Konfiguration beschreibt, stammt von Edbert van Eimeren und ist zur Diskusssion in der Newsgroup '''de.rec.modelle.bahn''' freigegeben. Die weitere Entwicklung der Spezifikation und eine Ideensammlung zu dessen Nutzung unter SRCP findet im Abschnitt [[SRCP-Erweiterungen]] statt.
  
 
* Entwurf [[CRCF - Common Railroad Configuration Files 0.2.0 | CRCF 0.2.0 ]] / [[CRCF 0.2.0 (Muster) | CRCF Beispiel]]
 
* Entwurf [[CRCF - Common Railroad Configuration Files 0.2.0 | CRCF 0.2.0 ]] / [[CRCF 0.2.0 (Muster) | CRCF Beispiel]]

Aktuelle Version vom 5. Oktober 2007, 12:29 Uhr

Allgemeines

Bei SRCP (Simple Railroad Command Protocol) handelt es sich um eine Sprachdefinition, mit der Computerprogramme zur Modellbahnsteuerung in einem Client-Server-System Informationen untereinander austauschen können. Das Protokoll selbst ist in der Anwendung vergleichbar mit anderen Internetprotokollen wie SMTP, HTTP, FTP etc., widmet sich aber speziell den Anforderungen der Steuerung einer digitalen Modellbahn.

Die Entwicklung des Protokolls erfolgt über die Newsgroup de.rec.modelle.bahn. Änderungsvorschläge können dort vorgetragen und deren Vor- und Nachteile abwägend diskutiert werden. Zweckmäßgerweise werden Beiträge zum Thema SRCP in der Betreffzeile durch ein einführendes [SRCP] kenntlich gemacht. Wird eine Übereinkunft zur Änderung erzielt, fließt diese in die Spezifikation ein. Für komplexere und kontrovers diskutierte Änderungen kann der Artikel SRCP-Erweiterungen genutzt werden, um Aussagen zusammenzutragen und diese überschaubar darzustellen.

Eine Auflistung der bislang verfügbaren SRCP-Programme befindet sich im Artikel Digitalprojekt.

Spezifikation

Die aktuell gültige SRCP-Spezifikation trägt die Versionsnummer 0.8.3 (HTML, PDF).

Die nächste Version ist unter der Nummer 0.8.4 derzeit in Bearbeitung.

Beim Übergang von Version 0.7.3 auf 0.8.0 gab es größere Änderungen im Protokoll, bei der eine Abwärtskompatibilität aufgegeben werden mußte. Programme, die nur eine der beiden Protokollvarianten implementieren, können sich daher nicht mit Programmen der jeweils anderen Variante verständigen. Bereits vorhandene Software für SRCP 0.7.x wird daher im Laufe der Zeit auf SRCP 0.8.x umgestellt.

Historische Spezifikationsversionen

Designprinzipien

SRCP benutzt zeilenorientierten Klartext. Der Text besteht aus Kommandos und Informationen. Kommandos werden vom Client an den Server übermittelt, Informationen vom Server an den Client. Jedes Kommando und jede Information besteht aus exakt einer Zeile. Es ist eine maximale Zeilenlänge definiert, um auch Programmieranfängern einfache Fehler wie Pufferüberläufe (Buffer Overflows) vermeiden zu helfen.

Der Server stellt seine Dienste im Netzwerk bereit. Zur Verbindungsaufnahme sind sein Hostname (ersatzweise die IP-Adresse) und der Netzwerkport (z.B. 4303) bei jedem Client anzugeben. Der Client kann diese Angaben über andere Dienste anfordern (Bonjour, Zeroconf, Active Directory).

Einrichtung einer Kommandositzung zwischen SRCP-Client und -Server nach Protokollversion 0.8. [], ---: optional, 1-8: Handshake-Phase, 9: Kommandoaustausch

Nach Verbindungsaufnahme wird vom Server eine zunächst anonyme Sitzung (Session) gestartet. Diese wird »Handshake« genannt. In ihr kann der Client verschiedene Betriebsparameter einstellen. Derzeit sind zwei unterschiedliche Betriebsmodi definiert:

  • COMMAND und
  • INFO

Weitere Parameter betreffen z.B. die SRCP-Version, die benutzt werden soll. Da diese Wahlmöglichkeit für unterschiedliche Protokollversionen erst mit Version 0.8 eingeführt wurde, bieten frühere, aber noch immer benutzte Versionen (0.7), diese Möglichkeit nicht.

Mit dem Befehl GO wird die Handshake-Phase beendet und die noch anonyme Sitzung erhält eine Identifikationsnummer (Session-ID). Gleichzeitig wird die Verbindung auf den gewählten Betriebsmodus eingestellt. Die Session-ID ist ein numerischer Wert, der die Sitzung identifiziert.

Im Betriebsmodus INFO wird ausschließlich vom Server zum Client kommuniziert. Es werden alle im Protokoll als INFO gekennzeichneten Angaben (Code 100 bis 199) übertragen. Alle Angaben markieren Veränderungen. Der Client beendet die INFO-Sitzung, indem er die Verbindung kappt; es besteht für diesen Modus keine Möglichkeit zur Kommandoübermittlung an den Server.

Im Betriebsmodus COMMAND wartet der Server auf Kommandos vom Client. Sobald ein Kommando eintrifft, wird es bearbeitet, eine Antwort generiert und diese an den Client gesendet. Die Antworten sind Bestätigungen dafür, dass das Kommando angenommen wurde, Fehlermeldungen oder Abfrageergebnisse.

Kommandos bestehen aus einem Kommandowort, einer Adressangabe und weiteren Parametern. Kommandoworte bestehen aus Verben, die eine Tätigkeit beschreiben: SET, GET, INIT, TERM usw. Adressangaben sind im allgemeinen dreiteilig: Ein Bus, eine Gerätegruppe und eine Adressangabe (Decoderadresse).

Eine Gerätegruppe markiert Geräte mit gleichen Parametern. Dies können reale Geräte wie Decoder sein (jeder hat eine Adresse, einen Motor mit unterschiedlichen Fahrstufen und 0 oder mehr Funktionsausgängen) oder nur logische Geräte wie das TIME-Device sein, die nicht unbedingt ein Hardwarependant haben müssen.

Ein Bus kennzeichnet einen Adressraum, über den verschiedene Geräte erreichbar sind. Im einfachsten Fall ist ein Bus eine Verbindung zwischen dem SRCP-Server und dem Computerinterface der Modellbahnanlage.

Gründe für das Design

Parameterlisten versus benamte Parameter

Die Diskussion wurde per Mehrheitsbeschluß entschieden. Eine technische Über- oder Unterlegenheit einer der beiden Varianten konnte nicht festgestellt werden. Allgemein wurde vermutet, dass benamte Parameter aufwendiger in der Umsetzung sind.

Kommandoworte

Die Kommandoworte wurden zugunsten einer größeren Gerätegruppenzahl klein und abstrakt gehalten. Jeden beeinflußbaren Parameter kann man via GET/SET bearbeiten. Es wurde allgemein für einfacher gehalten, neue Gerätegruppen mit den definierten Kommandos zu kombinieren als für neue Geräte auch neue Kommandos einzuführen.

Kommerzielle Anwendung

Natürlich ist es wünschenswert, daß sich SRCP auch über die Grenzen des DER_MOBA Digitalprojekts verbreitet. Deshalb ist auch der Einsatz von SRCP in kommerziellen Produkten erlaubt. Allerdings sind folgende Bedingungen einzuhalten:

  1. Sowohl in der Software, wie auch in der zugehörigen Dokumentation wird auf die SRCP-Entwicklergruppe und diese Internetseite verwiesen.
  2. Es findet keine eigenmächtige Erweiterung von SRCP statt. Stattdessen werden Erweiterungen mit der SRCP-Entwicklergruppe diskutiert und offiziell in SRCP integriert bzw. verworfen.
  3. Bei kommerziellem Erfolg des jeweiligen Produktes würden wir es gerne sehen, wenn sich die Entwickler über eine Spende zur Unterstützung von DER_MOBA Gedanken machen ;-).

Common Railroad Configuration Files (CRCF)

Ein Entwurf für ein Dateinformat, das eine zentrale SRCP-Server-Konfiguration beschreibt, stammt von Edbert van Eimeren und ist zur Diskusssion in der Newsgroup de.rec.modelle.bahn freigegeben. Die weitere Entwicklung der Spezifikation und eine Ideensammlung zu dessen Nutzung unter SRCP findet im Abschnitt SRCP-Erweiterungen statt.