unit AntriebsKonstanten;

interface

uses FahrleitungsTypen;

type

                       // AntrRnd_EigenesFzg kommt nur ab Fahrzeugebene zur Anwendung
  TAntriebsRenderModus = (AntrRnd_EigenesFzg, AntrRnd_EigenerZug, AntrRnd_AndererZugOderAP, AntrRnd_Unsichtbar, AntrRnd_NichtAufgegleist);


  // für den gesamten Zug
  TRechnungVereinfachtGesamtzug = record
    // Konstanten (in akt. Zusammenstellung)
    MasseGesamt:single;           // kg
    RotationsZuschlag:single;     // kg
    Laenge:single;
    spMax: single;
    LeistungMax:single;
    DynLeistungMax:single;
    AnfahrKraftMax:single;
    BremskraftMax:single;
    Bremsmasse:single;
    cwA:single;
    AnzahlAntriebsAchsen:integer;

    // Variablen
    ZugkraftAkt,
    ZugkraftMaxAkt,      // f(sp), die gerade max. möglich Zugkraft
    BremskraftLuftAkt,
    BremskraftDynAkt,
    BremskraftMgAkt,
    HangabtrKraftAkt,         // neg: geht bergab
    RollwiderstAkt,
    BogenwiderstAkt,
    LuftwiderstAkt:single;
  end;



  TProtokollMehrfachTraktion = record
    SollZugkraft:single;     // absolute Vorgabe aus gesteuertem Fahrzeug
    SollLeistungNormiert:single;  // 0...1
    ZylDruckDynBremse:single;         // druckluftergänzungsbremse usw.
    SASchaltungAktuell:byte;         // 0 oder $F
  end;

                                     
  TKombiSchalterFunktion = ( KSF_Nichts,
                             KSF_FahrstufeX, KSF_FahrstufeSchnellAus, KSF_FahrstufeAufX, KSF_FahrstufeFahren, KSF_FahrstufeAbX,
                             KSF_DynBremseX, KSF_DynBremsenull, KSF_DynBremseAufX, KSF_DynBremseBremsen, KSF_DynBremseAbX,
                             KSF_AFBX, KSF_AFBnull, KSF_AFBAuf, KSF_AFBAb, 
                             KSF_AFBEinX,
                             KSF_ZugkraftX, KSF_ZugkraftSchnellAus, KSF_ZugkraftAuf, KSF_ZugkraftFahren, KSF_ZugkraftAb,
                             KSF_HllFuellen, KSF_HllDruckX, KSF_HllAbschluss, KSF_HllMittel, KSF_HllBremsenSchnell,
                             KSF_Angleicher,
                             KSF_ZbvLoesen, KSF_ZbvMittel, KSF_ZbvBremsen,
                             KSF_GangWahlX, KSF_GangWahlnull, KSF_GangWahlAuf, KSF_GangwahlFahren, KSF_GangWahlAb,
                             KSF_RischaV, KSF_RischaM, KSF_Rischa0, KSF_RischaR,
                             KSF_StufenschalterLG, KSF_Stufenschalter0, KSF_StufenschalterSG,
                             KSF_GruppenschalterStop, KSF_GruppenschalterAus, KSF_GruppenschalterEin, KSF_GruppenschalterStart,
                             KSF_StromabnehmerAb, KSF_StromabnehmerNull, KSF_StromabnehmerAuf,
                             KSF_HauptschalterAus, KSF_HauptschalterNull, KSF_HauptschalterEin,
                             KSF_MgBremseX,
                             KSF_SandenX,
                             KSF_PfeifeX,  // ist frei und kann neu belegt werden
                             KSF_GlockeX,  // ist frei und kann neu belegt werden
                             KSF_LokbremseentlueftenX,
                             KSF_LuefterX,
                             KSF_Individuell_01, KSF_Individuell_02, KSF_Individuell_03, KSF_Individuell_04, KSF_Individuell_05,
                             KSF_Individuell_06, KSF_Individuell_07, KSF_Individuell_08, KSF_Individuell_09, KSF_Individuell_10,
                             KSF_Individuell_11, KSF_Individuell_12, KSF_Individuell_13, KSF_Individuell_14, KSF_Individuell_15,
                             KSF_Individuell_16, KSF_Individuell_17, KSF_Individuell_18, KSF_Individuell_19, KSF_Individuell_20,
                             KSF_WandlerfuellungX,
                             KSF_LuftpresserAus,
                             KSF_Notaus,
                             KSF_Individuell_21, KSF_Individuell_22, KSF_Individuell_23, KSF_Individuell_24, KSF_Individuell_25,
                             KSF_Individuell_26, KSF_Individuell_27, KSF_Individuell_28, KSF_Individuell_29, KSF_Individuell_30,
                             KSF_Individuell_31, KSF_Individuell_32, KSF_Individuell_33, KSF_Individuell_34, KSF_Individuell_35,
                             KSF_Individuell_36, KSF_Individuell_37, KSF_Individuell_38, KSF_Individuell_39, KSF_Individuell_40,
                             KSF_FederspeicherAnlegen, KSF_FederspeicherNull, KSF_FederspeicherLoesen, KSF_FederspeicherUmschalten,
                             KSF_BatterieHSAus, KSF_BatterieHSNull, KSF_BatterieHSEin,
                             KSF_FahrschalterLSSAus,
                             KSF_DynBremseLSSAus,
                             KSF_ComputerBremseX, KSF_ComputerBremseAufX, KSF_ComputerBremseBremsen, KSF_ComputerBremseAbX,
                             KSF_FtdIntern_01, KSF_FtdIntern_02, KSF_FtdIntern_03, KSF_FtdIntern_04, KSF_FtdIntern_05,
                             KSF_FtdIntern_06, KSF_FtdIntern_07, KSF_FtdIntern_08, KSF_FtdIntern_09, KSF_FtdIntern_10,
                             KSF_FtdIntern_11, KSF_FtdIntern_12, KSF_FtdIntern_13, KSF_FtdIntern_14, KSF_FtdIntern_15,
                             KSF_FtdIntern_16, KSF_FtdIntern_17, KSF_FtdIntern_18, KSF_FtdIntern_19, KSF_FtdIntern_20,
                             KSF_FuehrertischDeaktiviert,
                             KSF_AntriebsUmschaltung
                           );


  TpKombischalterFkt = ^TKombischalterFkt;     //für jede Rastenfunktion einmal vorhanden
  TKombischalterFkt = record
    Funktion:TKombiSchalterFunktion;
    Parameter:single;        //zur näheren Spezifizierung der Funktion
  end;

  // Achtung Änderungen sind releveant für Antriebs-Brems-dll !!!
  TProtokollFst = record
    Fbv: TKombischalterFkt;
    Zbv: TKombischalterFkt;
    Rischa: TKombischalterFkt;
    SandEin: Boolean;
    LuefterEin: Boolean;
    MgManuellEin: Boolean;
	AntriebAbregelnEin:Boolean; // für Eingriffe Schleuderschutz usw.
	TraktionssperreGrund:Word;  // 0: Nichts; 1: Federspeicherbremse aktiv; 2: Türsystem; 3: Bremsprobe läuft; 4: Sifa-HS
    BetriebszwangsbremsungEin: Boolean;
    ZwangshaltEin: Boolean;
    SchaltstufenSteller: TKombischalterFkt;
    DynBremsSteller: TKombischalterFkt;
    ComputerBremsSteller: TKombischalterFkt;
    ZugkraftSteller: TKombischalterFkt;
    Wandlerfuellung:TKombischalterFkt;
    AFBvSollSteller: TKombischalterFkt;
    Ganghebel: TKombischalterFkt;
    Stufenschalter: TKombischalterFkt;
    Gruppenschalter: TKombischalterFkt;
    Hauptschalter: TKombischalterFkt;
    Stromabnehmer: TKombischalterFkt;
    BatterieHS: TKombischalterFkt;
    DynBremseLSSAus: Boolean;
    FahrschalterLSSAus: Byte;     // 1:deaktiviert 2:Normalzustand 3:gestört
    AFBEin: Boolean;              // Lage des Schalters
    AFBvSollNullstellungszwang:Boolean;       // wird gf. von LZB aktiviert
    AFBspMax:single; // 160 oder fzg-vmax und Beachtung Zugdaten
    AFBsppMax:single;  // max. Beschl, default 0.5
    TAVHaltebremse:Boolean;
    AFBHaltebremseTrotzFahrschalter:Boolean;
    TempomatEin: Boolean;         // Lage des Schalters
    Angleicher: Boolean;
    LuftpresserAus: Boolean;
    LokBremseEntlueften: Boolean;
    Automatischfahren:Boolean;   
    Individuell:array[1..40] of single;
    Federspeicher: TKombischalterFkt;
    BremsprobeStatus:Word;
    SchleuderschutzElektronischWirksam:Boolean;
    FtdIntern:array[1..20] of single;
    FuehrertischDeaktiviert: TKombischalterFkt;
    Antriebsaktivierung: TKombischalterFkt;
  end;

  TGrundfahrdaten = record  // das was jedes Fzg braucht, auch wenn der AP fährt
    spAkt:single;
    ZugkraftAkt:single;
  end;


  TMehrfachtraktionsdaten = record
    Grundfahrdaten:TGrundfahrdaten;
	spAktNormiert:single;   // 0..1 
	LastAktNormiert:single;         // 0..1
	LastAktDynBremseNormiert:single;
    ZylDruckDynBremse:single;         // druckluftergänzungsbremse usw.
    DruckHL:single;
    DruckHBL:single;
    HauptschalterRaus:Boolean;
    TrennschuetzRaus:Boolean;
    Sand:Boolean;
    StreckenStromsystem:TFahrleitungstyp;
    FahrlSpannungsfaktor:single;            // 0, wenn kein SA oben, sonst 1 oder 1,x für schwankende Spannung
    FahrtRichtung:TKombiSchalterFunktion;   // KSF_RischaV, KSF_RischaM, KSF_Rischa0, KSF_RischaR,
    Antriebsumschaltung:Word;  // Index-Nr ab 1   (0=nichts los)
  end;


implementation

end.
