RocRail bidibSlotserverAktionenInitialisierungAutomatikEinmessenxmlScriptraspberryRCPSRCPAlternativen
Pfad: mknetz/Eisenbahn/Digital/RocRail
Impressum
Autor: Klaus Merkert
Letzte Änderung dieser Seite: 11.07.2015 17:32:11 1451
Simple Railroad Control Protocol

Rocrail als SRCP-Server

Unter 'Rocrail-Eigenschaften' kann man im Tab 'Dienst' bei SRCP einen Haken bei 'Freigeben' machen. Beim nächsten Start des Rocrail-Servers läuft dann auch der SRCP-Server. Untenstehendes Telnet-Protocol dokumentiert die Handshake-Phase und das anschließende Stellen der Weiche mit der Adresse 0 und Port 1 (Rocrail-Notation) auf 'turnout' und 'straight'. Das Schließen der Telnet-Verbindung beendet die Session. Auffallend war, dass der Bus im SRCP-Kommando beliebig sein durfte. Vielleicht hängt das daran, dass ich in Rocrail eine virtuelle Zentrale eingestellt habe.

mk@x2:~$ telnet localhost 4303
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Rocrail 2.0r9063; SRCP 0.8.4; SRCPOTHER 0.8.3
set connectionmode srcp command
1436518738.101 202 OK CONNECTIONMODE
go
1436518744.310 200 OK GO 2
set 0 ga 0 0 1 -1
1436518790.671 200 OK
set 0 ga 0 1 1 -1
1436518811.711 200 OK

Das gleiche Beispiel auf der Python 3.4-Konsole:

>>> s = socket.socket()
>>> s.connect(("localhost",4303))
>>> print(str(s.recv(1024)),'ASCII')
b'Rocrail 2.0r9063; SRCP 0.8.4; SRCPOTHER 0.8.3\n' ASCII
>>> s.send(bytes('set connectionmode srcp command','ASCII'))
31
>>> print(str(s.recv(1024)),'ASCII')
b'1436628310.609 202 OK CONNECTIONMODE\n' ASCII
>>> s.send(bytes('go','ASCII'))
2
>>> print(str(s.recv(1024)),'ASCII')
b'1436628424.377 200 OK GO 2\n' ASCII
>>> s.send(bytes('set 0 ga 0 0 1 -1','ASCII'))
17
>>> print(str(s.recv(1024)),'ASCII')
b'1436628474.570 200 OK\n' ASCII
>>> s.send(bytes('set 0 ga 0 1 1 -1','ASCII'))
17
>>> print(str(s.recv(1024)),'ASCII')
b'1436628523.335 200 OK\n' ASCII
>>> s.close

Links