WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Home Cockpit - Das Forum für die "Bastler" (http://www.wcm.at/forum/forumdisplay.php?f=55)
-   -   Opencockpit / SIOC (http://www.wcm.at/forum/showthread.php?t=216208)

Dirkce 22.05.2007 17:53

Opencockpit / SIOC
 
Hallo,

hat jemand mal ein Beispiel für SIOC oder kann mir sagen, wie ich es schaffe meine Radios erst bei Battery on zum leuchten zu bewegen. Meine Radios funktionieren einwandfrei, mich stört es nur das auch bei Cold and Dark diese in Funktin sind, sprich die 7 Segment Anzeigen leuchten.
Den Offsetwert habe ich so hoffe ich zumindest in der Doku gefunden nur fehlt mir bei den Befehlen nach dem IF ein THEN, oder mache ich einen Gedankenfehler.

Gruss

Dirk

MiHi4 23.05.2007 09:38

Hi, Dirk!

Ich hab's bei mir so gelöst (sind zwar andere Variablen, aber vielleicht hilft dir das):

Code:

Var 0001, name InternalFlags
{
  &ElecOn = TESTBIT &InternalFlags ,0
  &MaingenOn = TESTBIT &InternalFlags ,6
 
}

Var 0005, name ElecOn    // Boolean to check, when displaying lights
{
  CALL &updateFPanel
}

Var 0006, name MaingenOn
{
  CALL &updateCMDS
}
Var 0007

Var 0010, name CPanelLights

Var 0011, name FPanelLights
{
  CALL &updateFPanel
}

Var 1000, name updateFPanel, Link SUBRUTINE
{
  IF &ElecOn = 1        // check, if electricity in jet
  {
    &masterc = TESTBIT &FPanelLights ,0
    &lebTfFail = TESTBIT &FPanelLights ,1
    &aoa_dn = TESTBIT &FPanelLights ,2
    &aoa_ok = TESTBIT &FPanelLights ,3
    &aoa_up = TESTBIT &FPanelLights ,4
    &rdy = TESTBIT &FPanelLights ,5
    &nws = TESTBIT &FPanelLights ,6
    &disc = TESTBIT &FPanelLights ,7
    &rebEngFire = TESTBIT &FPanelLights ,8
    &rebEngine = TESTBIT &FPanelLights ,9
    &rebHydPres = TESTBIT &FPanelLights ,10
    &rebOilPres = TESTBIT &FPanelLights ,10
    &rebFlcs = TESTBIT &FPanelLights ,11
    &rebDbuOn = TESTBIT &FPanelLights ,12
    &rebToLdg = TESTBIT &FPanelLights ,13
    &rebConfig = TESTBIT &FPanelLights ,13
    &rebCanopy = TESTBIT &FPanelLights ,14
    &rebOxyLow = TESTBIT &FPanelLights ,15
    &twsHandoff = TESTBIT &FPanelLights ,16
    &twsLaunch = TESTBIT &FPanelLights ,17
    &twsPriMode = TESTBIT &FPanelLights ,18
    &twsNaval = TESTBIT &FPanelLights ,19
    &twsUnknown = TESTBIT &FPanelLights ,20
    &twsTgtSep = TESTBIT &FPanelLights ,21
    &ecmOn = TESTBIT &FPanelLights ,22
    &tfrActive = TESTBIT &FPanelLights ,23
    &tfrStby = TESTBIT &FPanelLights ,24
  }
  ELSE
  {
    &masterc = 0
    &lebTfFail = 0
    &aoa_dn = 0
    &aoa_ok = 0
    &aoa_up = 0
    &rdy = 0
    &nws = 0
    &disc = 0
    &rebEngFire = 0
    &rebEngine = 0
    &rebHydPres = 0
    &rebOilPres = 0
    &rebFlcs = 0
    &rebDbuOn = 0
    &rebToLdg = 0
    &rebConfig = 0
    &rebCanopy = 0
    &rebOxyLow = 0
    &twsHandoff = 0
    &twsLaunch = 0
    &twsPriMode = 0
    &twsNaval = 0
    &twsUnknown = 0
    &twsTgtSep = 0
    &ecmOn = 0
    &tfrActive = 0
    &tfrStby = 0
  }
}

Var 1001, name updateCMDS, Link SUBRUTINE
{
  L0 = &MaingenOn + &ElecOn
  IF L0 = 2        // check, if mainGenerator running and ELEC switch on
  {
    if &ChaffCount < 100
    {
      &disp_Chaff = &ChaffCount
    }
    ELSE
    {
      &disp_Chaff = 99
    }
    if &FlareCount < 100
    {
      &disp_Flares = &FlareCount
    }
    ELSE
    {
      &disp_Flares = 99
    }
  }
  else
  {
    &disp_Flares = -999999
    &disp_Chaff = -999999
  }
}

/////////////////////////////////
//  LEDs are from 2000 - 2050 //
/////////////////////////////////



Var 2000, name masterc, Link IOCARD_OUT, Output 11    // Master Caution Light

Var 2001, name aoa_dn, Link IOCARD_OUT, Output 12

Var 2002, name aoa_ok, Link IOCARD_OUT, Output 13

usw...

lg
michi

Dirkce 23.05.2007 20:09

Hallo Michi,

vielen Dank für dein Script. Ich werde es mir am Freitag mal in Ruhe anschauen un versuchen zu verstehen. Mir ist aufgefallen das du nicht wie von mir eigentlich versucht mit IF / THEN Schleifen bzw. mit NOT oder OR Befehlen gearbeitet hast. Hmmm mal sehen.
Ich hoffe ich darf mich noch einmal melden wenn ich Probleme habe????

Schönen Tag rüber

Dirk

MiHi4 24.05.2007 09:40

Hi, Dirk!
Zitat:

Mir ist aufgefallen das du nicht wie von mir eigentlich versucht mit IF / THEN Schleifen bzw. mit NOT oder OR Befehlen gearbeitet hast.
Doch, doch!

1.) In der Variable 0001 werden bitweise diverse Stati gesetzt - unter anderem auch ElecOn (Elektrizität im Pit) und MainGenOn (Hauptgenerator läuft). Wenn diese Bits gesetzt sind werden die Variablen 5 und 6 auf "1" gesetzt.

2.) In der Variable 0011 werden die Werte für die Lampen des Frontpanels bitweise gesetzt (jede Lampe ein Bit).
Ändert sich nun der Wert dieser Variable (weil z.B. eine Lampe an/aus gegangen ist, wird die Funktion "updateFPanel" (V1000) aufgerufen.

3.) In der Funktion updateFPanel wird gleich zu Beginn gecheckt: Ist &ElecOn auf "1"? (Strom im Pit).
Falls ja -> beschalte die LED Outputs entsprechend der Bitwerte in der Variable 0011.
Fall nein (ELSE-Block) -> schalte alle Outputs auf "0" (aus).

4.) Die oben genannte Funktion wird auch bei Änderung des Wertes von &ElecOn aufgerufen, da ja auch auf die Position des Stromschalters reagiert werden muss.

Zitat:

Ich hoffe ich darf mich noch einmal melden wenn ich Probleme habe????
Sicher, überhaupt kein Problem. Ich bin nur nicht so der Fachmann zu MSFS-Offsets, da ich meine IOCards nur mit Falcon4.0 verwende.

lg
michi


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag