Schnittstelle für TVM

Hier werden Wünsche für zukünftige neue Funktionen der Software gesammelt.
Nachricht
Autor
Benutzeravatar
Gorgi [Vale]
Beiträge: 241
Registriert: 10.04.2019 20:22:10
Aktuelle Projekte: Am Bau bei der LN6 mitwirken.

Mdl Hcknhm, (Pausiert)
Strecke 4020 & 4080 Schwetzingen(Mannheim) bis Üst. Forst / Graben-Neudorf. (Pausiert)

Schnittstelle für TVM

#1 Beitrag von Gorgi [Vale] »

Nabend,
ich benötige bitte für Tests mit der selbstgeschriebenen TVM-Software folgende Punkte über das TCP-Protokoll wenn möglich:

Ereignisse die in der Strecke, selbst eingebaut werden müssten und daher benötigt werden:
Ereignisname | Wert1 | Wert 2
TVM 300 Signal | Gleis 1 oder 2 | Streckencode 0 oder 1
TVM 430 Signal | Gleis 1 oder 2 | Streckencode (8 mögliche Optionen von 0 bis 7)

TVM 300 BSP | BSP-code (93 mögliche Optionen von 0 bis 92) | Leer
TVM 430 BSP | BSP-code (93 mögliche Optionen von 0 bis 92) | Streckencode (8 mögliche Optionen von 0 bis 7)

Ergänzt:
TVM Geschwindigkeit (Ähnlich wie ETCS-Geschwindigkeit), auch in der Voraussicht ausgegeben.


Ergänzt 2:
TVM 300 BSP Verschub | Angabe in Metern hinter dem Ereignis
TVM 430 BSP Verschub | Angabe in Metern hinter dem Ereignis
Es muss immer "TVM 300 BSP" und "TVM 300 BSP Verschub" zusammen in einem Streckenelement verbaut sein, selbes gilt für "TVM 430 BSP" und "TVM 430 BSP Verschub".


Für die Übergabe im TCP am besten ein eigenes Sicherungssystem wie PZB oder LZB mit dem Namen TVM.
Dieses muss folgende Informationen beinhalten:
Die Ereignisse TVM 300 und TVM 430 müssen ebenso die Distanz bis zum Fahrzeug beinhalten und es müssen alle Signale die damit ausgerüstet sind, wo bereits die Fahrstraße zu diesen eingestellt ist, ausgegeben werden. Am besten das nächsten Signal zuerst und danach die weiter entfernten Signale. Ebenso muss die Distanz bis zum Zug vom jeweiligen Signal mit ausgegeben werden, auch die niedrigste Streckenhöchstgeschwindigkeit jeweils zwischen zwei Signalen, diese Geschwindigkeit soll steigen wenn das langsamste Element überfahren ist und nun schnellere steigen. Auch muss bei jedem Signal mit übergeben werden, wie hoch das Signal steht, also die Höhe des Signales vom Meer aus.

Die BSP sollen ebenso im voraus einlesbar sein, insbesondere für Funktionen wie Zugsicherungswechsel bei voller Geschwindigkeit.

TVM 300 gibt 300 km/h frei und TVM 430 gibt 320 km/h frei als jeweilige maximale Höchstgeschwindigkeit.

Das würde erstmal reichen, falls fragen offen sind, stehe ich zur Verfügung.
Es kann sein, das ich im Verlauf mit Änderungen komme.

Spezielle Ansteuerung von Hauptschalter senken und automatisch oder manuell einschalten und Zwangsbremsung wegen Überschreitung der Höchstgeschwindigkeit selbstlösend oder bis zum Stillstand können später folgen, als Übergabe nach Zusi.

Gruß
Gorgi
Zuletzt geändert von Gorgi [Vale] am 23.08.2024 01:41:12, insgesamt 4-mal geändert.

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33806
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: TCP Schnittstelle für TVM

#2 Beitrag von Carsten Hölscher »

Eine Schnittstelle für Zugsicherungssysteme würde ich aber eher als dll realisieren und dann so allgemeingültig, dass man alle möglichen Systeme dran anschließen kann.

Carsten

Benutzeravatar
Gorgi [Vale]
Beiträge: 241
Registriert: 10.04.2019 20:22:10
Aktuelle Projekte: Am Bau bei der LN6 mitwirken.

Mdl Hcknhm, (Pausiert)
Strecke 4020 & 4080 Schwetzingen(Mannheim) bis Üst. Forst / Graben-Neudorf. (Pausiert)

Re: TCP Schnittstelle für TVM

#3 Beitrag von Gorgi [Vale] »

Das mit der TCP Schnittstelle hatte ich mir gedacht, das ich damit testen kann, das ich das richtig programmiert habe und das es auch läuft bzw. verfeinere bis es ideal ist.
Es ist für mich die einfachste Möglichkeit es zu testen, da ich denke, dass die dll-Schnittstelle mehr Aufwand darstellen würde als einfach ein zusätzliches TCP-Protokoll. Ich denke auch dass der Programmieraufwand für ein TCP deutlich geringer ist als dll-Schnittstelle zum Testen.
Im Endeffekt hätte ich gedacht, das wenn alles läuft, das es möglicherweise in Hauptprogramm wandert oder so.

Weil manche Sachen bereiten mir Sorgen und ich weiß nicht wie es in echt gelöst wurde, hier einer der Punkte wo ich es nicht weiß, wie die Übergabe von TVM 430 oder TVM 300 zu ETCS 2 mit bis zu 320 km/h vonstatten geht, ebenso die umgekehrte Richtung ist mir nicht bekannt.
Die Übergabe von KVB zu TVM und umgedreht geht mit bis zu 220 km/h und ist mir bekannt vom Ablauf und den nötigen Programmschnitten. Übrigens die Sache mit den Übergaben mit ETCS 2 zu TVM 430 bei bis zu 320 km/h lassen sich erfolgreich durchgeführte Tests finden in offiziellen frei einsehbaren Dokumenten, aber ich habe keinerlei Testdetails dazu, vielleicht kann sich dazu jemand äußern wenn es bekannt ist wie es abläuft?

Gruß
Gorgi

Benutzeravatar
nonesense
Beiträge: 528
Registriert: 15.07.2006 12:50:10
Aktuelle Projekte: QDmi
Fahrpult Einheitsführerstand
Ludmilla
Wohnort: Köln
Kontaktdaten:

Re: TCP Schnittstelle für TVM

#4 Beitrag von nonesense »

Hallo Gorgi,

Gemeint ist, denke ich, dass du die TVM nicht als eigenständige Software schreiben solltest, sondern als DLL, die von Zusi geladen wird.

Ich würde dies so auch befürworten. Einen Abschnitt TVM müsste es im TCP auf jeden Fall geben. Nach deiner Idee, wäre im TCP das enthalten, was man braucht, um die TVM zu betreiben. Besser wäre es aber das im TCP zu haben, was man für die Visualisierung braucht. Wenn die TVM aber aber in einer externen Software läuft, hätte man auf die Anzeigen keinen Zugriff über das TCP.

Gruß
Jens

Benutzeravatar
Gorgi [Vale]
Beiträge: 241
Registriert: 10.04.2019 20:22:10
Aktuelle Projekte: Am Bau bei der LN6 mitwirken.

Mdl Hcknhm, (Pausiert)
Strecke 4020 & 4080 Schwetzingen(Mannheim) bis Üst. Forst / Graben-Neudorf. (Pausiert)

Re: TCP Schnittstelle für TVM

#5 Beitrag von Gorgi [Vale] »

Hallo nonesense,
ich verstehe es schon mit der dll. Ich gehe aber davon aus, dass der Zwischenschritt mit der TCP Carsten nur vielleicht max. 30 Minuten braucht, im Gegensatz zu einer dll wo ganz neu gemacht werden müsste.
Deswegen frage ich ja auch ob es mit dem TCP möglich ist als Zwischenschritt, damit ich es testen kann.
Später wenn es dann eine dll oder so gibt, kann man TCP in dem Bereich TVM umbauen so dass es nur für die Visualisierung ist.

Gruß
Gorgi


P.S.: Für den Levelwechsel von TVM zu KVB und umgedreht habe ich schon ein paar Ideen wie es ginge, müsste ich mir aber mal ansehen. Sollte aber auch einfach realisierbar sein.
Levelwechsel von TVM 300 zu TVM 430 und umgedreht habe ich ein Konzept wie es realisierbar ist.

Einzig die Levelwechsel TVM zu ETCS bereiten mir Unbehagen, es könnte so sein, das man eine TVM Geschwindigkeit als Übergabe definiert hat, also die für die Bremswegkurve. Je nach TVM oder ETCS Bremskurve gibt es eine definierte Geschwindigkeitsstufe. Wenn es so wäre, dann sollte es aber auch relativ einfach realisierbar sein, dazu bräuchte ich aber dann ggf. die Bremskurve des ETCS von der Geschwindigkeit an der Übergabestelle.

Benutzeravatar
Gorgi [Vale]
Beiträge: 241
Registriert: 10.04.2019 20:22:10
Aktuelle Projekte: Am Bau bei der LN6 mitwirken.

Mdl Hcknhm, (Pausiert)
Strecke 4020 & 4080 Schwetzingen(Mannheim) bis Üst. Forst / Graben-Neudorf. (Pausiert)

Re: TCP Schnittstelle für TVM

#6 Beitrag von Gorgi [Vale] »

Nabend,
mal ein aktueller Zwischenstand hierzu von mir:
Mittlerweile ist es deutlich fortgeschritten in Richtung dll von meiner Seite aus.
Es fehlen von der TVM 300 nur noch einzelne Feinheiten, ist aber an sich schon gut lauffähig.
Und läuft auch bei meinen Tests mit aktuell noch manuellen Signalabständen von der Zugspitze gut und ohne Probleme.
Es fehlen vereinzelt noch Spezialfunktionen der EPIs, aber die sollten noch lösbar sein.

Achso, es lässt bereits umsetzen, ob man sich auf der LGV Sud-Est oder der LGV Atlantique befindet. Die Besonderheit auf der LGV SE hat etwas mit der Vorwarnzeit zu tun.
Ebenso ist bereits umgesetzt, das wenn eine Strecke schneller als 300 km/h ist, so wie die Verlängerung der LGV A, wo auch ETCS N2 mit 320 km/h installiert ist, es unter TVM 300 trotzdem nur 300 frei gibt.
Ebenso die Besonderheit von Baumaßnahmen lässt sich bereits darstellen, das könnte für den ein oder anderen eine Überraschung sein.

Gruß
Gorgi

P.S.: Für die spezifischen Fragen kannst du mir am besten eine Mail schreiben.

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33806
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: TCP Schnittstelle für TVM

#7 Beitrag von Carsten Hölscher »

Wie genau funktioniert das in der Interaktion mit Zusi?

Carsten

Benutzeravatar
Gorgi [Vale]
Beiträge: 241
Registriert: 10.04.2019 20:22:10
Aktuelle Projekte: Am Bau bei der LN6 mitwirken.

Mdl Hcknhm, (Pausiert)
Strecke 4020 & 4080 Schwetzingen(Mannheim) bis Üst. Forst / Graben-Neudorf. (Pausiert)

Re: TCP Schnittstelle für TVM

#8 Beitrag von Gorgi [Vale] »

Carsten Hölscher hat geschrieben: 30.06.2024 20:00:59 Wie genau funktioniert das in der Interaktion mit Zusi?

Carsten
Nabend,
hier ist noch eine Rückmeldung von mir offen, ist etwas aus dem Blickfeld geraten bei mir der Beitrag.

Derzeit aktuell noch nichts aus Zusi, aber im Endeffekt erhält die dll die Daten später live von Zusi und gibt dann die Geschwindigkeitscodes zurück, mit denen der Tf arbeitet. Ebenso Zwangsbremsung und Co..
Ich kann gerne Skype oder Teamspeak oder sonstiges anbieten, um darüber mal genau zu sprechen, ansonsten kann ich einfach mal etwas aus meinem Code zeigen, also welche Daten ich annehme für die TVM 300. (Es könnten noch mehr Daten werden, wenn TVM 430, KVB oder ETCS Levelwechsel in der Ferne angekündigt wird.)

Code: Alles auswählen

// Signalgeschwindigkeit berechnen:
int signals[] = { 1000, 3500, 5000, 8000, 10000, 12000, 14000, 16000, 18000, 20000, 20500, 23000, 25000, 28000, 30000, 32000, 34000, 36000, 38000 }; // Beispiel-Signale mit Distanz (Von der Fahrzeugspitze zum Signal)
int signalsStreckenVmax[] = { 320, 320, 300, 300, 300, 300, 230, 300, 300, 300, 300, 270, 270, 270, 270, 270, 320, 320, 320 }; //Geschwindigkeit zwischen den jeweiligen Signalen, bzw. beim Ersten bis zum Zug.
int signalsvoie[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; //Gleisnummer am Signal
int signalsvoieplus[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; //Für die Besonderheit ob TVM 300 (0) oder TVM 300A (1) //Bei TVM300A wird das 300V nach (300V) erst 15 sek vor dem nächsten Block gezeigt.

//Boucles für Besonderheiten
int boucles[] = { 12, 3, 5, 4 }; //Code des Boucles Wert 1;
int bouclesDistance[] = { 3700, 4000, 5000, 37500 }; //Distanz
(Es sind nicht alle Werte vorhanden, wie Höhe der Signalposition, oder die aktuell Geschwindigkeit des Zuges.)
(Ich bin mir unsicher, aber ich denke es wäre bestimmt möglich auch die aktuelle Zusi-Sim-Zeit mit auszugeben, oder?)
Mir fällt grade noch ein, das ich manche Ereignisse vor einem Signal verknüpfen möchte, aber erst nach diesem in x Metern ausführen will wenn das Signal Halt zeigt, ist es denn möglich ein Element in eine Richtung zu verschieben, obwohl alle Wertfelder im 3D-Editor bereits mit anderen Werte belegt sind, oder bräuchte man da ein anderes neues Ereignis, direkt über diesem Ereignis und nur für dieses geltend, wo aber beide Werte (Einmal die Entfernung vom Zug ohne Berücksichtigung und einmal mit Berücksichtigung der veränderten Meter) in die dll mit übergeben werden?

Achso, bezüglich Uhrzeit, ich bin vielleicht nicht der einzige, aber wäre es denn bitte möglich die Zusi-Sim-Zeit im Fahrsimulator an 3D-Objekte in einem Modul zu verknüpfen?, ich Frankreich stehen an fast allen Bahnhöfen nämlich 6-stellige Digitaluhren für die Zugabfertigung.

Achso, wie läuft das aktuell in Zusi ab, das sich die PZB/LZB Systeme der unterschiedlichen Züge, die zeitgleich verkehren, nicht in die Haare kommen beim Berechnen?

Vielen Dank

Gruß
Gorgi

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33806
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: TCP Schnittstelle für TVM

#9 Beitrag von Carsten Hölscher »

Akso ich meinte, welche Schnittstellen zu Zusi du nutzt, irgendwie muss dein Programm ja mit Zusi sprechen.

Mehrere PZB/LZB/ ETCS stören sich in Zusi bisher nicht, da für jeden Zug die Instanz einer Klasse erzeugt wird, die dann ihren eigenen Speicher verwaltet.

Carsten

Benutzeravatar
Gorgi [Vale]
Beiträge: 241
Registriert: 10.04.2019 20:22:10
Aktuelle Projekte: Am Bau bei der LN6 mitwirken.

Mdl Hcknhm, (Pausiert)
Strecke 4020 & 4080 Schwetzingen(Mannheim) bis Üst. Forst / Graben-Neudorf. (Pausiert)

Re: TCP Schnittstelle für TVM

#10 Beitrag von Gorgi [Vale] »

Aktuell geht noch gar keine Schnittstelle,
insofern habe ich mir das noch offen gelassen wie Zusi nachher die Daten an die dll rausgibt und wieder nimmt und werde darauf dann den Code der Schnittstelle in meiner dll von meiner Seite darauf anpassen.

Okay, vielen Dank, ist gut zu wissen.

Gruß
Gorgi

Benutzeravatar
nonesense
Beiträge: 528
Registriert: 15.07.2006 12:50:10
Aktuelle Projekte: QDmi
Fahrpult Einheitsführerstand
Ludmilla
Wohnort: Köln
Kontaktdaten:

Re: TCP Schnittstelle für TVM

#11 Beitrag von nonesense »

Hat (noch) nichts mit dem Thema zu tun, frage es aber dennoch hier: Gibt es irghendwo eine Spezifikation oder Beispiele, wie TVM im ETCS DMI visualisiert wird?

Gruß
Jens

Benutzeravatar
Jens Haupert
Beiträge: 5001
Registriert: 23.03.2004 14:44:34
Aktuelle Projekte: http://www.zusidisplay.de
Wohnort: Berlin
Kontaktdaten:

Re: TCP Schnittstelle für TVM

#12 Beitrag von Jens Haupert »

Hallo Jens,

schau mal z.B. hier: https://www.youtube.com/watch?v=wB3sX2qIGKs. Bei Youtube finden sich noch weitere Videos, bei denen man das DMI sehen kann.

Grüße
Jens

Benutzeravatar
Maurice S.
Beiträge: 120
Registriert: 17.03.2020 00:31:50

Re: TCP Schnittstelle für TVM

#13 Beitrag von Maurice S. »

nonesense hat geschrieben: 08.07.2024 20:22:09 Hat (noch) nichts mit dem Thema zu tun, frage es aber dennoch hier: Gibt es irghendwo eine Spezifikation oder Beispiele, wie TVM im ETCS DMI visualisiert wird?
https://www.securite-ferroviaire.fr/sit ... v2-mac.pdf

Hier findest du einige Spezifikationen der Display, falls es das ist was du suchst.


Grüße
Maurice

Benutzeravatar
nonesense
Beiträge: 528
Registriert: 15.07.2006 12:50:10
Aktuelle Projekte: QDmi
Fahrpult Einheitsführerstand
Ludmilla
Wohnort: Köln
Kontaktdaten:

Re: TCP Schnittstelle für TVM

#14 Beitrag von nonesense »

Danke!
Standardmäßig gibt es also nur vertikal verbaute DMI in Frankreich.
Gibt es denn auch Beispiele, wo in einem normalen 4:3 Display mit ETCS auch TVM implementiert ist?

Benutzeravatar
Jens Haupert
Beiträge: 5001
Registriert: 23.03.2004 14:44:34
Aktuelle Projekte: http://www.zusidisplay.de
Wohnort: Berlin
Kontaktdaten:

Re: TCP Schnittstelle für TVM

#15 Beitrag von Jens Haupert »

Hallo Jens,

vielleicht wissen die Frankreichexperten noch mehr. Ich kenne nur die Ausrüstung (i.d.R. TGV und ICE3 BR407) mit ETCS von Ansaldo STS (heute ja Hitachi Rail) mit diesen 2 "komischen" Hochkantdisplays mit den vielen Tasten (Link). Sie stammen wohl von logiplus, welche auch schon den Tacho, den Datenrecorder usw. frührer TGV-Generationen geliefert haben.

Grüße
Jens

Benutzeravatar
Maurice S.
Beiträge: 120
Registriert: 17.03.2020 00:31:50

Re: TCP Schnittstelle für TVM

#16 Beitrag von Maurice S. »

Jens Haupert hat geschrieben: 10.07.2024 08:11:58 vielleicht wissen die Frankreichexperten noch mehr. Ich kenne nur die Ausrüstung (i.d.R. TGV und ICE3 BR407) mit ETCS von Ansaldo STS (heute ja Hitachi Rail) mit diesen 2 "komischen" Hochkantdisplays mit den vielen Tasten (Link). Sie stammen wohl von logiplus, welche auch schon den Tacho, den Datenrecorder usw. frührer TGV-Generationen geliefert haben.
Mir wäre da zumindest mal kein Fahrzeug bekannt, dass ein anderes Display, als das von dir erwähnte hat.

Ältere TGV (Rèseau, Atlantique, Duplex 200 und Sud-Est) haben ja noch die konventionellen TVM-Anzeigen.

Selbst der neue TGV-M scheint diese Displays zu bekommen: https://www.reddit.com/media?url=https% ... qi1ia1.jpg

Grüße
Maurice

Benutzeravatar
Gorgi [Vale]
Beiträge: 241
Registriert: 10.04.2019 20:22:10
Aktuelle Projekte: Am Bau bei der LN6 mitwirken.

Mdl Hcknhm, (Pausiert)
Strecke 4020 & 4080 Schwetzingen(Mannheim) bis Üst. Forst / Graben-Neudorf. (Pausiert)

Re: TCP Schnittstelle für TVM

#17 Beitrag von Gorgi [Vale] »

Hallo zusammen,
Carsten Hölscher hat geschrieben: 08.07.2024 00:24:55 Akso ich meinte, welche Schnittstellen zu Zusi du nutzt, irgendwie muss dein Programm ja mit Zusi sprechen.
ich habe mich mal drangemacht um eine Schnittstelle zu definieren und zu programmieren.
Hier mein Aufrufcode in "c" geschrieben. (Diese Variablen werden zum aktuellen Zeitpunkt von der TVM-300.dll aus Zusi erwartet.)

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

//Copyright Gorgi, no use without permission. Expressly authorised for testing in combination with Zusi.
//Copyright Gorgi, keine Nutzung ohne Erlaubnis. Ausdrücklich für Tests in Verbindung mit Zusi zugelassen.


typedef void (*ProcessArraysFunc)(
    int*, int*, int*, int*, int*, float*, int*, int*, int*, int*, int*,
    char*, int*, int*, int*, char*,
    int, int, int, int, int, int, int, int, int, int,
    int*, float*, int*, int*, int*, float*,
    int*, int*, int*, int*, int, int, int, int);

int main() {
    HINSTANCE hLib = LoadLibrary(TEXT("TVM-300.dll"));
    if (hLib == NULL) {
        DWORD errorMessageID = GetLastError();
        printf("Fehler beim Laden der DLL: %ld\n", errorMessageID);
        return 1;
    }

    ProcessArraysFunc process_arrays = (ProcessArraysFunc)GetProcAddress(hLib, "process_arrays");
    if (process_arrays == NULL) {
        printf("Fehler beim Laden der Funktion\n");
        FreeLibrary(hLib);
        return 1;
    }


    //Achtung, die nächsten sechs Arrays müssen immer die selbe Anzahl an Inhalten haben!

    int tvm300_signals[] = { 1000, 3500, 5000, 8000, 10000, 12000, 14000, 16000, 18000, 20000, 20500, 23000, 25000, 28000, 30000, 32000, 34000, 36000, 38000 }; // Beispiel-Signale mit Distanz; Beispieldaten
    int tvm300_signalsStreckenVmax[] = { 320, 320, 300, 300, 300, 300, 230, 300, 300, 300, 300, 270, 270, 270, 270, 270, 320, 320, 320 }; //Blockhöchstgeschwindigkeit; Beispieldaten
    int tvm300_signalsStreckenVmaxEreignis[] = { 320, 320, 300, 300, 300, 300, 230, 300, 300, 300, 300, 270, 270, 270, 270, 270, 320, 320, 320 }; //Blockhöchstgeschwindigkeit explizit für das Ereignis bis zum nächsten Ereignis, wenn durch -1 aufgehoben, dann selbe Daten wie Blockhöchstgeschwindigkeit; Beispieldaten
    int tvm300_signalsvoie[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; //Gleisnummer am Signal; Beispieldaten
    int tvm300_signalsvoieplus[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; //Für die Besonderheit ob TVM 300 (0) oder TVM 300A (1) //Bei TVM300A wird das 300V nach (300V) erst 15 sek vor dem nächsten Block gezeigt.; Beispieldaten
    float tvm300_signalshohe[] = { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 }; //Gibt die Höhe des Signals an.; Beispieldaten
    

    //Achtung, die nächsten vier Arrays müssen immer die selbe Anzahl an Inhalten haben! Code für TVM 300 Nutzung.

    int tvm300_boucles[] = { 12, 3, 5, 4 }; //Code des Boucles Wert 1;
    int tvm300_boucles2[] = { 0, 0, 0, 0 }; //Code des Boucles Wert 2; Selbige Regel wie signalsvoieplus
    int tvm300_bouclesDistance[] = { 3700, 4000, 5000, 37500 }; //Distanz
    int tvm300_bouclesVerschub[] = { 0, 0, 0, 0 }; //Gibt die Verschiebung an um wie viele Meter hinter oder vor ein Objekt für den Bouclecode. (Eigenes Ereigniss, was zusammen mit dem Boucle sein muss!); Beispieldaten

    
    //Achtung, die nächsten vier Arrays müssen immer die selbe Anzahl an Inhalten haben! Code für TVM 430 Nutzung. Code wird die Umschaltung für TVM 430 benötigt, work in Progress.

    int tvm430_boucles[] = { 12, 3, 5, 4 }; //Code des Boucles Wert 1; Beispieldaten
    int tvm430_boucles2[] = { 0, 0, 0, 0 }; //Code des Boucles Wert 2; Selbige Regel wie signalsvoieplus; Beispieldaten
    int tvm430_bouclesDistance[] = { 3700, 4000, 5000, 37500 }; //Distanz; Beispieldaten
    int tvm430_bouclesVerschub[] = { 0, 0, 0, 0 }; //Gibt die Verschiebung an um wie viele Meter hinter oder vor ein Objekt für den Bouclecode. (Eigenes Ereigniss, was zusammen mit dem Boucle sein muss!); Beispieldaten

    
    
    
    int tvm300_zug_position = 10; //Abstand zum nächsten Signal (Sehr wichtig!)

    char tvm300_Fehlercode[10]; //Interner Fehlercode für mögliche Fehlersuche, auch nutztbar von Streckenbauern. Am besten mit Ausgeben im Berichtsfeld.
    int tvm300_Stoerung[1]; //Störung der Anzeigen, also dunkle Anzeigenziffer: 0 = Keine Störung, 1 = Ziffer 1 aus, 2 = Ziffer 2 aus, 3 = Ziffer 3 aus, 4 = Ziffer 1 und 2 aus, 5 = Ziffer 1 und 3 aus, 6 = Ziffer 2 und 3 aus, 7 = Ziffer 1 und 2 und 3 aus.

    int tvm300_Geschwindigkeit = -10;
    int tvm300_COVIT = -10;
    char tvm300_geschwindigkeitCode[10] = "";

    int tvm300_signalsLength = sizeof(tvm300_signals) / sizeof(tvm300_signals[0]);
    int tvm300_signalsStreckenVmaxLength = sizeof(tvm300_signalsStreckenVmax) / sizeof(tvm300_signalsStreckenVmax[0]);
    int tvm300_signalsvoieLength = sizeof(tvm300_signalsvoie) / sizeof(tvm300_signalsvoie[0]);
    int tvm300_signalsvoieplusLength = sizeof(tvm300_signalsvoieplus) / sizeof(tvm300_signalsvoieplus[0]);
    int tvm300_signalshoheLength = sizeof(tvm300_signalshohe) / sizeof(tvm300_signalshohe[0]);
    int tvm300_signalsStreckenVmaxEreignisLength = sizeof(tvm300_signalsStreckenVmaxEreignis) / sizeof(tvm300_signalsStreckenVmaxEreignis[0]);

    int tvm300_bouclesLength = sizeof(tvm300_boucles) / sizeof(tvm300_boucles[0]);
    int tvm300_boucles2Length = sizeof(tvm300_boucles2) / sizeof(tvm300_boucles2[0]);
    int tvm300_bouclesDistanceLength = sizeof(tvm300_bouclesDistance) / sizeof(tvm300_bouclesDistance[0]);
    int tvm300_bouclesVerschubLength = sizeof(tvm300_bouclesVerschub) / sizeof(tvm300_bouclesVerschub[0]);


    int tvm430_bouclesLength = sizeof(tvm430_boucles) / sizeof(tvm430_boucles[0]);
    int tvm430_boucles2Length = sizeof(tvm430_boucles2) / sizeof(tvm430_boucles2[0]);
    int tvm430_bouclesDistanceLength = sizeof(tvm430_bouclesDistance) / sizeof(tvm430_bouclesDistance[0]);
    int tvm430_bouclesVerschubLength = sizeof(tvm430_bouclesVerschub) / sizeof(tvm430_bouclesVerschub[0]);



    int tvm300_TVMGleisManuell = 1; //Wert für die Schalter für die manuelle Aktivierung / Deaktivierung von TVM. 1 = Gleis 1 an, 2 = Gleis 2 an, 3 = Ausschalten, 0 = keine Änderung.

    float tvm300_aktuelleGeschwindigkeit = 100.0; //Gibt die aktuelle Geschwindigkeit an des Zuges an.
    int tvm300_COVITleuchtet = 0; //O = kein Leuchten; 1 = Leuchten von COVIT.
    int tvm300_ausgeloesteZwangsbremsung = 0; //0 = Keine Zwangsbremsung, 1 = Zwangsbremsung.
    int tvm300_blockbelegt = 0; //0 = Block ist frei und nur unser Zug im Block; 1 = Es befindet vor uns mindestens ein Zug im selben Block bis zum Signal.
    float tvm300_zulaessigeGeschwindigkeit = 0.0; //Zulässige Geschwindigkeit nach Sicherungssystem.

    process_arrays(tvm300_signals, tvm300_signalsStreckenVmax, tvm300_signalsStreckenVmaxEreignis, tvm300_signalsvoie, tvm300_signalsvoieplus, tvm300_signalshohe, tvm300_boucles, tvm300_boucles2,
        tvm300_bouclesDistance, tvm300_bouclesVerschub, &tvm300_zug_position, tvm300_Fehlercode, tvm300_Stoerung, &tvm300_Geschwindigkeit, &tvm300_COVIT,
        tvm300_geschwindigkeitCode, tvm300_signalsLength, tvm300_signalsStreckenVmaxLength, tvm300_signalsStreckenVmaxEreignisLength, tvm300_signalsvoieLength, tvm300_signalsvoieplusLength, tvm300_signalshoheLength,
        tvm300_bouclesLength, tvm300_boucles2Length, tvm300_bouclesDistanceLength, tvm300_bouclesVerschubLength, tvm300_TVMGleisManuell,
        &tvm300_aktuelleGeschwindigkeit, &tvm300_COVITleuchtet, &tvm300_ausgeloesteZwangsbremsung, tvm300_blockbelegt, &tvm300_zulaessigeGeschwindigkeit,
        tvm430_boucles, tvm430_boucles2, tvm430_bouclesDistance, tvm430_bouclesVerschub, 
        tvm430_bouclesLength, tvm430_boucles2Length, tvm430_bouclesDistanceLength, tvm430_bouclesVerschubLength
    );

    
    printf("\n\nAusgelesen Daten für aktuellen Block: ");

    printf("Geschwindigkeit: %d, COVIT: %d\n", tvm300_Geschwindigkeit, tvm300_COVIT);
    printf("GeschwindigkeitCode: %s\n\n", tvm300_geschwindigkeitCode);
    printf("Zulässige Höchstgeschwindigkeit nach Sicherungsystem: %f\n", tvm300_zulaessigeGeschwindigkeit);
    printf("Zwangsbremsung: %d\n", tvm300_ausgeloesteZwangsbremsung);
    printf("Leuchtet COVIT: %d\n", tvm300_COVITleuchtet);

    printf("Fehlercode: %s\n", tvm300_Fehlercode);
    /*Fehlercodes:
        0   = Kein Fehler.
        100 = Es wurden ungültige Pointer an die dll übergeben, bitte an Carsten wenden.
        101 = Signalpositionen wurden nicht vollständig übergeben, es fehlt ein Wert, bitte Signale prüfen ob korrekt eingetragen!
        102 = EPI/Boucles-Positionen wurden nicht vollständig übergeben, es fehlt ein Wert, bitte EPIs/Boucles prüfen ob korrekt eingetragen!
        201 = Unbekannter Fehler, führe Notaus durch! Ausgelöst durch TVM 300.
        202 = TVM wurde deaktiviert. Ausgelöst durch TVM.
    */


    //Funktionen der TVM300 Boucles:
/*
    1 = CCt / Sectionnement / Hauptschalter aus Ankündigung für das Fahrzeug ohne Wiedereinschaltung.
    2 = Sortie tunnel / Ausfahrt aus dem Tunnel.
    3 = CR / Commutation radio / Automatische Funkumschaltung, wie genau der Ablauf ist, ist mir unbekannt.
    4 = Nf / Carré / Anhalten sofort und Zwangsbremsung bis zum Stillstand. (Ist nur an einem Signal mit Nf zu finden mit Boucle davor auf dem Boden.) Es ist der Leuchter "COVIT" sichtbar wenn aktiv.
    5 = EDS V2 / Armement double signalisation V2 / CAB und Lichtsignale auf Gleis 2.
    6 = EDS V1 / Armement double signalisation V1 / CAB und Lichtsignale auf Gleis 1.
    7 = EB / Désarmement TVM, armement du KVB, ligne à V > 160 km/h / Deaktiviere TVM und aktiviere KVB, es folgt eine Strecke mit mehr als 160 km/h auf Lichtsignale. (Scharfschalten des "B" im KVB.)
    8 = De / Désarmement TVM, armement du KVB, ligne à V < 160 km/h / Deaktiviere TVM und aktiviere KVB, es folgt eine Strecke mit maximal 160 km/h auf Lichtsignale.
    9 = Test avant départ / TVM300-Funktionstest im Stehen.
    10= ECS V2 / Ar / Ch V / Armement voie 2 / Schalte Gleis 2 scharf mit ausschließlich CAB. (Oder wechsle auf Gleis 2.)
    11= ECS V1 / Ar / Ch V / Armement voie 1 / Schalte Gleis 1 scharf mit ausschließlich CAB. (Oder wechsle auf Gleis 1.)
    12= K 65 / Contrôle de vitesse 65 km/h / Punktuelle 65 km/h Geschwindigkeitskontrolle. Zwangsbremsung bis zum Stillstand. Es ist der Leuchter "COVIT" sichtbar wenn aktiv.
    13= BP / Baissez panto / Bügel senken Ankündigung ohne heben.
    14= Entrée tunnel / Einfahrt in einen Tunnel.

    Besonderheiten, das Sectionnement und das Baissez panto werden jeweils ein und ausgeschaltet über den selben Code, also einmal ein und einmal aus. Deshalb nur beim Ankündiger und direkt nach der vollzogenen Stelle einbauen, nicht mehr als zwei Codes pro Stelle.

*/

    //Funktionen der TVM430 Boucles:
/*
    1 = ?
    Noch nicht weiter im Code festgelegt.



*/


    FreeLibrary(hLib);
    return 0;
}

Hier die dll und ein Beispielaufruf in Delphi mit der die Schnittstelle getestet werden kann:
https://drive.google.com/drive/folders/ ... sp=sharing
Es sollte folgendes ausgegeben werden:

Code: Alles auswählen

Ausgelesen Daten für aktuellen Block: Geschwindigkeit: 300, COVIT: 315
GeschwindigkeitCode: 300VL

Zulässige Höchstgeschwindigkeit nach Sicherungsystem: 300.000000
Zwangsbremsung: 0
Leuchtet COVIT: 0
Fehlercode: 0
Falls der Fehlercode nicht 0 ist, so gibt es einen Fehler bei der Übergabe der Werte, hier am besten Nachfragen stellen.

In meinen Tests lief die dll immer erfolgreich durch.

Gruß
Gorgi

Edit: Natürlich darf der Code der Testfunktion für den Aufruf der dll in Zusi implementiert werden und auch aktiv außerhalb des Test für den Endgültigen Betrieb genutzt werden, gilt nicht nur für Hobby, sondern auch für das Zusi für die EVU. Das Copyright ziel darauf ab, falls jemand es ohne Erlaubnis und ohne Nachfrage zweckentfremden möchte. Deshalb am besten bitte Nachfrage je nachdem.
Edit2: "tvm300_signalsStreckenVmaxEreignis" wurde in der Übergabe ergänzt und Vmas in der Benennung von einzelnen auf Vmax umbenannt.

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33806
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Schnittstelle für TVM

#18 Beitrag von Carsten Hölscher »

Bevor ich jetzt den Quellcode durcharbeite: es ging mir einfach nur um die Schnitstellen, die genutzt werden. TCP, dll, ...?

Carsten

Benutzeravatar
Gorgi [Vale]
Beiträge: 241
Registriert: 10.04.2019 20:22:10
Aktuelle Projekte: Am Bau bei der LN6 mitwirken.

Mdl Hcknhm, (Pausiert)
Strecke 4020 & 4080 Schwetzingen(Mannheim) bis Üst. Forst / Graben-Neudorf. (Pausiert)

Re: Schnittstelle für TVM

#19 Beitrag von Gorgi [Vale] »

Carsten Hölscher hat geschrieben: 30.08.2024 13:17:43 Bevor ich jetzt den Quellcode durcharbeite: es ging mir einfach nur um die Schnitstellen, die genutzt werden. TCP, dll, ...?

Carsten
So,
es wird eine dll aufgerufen, damit geht es denke ich am besten oder täusche ich mich?
Von der Idee mit TCP bin ich komplett weg.
Die "dll" und ein Beispielhafter Aufruf über Delphi ist im Link zu Drive hinterlegt als Dateien.

Und nun kompakt nochmal, es wird nur eine dll aufgerufen, sonst nichts anderes als Schnittstelle.

Gruß
Gorgi

Edit: Achso, am besten bei Codes für das "tvm300_signals, tvm300_signalsStreckenVmax, tvm300_signalsStreckenVmaxEreignis, tvm300_signalsvoie, tvm300_signalsvoieplus, tvm300_signalshohe" (die sechs zusammen am Anfang) immer ein Wert senden, sodass es keinen Fehler gibt, am besten einfach eine Null, sodass ich es korrekt rausfiltern kann. Hat den Grund ich prüfe diese auf leere Werte und wenn diese nicht gefüllt sind, so kommt ein Fehler.

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33806
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Schnittstelle für TVM

#20 Beitrag von Carsten Hölscher »

Welche dll-Schnittstelle nutzt Du denn?

Carsten

Antworten