Tuomas Kuosmanen

SIOC-ohjelmointia (IOCards)

65 viestiä aiheessa

Teenpä tämmöisen threadin tähän, jos olette ko. koodia vääntäneet, näyttäkää spagettinne muillekin :)

 

Mä väänsin eilen tämän:

 

three-green.jpg

 

Suttuvideo: http://tigert.com/aviation/vatsim/cockpit-stuff/gearlever.3gp (realplayer tai quicktime player soittanee)

 

Ja se koodi ;D Yritin kommentoida sopivasti sekaan..

 

 

// Aileron axis

 

Var 0001, Link FSUIPC_OUT, Offset $0BB6, Length 2 // Aileron variable, -16383 to 16383

 

Var 0101, Link IOCARD_ANALOGIC, Input #1, PosL 88, PosC 128, PosR 168 // Aileron pot,  in input 1.

 

{

 

  L0 = V0101 - 128 // pot values  are 0 to 255, we need -128 to 128

 

  V0001 = L0 * 128 //  multiply to scale: 128*128 = 16383

 

}

 

 

 

// Elevator axis

 

Var 0002, Link FSUIPC_OUT, Offset $0BB2, Length 2 // Elevator variable, -16383 to 16383

 

Var 0102, Link IOCARD_ANALOGIC, Input #2, PosL 20, PosC 95, PosR 170 // Elevator pot

 

{

 

  L0 = V0102 - 128

 

  V0002 = L0 * 128

 

}

 

 

 

// Throttle 1

 

Var 0003, Link FSUIPC_OUT, Offset $088c, Length 2 // Eng1 throttle, -4096 to 16383 (rev?)

 

Var 0103, Link IOCARD_ANALOGIC, Input #3, PosL 0, PosC 55, PosR 145 // Eng1 Throttle pot

 

{

 

  V0003 = V0103 * 65 // no reversers, so 0->16383

is enough. 65 so that it makes sure to have full power (a bit "too much" with max pot value)

}

 

 

 

// Throttle 2

 

Var 0004, Link FSUIPC_OUT, Offset $0924, Length 2 // Eng2 throttle, -4096 to 16384 (rev?)

 

Var 0104, Link IOCARD_ANALOGIC, Input #4, PosL 0, PosC 56, PosR 148 // Eng2 Throttle pot

 

{

 

  V0004 = V0104 * 65

 

}

 

 

// Gear lever

Var 0005, Link FSUIPC_OUT, Offset $0BE8, Length 4 // Landing gear position, 0=up, 16383=dwn

 

Var 0105, Link IOCARD_SW, Input 1 // Landing gear switch (ON=1, OFF=0)

{

  V0005 = V0105 * 16383

}

 

// Gear leds

Var 0113, Link IOCARD_OUT, Output 11    // "Gear in transit" led, in pins 11 of master card's output connector. Remember 330kOhm resistor!

Var 0114, Link IOCARD_OUT, Output 12    // Nosegear green led

Var 0010, Link FSUIPC_IN, Offset $0BEC, Length 4 // Nose gear position, 0=up, 16383=dwn (indicator)

{

  IF V0010 < 16383 // gear is not down

  {

    V0113 = 1 // transit led on

  }

  IF V0010 = 16383 // gear is fully down & locked

  {

    V0113 = 0 // transit led off

  }

  IF V0010 = 0 // nose gear is up

  {

    V0113 = 0 // transit led off

  }

  IF V0010 = 16383 // down & locked

  {

    V0114 = 1 // nosegear green

  }

  IF V0010 < 16383

  {

    V0114 = 0 // no green

  }

}

 

Var 0115, Link IOCARD_OUT, Output 13    // Right gear green led

Var 0011, Link FSUIPC_IN, Offset $0BF0, Length 4 // Right main gear position, 0=up, 16383=dwn

{

  IF V0011 = 16383

  {

    V0115 = 1

  }

  IF V0011 < 16383

  {

    V0115 = 0

  }

}

 

Var 0116, Link IOCARD_OUT, Output 14    // Left gear green led

Var 0012, Link FSUIPC_IN, Offset $0BF4, Length 4 // Left main gear position, 0=up, 16383=dwn

{

  IF V0012 = 16383

  {

    V0116 = 1

  }

  IF V0012 < 16383

  {

    V0116 = 0

  }

}

 

Semmoista.. Tuossa hetken kestää että tuon kanssa pääsee sinuiksi, mutta nyt alkaa tuntua hyvältä. Tuo koodi on melkoisen "vahvaa" siinä mielessä että sillä voi tehdä paljon erilaista logiikkaa. Tietty sen kirjoittelun kanssa menee aikaa, mutta teen niin että kolvaan johdot, kytken ja kirjoitan koodin ja testaan kytkimen. Toimii suht ok näin. Toinen vaihtoehto tietty on käyttää sitä "config iocard" -softaa, mutta sillä logiikan teko ei onnistu, ja nää on "joko tai" eli SIOC:ia päätin alkaa käyttää niin teen sillä sitten kaiken. Molempia ei näet voi käyttää kerralla.

 

Koodia varmaan voisi kirjoittaa "paremminkin" (en harrasta tai tee ohjelmointia työkseni) mutta tuo pelaa hyvin. Aika kätevä systeemi tuo on.

 

Jos kysyttävää on, tai omaa koodinpätkää tai vinkkiä, kertokaa se tähän. Tehdään tästä vaikka "SIOC-threadi".

 

//Tuomas

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Tämä treadi tulikin sopivaan kohtaan. :)

 

Itte olen väsännyt ruman, mutta toimivan laitteen, mutta koodaus ei ole vahvimpia puoliani.. ::)(jos ei html koodia lasketa ;D)

 

Voisiko joku lähettää meiliini koodin, joka näyttää seuraavaa:

Numero ledit 0-4 Alt, eli 5 numero näyttöä altille

Numero ledit 5-7 Hdg, eli 3 numero näyttöä hdgille

Numero ledit 8-10 IAS, eli 3 numero näyttöä IASsille..

 

Kiitos jo etukäteen. 8)

Jaa viesti


Link to post
Jaa muulla sivustolla

Tämä treadi tulikin sopivaan kohtaan. :)

 

Itte olen väsännyt ruman, mutta toimivan laitteen, mutta koodaus ei ole vahvimpia puoliani.. ::)(jos ei html koodia lasketa ;D)

 

Voisiko joku lähettää meiliini koodin, joka näyttää seuraavaa:

Numero ledit 0-4 Alt, eli 5 numero näyttöä altille

Numero ledit 5-7 Hdg, eli 3 numero näyttöä hdgille

Numero ledit 8-10 IAS, eli 3 numero näyttöä IASsille..

 

Kiitos jo etukäteen. 8)

 

Mä en ole koodannut noita numeronäyttöjä vielä, mutta tuotas.. Katsotaas tätä koodia..

 

"FSUIPC for Programmers.doc" on se mistä näitä offsetteja katsotaan, sitä kauttahan toimii kaikki. Sieltä löytyy tämä:

 

OffsetLengthDescriptionFS2002FS2004

07D44Autopilot altitude value, as metres*65536OKOK

 

Eli, offsetti jonka osoite heksadesimaalina on 07d4 sisältää 4 yksikön mittaisen tiedon jossa on koodattuna koneen autopilottiin asetettu korkeus. Lukuarvo on metreinä ja kerrottuna 65536. Eli se pitää ensin jakaa 65536:lla ja muuntaa sitten jaloiksi. Eli kerrotaan vielä 0.3048:lla. Katsotaan sitten mitä siitä tulee. En ole ollenkaan varma toimiiko tämä, koska mulla ei vielä tosiaan ole numeronäyttöjä valmiina, mutta kokeile ja kerro.

 

>
Var 0002, Link IOCARD_DISPLAY, Digit 0, Numbers 5 // Tämä on meidän 5 7-segmenttiä alkaen nollasta..
Var 0001, Link FSUIPC_IN, Offset $07D4, Length 4 // AP:n korkeus, offsetti ja pituus, suoraan siitä dokkarista
{
// tämä on kommentti. 
// Tässä hakasulkujen sisällä olevat jutut tehdään aina kun tuo ylläoleva, eli autopilotin korkeus,
// muuttuu. Eli teemme seuraavaa:
   L0 = V0001 / 65536 // jaetaan se sillä 65536:lla. Nyt L0 = ap:n korkeus metreinä.
   L0 = L0 * 0.3048 // metrit jaloiksi
   V0002 = L0 // Nyt sen pitäisi ilmestyä sinne numeroihin...?
}

 

Eli tallenna "testi.txt":ksi ja importoi tuo config_sioc:iin, tallenna jotta saat jotain.ssi:n. Sitten sioc.ini:iin sinne loppuun se jotain.ssi jotta se osaa ladata oikean filen. FS käyntiin ja sioc.exe päälle ja toivotaan parasta. Nyt voit kanssa käynnistää icopconsole.exe:n jolla voi kanssa katsoa mitä IOCardsin muuttujissa tapahtuu.

 

Kerro toimiiko tuo ollenkaan? Ja kerro tajuatko tuosta mitään? Tuo ei ole sillai vaikeaa ollenkaan, vaatii vaan miettimistä että logiikka menee oikein. Luultavasti tota joutuu viilaamaan jostain vähän mutta kerro tuleeko näyttöön yhtään mitään niin mietitään sitten lisää :)

 

//Tuomas

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Saan tuon toimivuuden testattua tänään (myöhään illalla) tai (todennäköisemmin) huomenna, olen juuri nyt mummolassa :P...

 

Kyllähän tuosta jotain saa selvää...Näyttääpi paikoin jopa helpommalta kuin HTML... :)

Jaa viesti


Link to post
Jaa muulla sivustolla

Saan tuon toimivuuden testattua tänään (myöhään illalla) tai (todennäköisemmin) huomenna, olen juuri nyt mummolassa :P...

 

Kyllähän tuosta jotain saa selvää...Näyttääpi paikoin jopa helpommalta kuin HTML... :)

 

Jep, ei siinä ole mitään vaikeaa, ihan pelkkää logiikkaa ja perusjuttuja.

 

Ainoa ero normaaliin ohjelmointiin, esim PHP tai "oikeat" kielet, on se, ettei tuota systeemiä "ajeta" koskaan alusta loppuun, vaan koodi on "pätkissä" aina muuttujien yhteydessä. Eli näin:

 

V0001 ... määrittelyt, esim FSUIPC_IN tai iocardsin input tms..

{

  Tässä on koodin pätkä

}

 

Ja tuo koodin pätkä siis ajetaan silloin kun tuo muuttuja V0001 muuttaa arvoaan (eli jos se on FSUIPC:stä, simussa ko. parametri muuttuu, tai jos se on esim. iocardsin kytkin, kun se kytketään päälle tai pois..)

 

Koodissa voidaan sitten tutkia muiden muuttujien tilaa jne. Onneksi seuraavaan versioon SIOCista tulee mahdollisuus käyttää ihan järkeviä nimiä noille, eikä pelkästään numeroita.

 

Mutta tällä pystyy tekemään aikamoisia juttuja. Esim. niin että määrittelet vaikkapa varoitusvaloja eri asioille, low fuel, low voltage jne. Ja sitten yhden napin, joka on "light test" - ja joka varoitusvalon koodinpätkässä sitten katsotaan FSUIPC:stä onko esim. polttoainetta tietty määrä, jos on sen alle, sytytetään valo. Kaikki varoitusvalojen ledit voidaan sitten sytyttää myös "light test" kytkimen koodissa kun kytkintä painetaan.

 

//Tuomas

Jaa viesti


Link to post
Jaa muulla sivustolla

TOIMII!!! :laugh:

 

Tosin, jalka kertoin on ilmeisesti väärä, mutta metrit oikein :) (kokeilin poistamalla jalka kertojan, ja se näytti oikeaa metrilukua - 30000ft, n.10000)

Löysin vian! Se jalka lasku olisi pitänyt tehdä jakona, ei kertona.

 

Saisko noi näyttämään lentokoneen realiaikaisia asioita, eikä apeen lukuja?

Eli siis näyttämään samaa korkeutta millä kone juuri sillä hetkellä lentää, siis ALT display.

 

Mistä löytää sen manuaalin jossa offsetit?

 

Jaa viesti


Link to post
Jaa muulla sivustolla

TOIMII!!! :laugh:

 

Tosin, jalka kertoin on ilmeisesti väärä, mutta metrit oikein :) (kokeilin poistamalla jalka kertojan, ja se näytti oikeaa metrilukua - 30000ft, n.10000)

Löysin vian! Se jalka lasku olisi pitänyt tehdä jakona, ei kertona.

 

Saisko noi näyttämään lentokoneen realiaikaisia asioita, eikä apeen lukuja?

Eli siis näyttämään samaa korkeutta millä kone juuri sillä hetkellä lentää, siis ALT display.

 

Mistä löytää sen manuaalin jossa offsetit?

 

 

Hienoa! Joo toi oli ihan testaamaton koodinpätkä, joten bugeja takuulla on :)

 

Se dokkari löytyy täältä: www.schiratti.com/dowson.html (eli samasta paikkaa kun FSUIPC.dll itsekin. Siellä on se "FSUIPC SDK 25'th release" -paketti - ota se. Se file on nimeltään "FSUIPC for Programmers.doc" ja on siinä zipissä. Hommahan menee niin että etsit siitä offsetin, katsot sen pituuden myös (length) ja tutkit mimmoisia lukuja se on. Sitten luku ehkä pitää muuntaa sopivaan muotoon jakamalla tms ja sen voi tunkea näyttöön.

 

Perusideahan on hirveän yksinkertainen, sitten noista voi rakentaa melkein mitä vain. Periaatteessahan tällä voi rakentaa itse oman "lisäosakoneen" niin että esim. Default 737:aan rakentaisi oman overhead-paneelin ja koodaisi sen logiikan sioc:illa jne..

 

//Tuomas

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Kolvasinpa laippakytkimeen johdot. Kyseessä on kolmiasentoinen vipu. Ylös-asennossa tulee signaali pinnipariin A ja alas-asennossa pinnipariin B. Keskellä ei tule signaalia mihinkään. Eli ON-OFF-ON -kytkin.

 

Huomenna pähkin sen toimimaan kotiohjaamopäivillä, ja pistän koodin tänne. Tuossa on tavallaan kaksi kytkintä - "Laipat Sisällä" -kytkin ja "Laipat täysin ulkona" -kytkin. Väliasento on sitten silloin kun kumpikaan noista ei ole päällä. Tarvittaneen kaksi muuttujaa, joiden tilaa tutkitaan, eli jos molemmat "kytkimet" ovat 0, laippavipu on keskiasennossa.

 

flapswitch.jpg

 

//Tuomas

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Kohta tulee laippavivun ja vähän muunkin kytkentää siocilla.. Samoin voin suositella noita uusia iocardsin "input/output-connections" -kortteja. Helpottavat kytkentää kummasti. Toki toinen tapa on ottaa IDE-kaapeli, katkaista toinen pää ja tinata siitä kytkimet kiinni. Kunhan muistaa että joka kymmenes johdin on maa.

 

Mutta tää connections-kortti on ihan kätevä, pinnit on numerojärjestyksessä. Siinäkin sitten on sama juttu eli ilmeisesti (kohta nähdään, siis :)) yhdeksää inputtia/outputtia kohtaan on aina yksi maa.

 

iocards-connector.jpg

 

Mulla tuossa värillisessä lattakaapelissa siis aina tuo musta johdin on maa. Muut sitten numerojärjestyksessä kytkimistä. Eli yhdeksän kytkintä voi aina kytkeä samaan "maahan" - ryhmien yli ei voi oikosulkea maata, vain ryhmän sisällä saa ja kannattaa yhdistää. Eli teen niin että paneelissa on 9 (tai tässä tapauksessa 8) kytkintä, vedän yhdellä johdolla kytkinten toiset liittimet yhteen, ja siitä johto tuohon maa-liittimeen. Ja kytkinten toiset pinnit sitten jokainen erikseen vierekkäisiin liittimiin.

 

//Tuomas

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Okei. Katsotaanpas sitten taas..

 

 

 

// *** FLAP SWITCH ***

Var 0006, Link FSUIPC_OUT, Offset $0BDC, Length 4 // flaps, 0=up, 16383=dwn

Var 0106, Link IOCARD_SW, Input 37 // flaps UP

{

  IF V0106 = 1 // flap switch up

  {

    V0006 = 0

  }

  ELSE

  {

    IF V0107 = 0

    {

      V0006 = 3000

    }

  }

}

 

Var 0107, Link IOCARD_SW, Input 36 // flaps down

{

  IF V0107 = 1 // flaps down

  {

    V0006 = 16383

  }

  ELSE

  {

    IF v0106 = 0

    {

      V0006 = 3000

    }

  }

}

 

 

Noita numeroita joutuu tietty omassa koodissa säätämään että ei ole päällekkäisiä. Tulisi vaan se seuraava version pian, niin voisi käyttää kunnollisia muuttujan nimiä.. :P

 

Tuo laippa-akseli on 0-16383 välillä ja "suunnilleen" oikea arvo asettaa laipat lähimpään pykälään. Logiikka on siten, että kytkin on kolmiasentoinen, "ylös", "keskellä" ja "alhaalla". Keskiasento ei anna mitään signaalia, ylös-asento on kytkin 37, alas-asento on 36. Ideana siis, että jos kytkin on ylhäällä, se ei voi olla alhaalla jne. Ja jos se ei ole ylhäällä, tarkistetaan onko se alhaalla vai välissä.

 

//Tuomas

 

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Ja valot.. Tässä on yksi offsetti kaikissa, koostuu biteistä jotka päälle ja pois kytkemällä saadaan tietyt valot päälle ja pois.

 

 

// *** LIGHTS ***

 

Var 0020, Link FSUIPC_OUT, Offset $0D0C, Length 1 // Valot bitteinä

Var 0120, Link IOCARD_SW, Input 67 // LIGHT Beacon

{

  IF V0120 = 1

  {

    V0020 = SETBIT 1

  }

  ELSE

  {

    V0020 = CLEARBIT 1

  }

}

 

Var 0121, Link IOCARD_SW, Input 66 // LIGHT Landing

{

  IF V0121 = 1

  {

    V0020 = SETBIT 2

  }

  ELSE

  {

    V0020 = CLEARBIT 2

  }

}

 

Var 0122, Link IOCARD_SW, Input 65 // LIGHT Taxi

{

  IF V0122 = 1

  {

    V0020 = SETBIT 3

  }

  ELSE

  {

    V0020 = CLEARBIT 3

  }

}

 

Var 0123, Link IOCARD_SW, Input 64 // LIGHT Navi

{

  IF V0123 = 1

  {

    V0020 = SETBIT 0

    V0020 = SETBIT 5

    // Navivalot ja paneelivalot samassa kytkimessä, eli mittarivalot kytkee  myös navivalot.

    // Esim. PA-28:ssa on kytketty näin, ja mulla ei ole erillistä kytkintä paneelivaloille.

  }

  ELSE

  {

    V0020 = CLEARBIT 0

    V0020 = CLEARBIT 5 // sama...

}

}

 

Var 0124, Link IOCARD_SW, Input 63 // LIGHT Strobes

{

IF V0124 = 1

  {

    V0020 = SETBIT 4

  }

  ELSE

  {

    V0020 = CLEARBIT 4

  }

}

 

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Var 0202, Link IOCARD_DISPLAY, Digit 4, Numbers 3 // altitude display

Var 0054, Link FSUIPC_IN, Offset $0ec6, Length 2 // current QNH * 16

Var 0055, Link FSUIPC_IN, Offset $6020, Length 8 // GPS altitude in metres

{

L0 = V0054 / 16 // Get current QNH setting

L0 = L0 - 1013 // difference to standard pressure

L0 = L0 * 27 // 1 millibar = 27 feet

L1 = V0055 * 3.2808399 // meters to feet

L1 = L1 - L0 // correct altitude for QNH1013

L1 = L1 / 100 (display in flight levels. 2500FT = FL025)

V0202 = TRUNC L1

}

 

Tämä tekee transponderiin korkeuskoodaimen näytön, eli näyttää lentopintoina (siis standardipaineella) mitä transponderi periaatteessa lähettäisi lennonjohtajan tutkanäytölle.

 

xpdr5.jpg

 

En tosin ole testannut paljon, on jo myöhä jne. Mutta ainakin tuossa on vähän aivojumppaa. Kiva härveli tuo SIOC tolta kannalta kyllä.

 

//Tuomas

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Sinä sitten jaksat näpertää! :o... taidan tästä itsekkin ruveta taas säätää...

 

*Kolvia ottamassa esille*

Jaa viesti


Link to post
Jaa muulla sivustolla

Minulla on tämmönen pyöritettävä mittari.. siis semmonen mitä käytetään autopiloteissa sun muissa..(otettu vanhasta joikkarista) Niin onko toi keltanen+ musta- punainen+?

 

[ attachment removed ]

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Jaakko: tuo voi olla mikä hyvänsä, riippuu ihan komponentista.

 

Tässä taas vähän koodia, audiopaneeli toimii nyt..

 

audiopanel4.jpg

 

>
// **** AUDIO PANEL ****

// ** LEDS **
Var 0301, Link IOCARD_OUT, Output 25 // COM1 Audio
Var 0302, Link IOCARD_OUT, Output 24 // COM2 Audio
Var 0303, Link IOCARD_OUT, Output 23 // BOTH Audio
Var 0304, Link IOCARD_OUT, Output 22 // AUX Audio
Var 0305, Link IOCARD_OUT, Output 21 // NAV1 Audio
Var 0306, Link IOCARD_OUT, Output 20 // NAV2 Audio
Var 0307, Link IOCARD_OUT, Output 19 // MKR Audio
Var 0308, Link IOCARD_OUT, Output 18 // ADF Audio

Var 0709, Link FSUIPC_IN, Offset $3122, Length 1 // Radio Audio Bytes
{
  V0301 = TESTBIT V0709, 7 // COM1
  V0302 = TESTBIT V0709, 6 // COM2
  V0303 = TESTBIT V0709, 5 // BOTH
  V0305 = TESTBIT V0709, 4 // NAV1
  V0306 = TESTBIT V0709, 3 // NAV2
  V0307 = TESTBIT V0709, 2 // MRKR
  V0308 = TESTBIT V0709, 0 // ADF
}

// FSUIPC radio audio variable bits
// 2^7	COM1 transmit
// 2^6	COM2 transmit
// 2^5	COM receive both
// 2^4	NAV1 sound
// 2^3	NAV2 sound
// 2^2	Marker sound
// 2^1	DME sound
// 2^0	ADF1 sound	

Var 0602, Link FSUIPC_OUT, Offset $3122, Length 1 // Radio Audio Bytes

// ** BUTTONS **
Var 0058, Link IOCARD_SW, Input 2, Type P // COM1 Audio
{
  V0602 = SETBIT 7 // COM1 vs COM2 - either is on. It's a toggle between these two in FS.
  V0602 = CLEARBIT 6
}
Var 0059, Link IOCARD_SW, Input 4, Type P // COM2 Audio
{
  V0602 = SETBIT 6
  V0602 = CLEARBIT 7
}
Var 0060, Link IOCARD_SW, Input 3, Type P // BOTH Audio
{
  V0602 = CHANGEBIT 5 V0060
}

//Var 0061, Link IOCARD_SW, Input 8, Type P // AUX Audio

Var 0062, Link IOCARD_SW, Input 7, Type P // NAV1 Audio
{
  V0602 = CHANGEBIT 4 V0062
}
Var 0063, Link IOCARD_SW, Input 0, Type P // NAV2 Audio
{
  V0602 = CHANGEBIT 3 V0063
}

Var 0064, Link IOCARD_SW, Input 6, Type P // MKR Audio
{
  V0602 = CHANGEBIT 2 V0064
}
Var 0065, Link IOCARD_SW, Input 5, Type P // ADF Audio
{
  V0602 = CHANGEBIT 0 V0065
}

 

Edit: lisäsinpä kuvan tännekin..

Jaa viesti


Link to post
Jaa muulla sivustolla

Tulipa koodattua perliä eilen vähän. Taisi olla yksi V1234 -muuttuja liikaa vilisemässä silmissä ja sai homma riittää, eihän niistä pidä kukaan tolkkua kun niitä on monta..

 

Eli, nyt voin kirjoittaa SIOC:ia näin:

Var $Init, Value 0 // INITIALISATION OF STUFF

{

}

 

// Gear lever

Var $LandingGear, Link FSUIPC_OUT, Offset $0BE8, Length 4 // gear, 0=up, 16383=dwn

Var $SWLandingGear, Link IOCARD_SW, Input 1 // Landing gear switch

{

  $LandingGear = $SWLandingGear * 16383

}

 

Ja sitten komentokehotteessa:

type your-script.txt | perl translate_variables.pl > output.txt

(tietty itse teen koodaamisen Linuxilla läppärissä, mutta homma toimii noin windowsilla)

 

Ja output.txt:iin putkahtaa seuraava koodi:

Var 0, Value 0 // INITIALISATION OF STUFF

{

}

 

// Gear lever

Var 1, Link FSUIPC_OUT, Offset $0BE8, Length 4 // gear, 0=up, 16383=dwn

Var 2, Link IOCARD_SW, Input 1 // Landing gear switch

{

V1 = V2 * 16383

}

 

Eli skripti muuntaa nuo $JärkevätNimet numeroiksi mitä SIOC tajuaa. Helpottaa ainakin omaa koodaustani.

 

Skripta: here.

 

Ja härveli on koodattu Perlillä minkä saa windowsille tästä:

Perl for Windows: here. - se on mukana valmiiksi jo kaikissa Linux-distroissa.

 

Toivottavasti toimii, se tekee vain sen, että jokainen $Muuttuja numeroidaan ja samaa numeroa sitten käytetään joka paikassa koodissa, joten homman pitäisi toimia.

 

Eka muuttuja on V0000 joka "ajetaan" aina sioc:ia startatessa, joten siihen kannattaa laittaa kaikki "alustukset" jos haluaa tiettyjä juttuja, esim "cold and dark" -systeemeitä.

 

Toivottavasti tuosta on jollekin muullekin iloa :)

 

//Tuomas

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Hei kaikki!

 

Olen käyttänyt Opencockpits Iocards USB-servo cardia ja SIMKITS elektroniikkaa jo pari kolme vuotta.

Yritimme tehdä manifold pressure mittarin, ja RPM mittarin, mutta ne liikkuvat epätasaisesti ja nykivät.

Ymmärsin että vika on varmastikkin FSUIPCssä, ja kirjoitin e-postin Pete Dowsonille.

 

Hi Pete!

 

I have a problem with a homebuilt manifold pressure gauge using a RC-servo pluged into Opencokpits servocard.

The gauge moves to it´s correct position, but it moves jerky.

Not with a smooth movement.

 

I have the exact same problem when I connect my homebuilt manifold pressure gauge to my Simkits interface card.

Simkits also use FSUIPC to read and write data to and from MS flightsimulator.

 

Are all microsoft flightsimulator instrument values read by FSUIPC updated at same rates?

 

Peten vastaus: "No. If you are talking about FS2004 or before, there are priorities, to avoid affecting FS performance."

 

Are the instrument values inside MS flightsimulator calculated at same rates? Or do some instruments have priority over others?

 

Peten vastaus: "No, I think they are mostly the same. But even FS's own gauges are a little jerky. If you enlarge them you can see this. They get away with it because they are normally too small to

 

notice. Programs like Project Magenta, and well-programmed add-on aircraft, tend to use their own smoothing (interpolation) to make the displayed gauge values change nice and smoothly."

 

I have a wild idea that the value for manifold pressure provided in offset Offset 08C0 through FSUIPC is updated at a too low speed.

Can you do something in FSUIPC to improve the data rate coming out if it is that whitch is causing my problem?

 

Peten vastaus: "I have just had a look. The Manifold Pressure values are part of a large group updated at a second (not top) priority, which rates it at a little over 4 updates per second -- a quarter of the normal update rate (18.2 per second).

FSUIPC has had this rate built in for these values for its whole life, 8 years now. Odd that itr should only now be seen as a problem?

Anyway, seeing as PCs are several times more powerful now than they were 8 years ago, I guess I could relax some of those timings. Are there any others whilst I'm at it?"

 

 

 

 

Ja Pete Dowson antoi minulle tällaisen linkin josta hain erikois version:

 

Try FSUIPC version 3.761, from here:

 

http://fsuipc.simflight.com/beta/FSUIPC3761.zip

 

Eilen siis valmistimme meidän Manifold pressure mittarin ja kierre mittarin meidän Convair Metropolitanissa, ja ne toimivat uskomattoman hyvin!

Ei mitään häiriöitä ja nykimistä!

 

Esko

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Joo, petelle kantsii kyllä antaa aina kommenttia, moni juttu selviää helposti.

 

Toinen tapahan olis koodata siocilla sit joku timer-funktio millä tietyllä tasaisella nopeudella siirretään aina mittarin arvoja "lisää" tai "vähemmän" -suuntaan kunnes arvot täsmäävät. Se saattais kanssa auttaa.

 

 

//T

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Olen koekäyttänyt siocilla toteutettua Variometriä ja Ias-mittaria...ongelmana on ääni?!

 

koneesta kuuluu nimittäin tasavälein skrubu...noin parin sekunnin välein..mikähän tää juttu on?

Jaa viesti


Link to post
Jaa muulla sivustolla

Tässä yksi tapa. Huomaa, että 180 kts jälkeen mittarin neula näyttää nopeuden tiheämmin.

Koko servon aluehan toimii arvoilla 0- 1022. Neula on tässä mittarissa 0:ssa arvolla 1000

(huom kuinka nopeusnäytö ensin pidetään alle ~40kts  0:ssa alkamalla laskutoimitus 1110:stä)

Homma pyörii rattaiden vuoksi väärinpäin, joten lopullinen laskutoimitus vähentää servon arvoja.

 

Alussa offset muunnetaan knotseiksi ja sitten hammasrattaille (scale) sopivaksi.

Nämä arvot toimivat Simkitsin USB rattaille, en ole katsonut niiden suhdetta...

mutta IO consolesta (kiitos Tuomas vinkistä) saa hyvin ulos offsettien todelliset arvot ja loput onkin sitten simppeliä kerto- ja jakolaskua

 

(..ai miksi en käytänyt Simkitsin USB mittareita...no kun niissä esim Jetin nopeusmittari alkaa toimia vasta ~60 kts:n

jälkeen semmosella huimalla yht äkkisellä loikalla...ei hyvä..)

 

 

// ***************************************************************************

// ** JP - Caravelle, IAS-SPEED  ***********************************************

// ***************************************************************************

//

Var 0100, Link FSUIPC_IN, Offset $02BC, Length 4, Type 1 // IAS

{

L0 = V0100 / 126.8 // IASoffset to kts

 

IF L0 < 180

{

L1 = L0 * 3.1 // scales LOW SPEED kts for servo

}

ELSE

{

L1 = L0 * 1.9 // scales HIGH SPEED kts for servo

L1 = L1 + 180 // ADDS value if speed is more than 180 KTS

}

 

L2 = 1110 - L1 // servo calc _ anticlockwise

 

IF L2 > 1000 // servo max limit

{

L2 = 1000

}

 

IF L2 < 20 // servo min limit

{

L2 = 20

}

 

V0120 = L2

 

}

 

Var 0120, Link USB_SERVOS, Device 0, Output 2, PosL 1, PosC 512, PosR 1023 // Airspeed Servo2

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Näin se taitaa mennä:

 

>
Var 82, Value 0 // joku muuttuja mitä halutaan muuttaa
Var 83, Link IOCARD_ENCODER, Input 61, Aceleration 1, Type 2
{ 
L0 = V83 * -1 // vaihdetaan suuntaa kun kolvasin väärin päin =)
V82 = ROTATE 1, 360, L0 
} 

 

Eli rotaryn arvo on joko 1 tai -1 ja eventti tulee aina kun ruuvaat yhden pykälän. Eventissä sit vaan tutkit että onko se rotary positiivinen vai negatiivinen ja siitä tiedät mitä pitää tehdä. Esim. toi ROTATE osaa ottaa sen tollai huomioon suoraan, tota L0:aa ei edes tarttis vaan vois laitaa suoraan vaan V82 = ROTATE, 1, 360, V83.

 

Näppäinemulaattoriin (siocin KEYS -härveliin siis) näyttää olevan pakko aina nollata muuttuja näppäinpainalluksen generoinnin jälkeen jotta näppäimet ei jää "pohjaan" - siksi tuossa on toi V3 = 0 aina koodin lopussa. Ja toi näppiseventtihän toimii siocissa niin että on yksi muuttuja minkä output on KEYS ja sit siihen määritellään sioc.ini:ssä mitä näppäintä painetaan kun muuttujan arvo on mikäkin. Toi on gepsin koodista, eli joku niistä rotaryistä tekee alaspäin ruuvatessa muuttujaan arvon 15, ja toiseen suuntaan arvon 16. INI:ssä sit määritelty että 15 tekee näppäinpainalluksen A ja 16 painalluksen B.

 

>
Var 120, Link IOCARD_ENCODER, Input 128, Aceleration 1, Type 2 
{ 
IF V120 > 0 // up 
{ 
V3 = 15 
} 
IF V120 < 0 // down 
{ 
V3 = 16 
} 
V3 = 0 
} 

 

- T

Jaa viesti


Link to post
Jaa muulla sivustolla

Tämä tekee transponderiin korkeuskoodaimen näytön, eli näyttää lentopintoina (siis standardipaineella) mitä transponderi periaatteessa lähettäisi lennonjohtajan tutkanäytölle.

 

xpdr5.jpg

 

En tosin ole testannut paljon, on jo myöhä jne. Mutta ainakin tuossa on vähän aivojumppaa. Kiva härveli tuo SIOC tolta kannalta kyllä.

 

//Tuomas

 

 

Var 0202, Link IOCARD_DISPLAY, Digit 4, Numbers 3 // altitude display

Var 0054, Link FSUIPC_IN, Offset $0ec6, Length 2 // current QNH * 16

Var 0055, Link FSUIPC_IN, Offset $6020, Length 8 // GPS altitude in metres

{

L0 = V0054 / 16 // Get current QNH setting

L0 = L0 - 1013 // difference to standard pressure

L0 = L0 * 27 // 1 millibar = 27 feet

L1 = V0055 * 3.2808399 // meters to feet

L1 = L1 - L0 // correct altitude for QNH1013

L1 = L1 / 100 (display in flight levels. 2500FT = FL025)

V0202 = TRUNC L1

}

 

 

Tässä koodissa mulla on ongelmana sammuttaa noi näytöt eli v202=-999999. Tällä tavalla toimii vain hetken. Sen jälkeen näytöt menee jälleen päälle, vaikka kytkin on edelleen "TEST" -asennossa. Mikä neuvoksi?

Jaa viesti


Link to post
Jaa muulla sivustolla

Voisin kuvitella että sun tarttee kaikkiin näyttöihin tehdä IF-lause jolla testaat onko transponderin moodi "ALT" tai "ON", jolloin näytetään lukemia, jos arvo on TEST, näytetään esim "8888" ja jos on STBY tai OFF, pistetään se -999999 tms joka tyhjää sen.

 

Esimerkkitilanne:

 

Koodi1: Tutkitaan FSUIPC:lla korkeustietoa ja pienen laskutoimituksen jälkeen transponderin numeronäyttöön pistetään "flight level"-lukema => näytössä "150"

Koodi2: Tutkitaan transponderin moodia, ja jos moodi on OFF, sammutetaan transponderin näytöt (arvoksi se mikälie -999999) => näyttö tyhjänä

 

Sinänsähän toi vaikuttais järkevältä, muttei taida toimia käytännössä koska FSUIPC päivittää tuota simun korkeustietoa koko ajan kun se muuttuu kun kone liikkuu => elikkäs koodi1 ajetaan, ja sit näytössä tosiaan hetken päästä näkyy taas se korkeustieto vaikka moodi on koko ajan OFF-asennossa.

 

Se miten toi pitää tehdä varmaankin, yksi mahdollisuus lienee näin:

 

Koodi: Tutkitaan FSUIPC:n korkeustietoa ja IF transponderin moodi on ALT tai ON, pistetään näyttöön se lukema, ELSE pistetään näyttö tyhjäksi.

 

Toivottavasti tuo a) toimii ja b) jotenkin selventää asiaa? :)

 

- T

Jaa viesti


Link to post
Jaa muulla sivustolla

Luo uusi käyttäjätunnus tai kirjaudu sisään

Sinun täytyy olla jäsen osallistuaksesi keskusteluun

Luo käyttäjätili

Rekisteröi uusi käyttäjätili helposti ja nopeasti!


Luo uusi käyttäjätili

Kirjaudu sisään

Sinulla on jo käyttäjätili?


Kirjaudu sisään