officercrockey schrieb:Zu den bits: Da wäre es in der Tat gut, wenn ich mal ein kleines Beispiel hätte, wie sowas aussieht. Das Beispiel von mb habe ich zwar gesucht, aber nur einen weiteren Verweis darauf (~2006) gefunden. Dein Beitrag an sich aber nicht...
Tja, die Sufu ...
Also, ich stelle gerade fest dass ich CB 1D (can wagon be attached) dafür überhaupt nicht nutze, warum nicht fällt mir gerade nicht ein, aber es gab dafür bestimmt Gründe ...
Stattdessen überprüfe ich die Konfiguration des Zugs auf "Wendezugkompatibilität" anhand der gesetzten bits und benutze dann CB 31 (start/stop check). Damit verhindere ich das Ausfahren falsch zusammengestellter Züge aus dem Depot, bzw verhindere zumindest dass sie als Wendezüge benutzt werden können (stattdessen fahren sie dann "normal")..
Der Kern des Problems ist aber in jedem Fall (egal welcher CB nun genutzt wird) die Evaluierung der in der "user bit mask" gesetzten bits:
Code:
//------------------------------------------------------------------
// prop25 bit flags:
//
// val type
// 01 Fernverkehr
// 02 Nahverkehr
// 04 StW aktiv
// 08 Fernverkehr wendezugfähig
// 10 Nahverkehr wendezugfähig
// 20 n/a
// 40 n/a
// 80 S-Bahn flag
//
// 00 .. 03 = n/a
// 04 = StW aktiv
// 05 .. 07 = F: keine wendezugfähigen Wagen
// 08 .. 0B = n/a
// 0C = StW + 08
// 0D .. 0F = F: enthält (auch) nicht-wendezugfähige Wagen
// 10 .. 13 = n/a
// 14 = StW + 10
// 15 .. 17 = F: enthält (auch) nicht-wendezugfähige Wagen
// 18 .. 1B = n/a
// 1C .. 1F = F: StW + 08 + 10 (+08) -> nicht erlaubte Mischung
//
//------------------------------------------------------------------
Diese bit-Muster werden dann geprüft und bei Vorliegen falscher Muster werden entsprechende Fehlermeldungen ausgegeben. Ich denke dass dies leicht zu verstehen ist, m4nfo verzichtet lediglich auf die redundanten Schlüsselwörter (feature, self, switch, ..) und beschränkt sich auf den Aufruf der Funktion "ubitsetrel()" die die user bit Masken aller im Zug enthaltenen Fz abfragt und die entsprechenden Fehlermeldungen ausgibt:
Code:
// start-stop check: allow only if correct types of coaches
def(21) ubitsetrel(UB_ALL-UB_NSWITCH, // S-Bahn ausgeblendet
attach(PP_OK) if(0 .. 3) // normal, allow
attach(PP_REQPPCAR) if(5 .. 7) // "Wendezugfähige Wagen erforderlich"
attach(PP_OK) if(8 .. 11) // normal, allow
attach(PP_BADSET) if(12 .. 15) // "enthält nicht-wendezugfähige Wagen"
attach(PP_OK) if(16 .. 19) // normal, allow
attach(PP_BADSET) if(21 .. 23) // D029
attach(PP_OK) if(24 .. 27) // normal, allow
attach(PP_LDSDSET) if(28) // "enthält N und F Wagen"
attach(PP_BADSET) if(29 .. 31) // D029
ref(20) else // möglicher Wendezug: all passenger?
)
[...]
// CBs
def(22) callback(
ref(21) if(CB_STOP) // start/stop check
ref(23) if(CB_ARTI) // articulated
ref(3) else // Grafik
)
makevehicle(_BR141,
link(ref(10), MENU)
default(ref(22))
override(_PLOCALLONG, ref(X_SBAHN)) // switch S-Bahn | generic
override(_STWDOSTO, ref(19)) // StW Dosto, bzw ..
override(_STWLOCAL, ref(19)) // .. StW normal, je nachdem
)
Also, vielleicht auch mal mit CB31 versuchen?
HTH
Gruß
Michael