FSnordic.net
Home Help Rules Login Register
Welcome, Guest. Please login or register.
20.11.17, 21:01

Login with username, password and session length
+  FSnordic.net Forums
|-+  Finnish Discussion / Lentosimulaattorit
| |-+  Kotiohjaamot / Home Cockpits (Moderators: Jari Mikkilä, Joni Öfverström, Tuomas Kuosmanen)
| | |-+  SIOC-ohjelmointia (IOCards)
:  

« previous thread next thread »
Pages: 1 [2] 3 4 Reply Print
Author Topic: SIOC-ohjelmointia (IOCards)  (Read 54254 times)
Raine Ampuja
Offline Offline

Posts: 417
Date Registered: 27.07.01

IAS koodi
« Reply #20 on: 18.04.08, 19:35 »

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
« Last Edit: 17.05.08, 16:04 by Jalmari Pipo »
Raine Ampuja
Offline Offline

Posts: 417
Date Registered: 27.07.01

Re: SIOC-ohjelmointia (IOCards)
« Reply #21 on: 17.05.08, 16:06 »

Hei!

Miten SIOC lukee rotaryn encoderia....olisiko jossain nähtävissä malli...?
Tuomas Kuosmanen
Moderator
Offline Offline

Posts: 10450
Date Registered: 18.06.02

WWW
Re: SIOC-ohjelmointia (IOCards)
« Reply #22 on: 18.05.08, 09:18 »

Näin se taitaa mennä:

Code:
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.

Code:
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

Ville Pietilä
Offline Offline

Posts: 745
Date Registered: 17.05.06

WWW
Re: SIOC-ohjelmointia (IOCards)
« Reply #23 on: 17.07.08, 17:34 »

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



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?

//Vipu
Tuomas Kuosmanen
Moderator
Offline Offline

Posts: 10450
Date Registered: 18.06.02

WWW
Re: SIOC-ohjelmointia (IOCards)
« Reply #24 on: 17.07.08, 19:38 »

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? Smiley

- T
« Last Edit: 17.07.08, 19:44 by Tuomas Kuosmanen »

Ville Pietilä
Offline Offline

Posts: 745
Date Registered: 17.05.06

WWW
Re: SIOC-ohjelmointia (IOCards)
« Reply #25 on: 18.07.08, 06:57 »

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
}


Var 300 Link IOCARD_SW, Input 1 // test switch
{
IF V0300=1
{
V0202=? (mitä tuohon tuodaan?)
{
ELSE
v202=-999999

näinkö?

Eli jos kytkin on asennossa "1" haetaan tieto, mutta mikä?

ja jos kytkin on "0" syötetään näytöille arvo -999999 (pois päältä)

//Vipu
Tuomas Kuosmanen
Moderator
Offline Offline

Posts: 10450
Date Registered: 18.06.02

WWW
Re: SIOC-ohjelmointia (IOCards)
« Reply #26 on: 18.07.08, 19:17 »

Var 300 Link IOCARD_SW, Input 1 // test switch
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)
IF V0300=1
{
   V0202 = TRUNC L1
}
ELSE
{
   V202=-999999
}
}

Oliskohan jotenkin noin, syntaksista en ole ihan varma että meneekö toi if-else just noin, mut siocin helpistä selvinnee.

Mut periaate siis että just siinä kun oot tunkemassa sitä näyttöön sitä arvoa, tsekkaat josko kytkin on missä asennossa.

Tietty tossa sit vois miettiä jotain subrutine:a millä tekis tommosia juttuja keskitetysti (AVIONICS-väylän virta -tsekkaus tms jne..) mut sitä en sit itekään tiedä miten se tehdään kun en subrutineja oikein sioc:issa tajua.

- T

Tuomas Kuosmanen
Moderator
Offline Offline

Posts: 10450
Date Registered: 18.06.02

WWW
Re: SIOC-ohjelmointia (IOCards)
« Reply #27 on: 09.11.08, 18:22 »

Jaahas, pitkästä aikaa taas jatkoa ketjuun  Cool

Huomasinpa taas että koneen päivitettyäni (XP Pro) sioc ei kääntänyt koodia ollenkaan, herjasi vaan käsittämättömiä virheilmoituksia eikä mikään toiminut...  Angry Aikani taas kerran pähkittyäni hokasin vanhan windows-kikan freewaresoftien suhteen: pistetään windowsin regional -asetuksista numero- ja päivämääräasetukset espanjan malliin (Spanish/Spain) ja taasen alkaa pelittää..

Miten toi on aina noin vaikeaa tuo koodaus niin että tuo toimisi..?  Grin
Mutta hyvä muistaa tuokin kikka..

EDIT: Eipäs ollutkaan vaan SIOC compiler ei tykkää UTF-8-merkeistä, vaan olettaa että on normi windowsin western encoded tms merkistönä tallennettu se file notepadilla, jos noita koodeja tekee suoraan tekstinä.


- T
« Last Edit: 12.12.08, 09:02 by Tuomas Kuosmanen »

Mika Jylhä
Offline Offline

Posts: 266
Date Registered: 29.12.06

Re: SIOC-ohjelmointia (IOCards)
« Reply #28 on: 19.11.08, 16:52 »

Omaa spagettia lautaselle...

Tässä oma koodi tähän mennessä... aluksi en edes tiennyt miten SIOC:n käyttämä .ssi file tehdään  Huh
Aikansa kun kokeilee ja lukee muiden koodeja alkaa ihmeitä tapahtua  thmbup

// *****************************************************************************
// * Config_SIOC ver 3.4   -     By Manolo Vélez    -    www.opencockpits.com
// *****************************************************************************
// * FileName : cold_dark.txt
// * Date : 17.11.2008


//  GA-Twin simulator SIOC code
//  Mika Jylhä 2008
//
//  Flight Simulator variables = 1-199
//  Switches and encoders = 200-399
//  Radiostack = 400-599
//  Outputs = 600-799
//  Subroutines = 800-899
//  Flight instruments = 1000-1099
//  Engine instruments = 1100-1199
//
//     ****************************************
//     VAR 0000 -> 0199  Global variables
//     ****************************************

Var 0000, Value 0  // Init stuff
{
  &Nav1_sby_mhz = 14
  &Nav1_sby_khz = 20
  &Nav1_use_mhz = 9
  &Nav1_use_khz = 10
  &Com1_sby_mhz = 31
  &Com1_sby_khz = 25
  &Com1_use_mhz = 21
  &Com1_use_khz = 60
  &FS_batt = &Master_SW
  &FS_avionics = &Avionics_SW
  &TPdigit1 = 2
  &TPdigit2 = 0
  &TPdigit3 = 0
  &TPdigit4 = 0
  CALL &transponder
  CALL &Nav1_sby
  CALL &Nav1_use
  CALL &Com1_sby
  CALL &Com1_use
}
Var 0001, name FS_batt, Link FSUIPC_OUT, Offset $281C, Length 4     
Var 0002, name FS_avionics, Link FSUIPC_OUT, Offset $2E80, Length 4     
Var 0003, name FS_pitot, Link FSUIPC_OUT, Offset $029C, Length 1
Var 0005, name FS_light, Link FSUIPC_OUT, Offset $0D0C, Length 1
Var 0007, name FS_gear, Link FSUIPC_OUT, Offset $0BE8, Length 4
Var 0008, name FS_flaps, Link FSUIPC_OUT, Offset $0BD8, Length 4
Var 0009, name FS_prop_sync, Link FSUIPC_OUT, Offset $2EC8, Length 4
Var 0010, name FS_LENG_LMAG, Link FSUIPC_OUT, Offset $3810, Length 4     
Var 0011, name FS_LENG_RMAG, Link FSUIPC_OUT, Offset $3814, Length 4     
Var 0012, name FS_LENG_START, Link FSUIPC_OUT, Offset $0892, Length 2     
Var 0013, name FS_LENG_ALT, Link FSUIPC_OUT, Offset $3B78, Length 4     
Var 0014, name FS_nosegear, Link FSUIPC_IN, Offset $0BEC, Length 4
{
CALL &Gear
}
Var 0015, name FS_leftgear, Link FSUIPC_IN, Offset $0BF4, Length 4
{
CALL &Gear
}
Var 0016, name FS_rightgear, Link FSUIPC_IN, Offset $0BF0, Length 4
{
CALL &Gear
}
Var 0017, name FS_fuelselect, Link FSUIPC_IN, Offset $0AF8, Length 2
Var 0018, name FS_gearsw, Link FSUIPC_OUT, Offset $0BE8, Length 4 // Lg position, 0=up, 16383=dwn
Var 0019, name FS_com1_LED, Link IOCARD_OUT Output 21  // COM1 Audio
Var 0020, name FS_com2_LED, Link IOCARD_OUT Output 22  // COM2 Audio
Var 0021, name FS_both_LED, Link IOCARD_OUT Output 23  // BOTH Audio
Var 0022, name FS_nav1_LED, Link IOCARD_OUT Output 24  // NAV1 Audio
Var 0023, name FS_nav2_LED, Link IOCARD_OUT Output 25  // NAV2 Audio
Var 0024, name FS_mkr_LED, Link IOCARD_OUT Output 26   // MKR Audio
Var 0025, name FS_dme_LED, Link IOCARD_OUT Output 27   // DME Audio
Var 0026, name FS_adf_LED, Link IOCARD_OUT Output 28   // ADF Audio
Var 0027, name FS_RENG_LMAG, Link FSUIPC_OUT, Offset $3750, Length 4   // ENG2 LEFT mag
Var 0028, name FS_RENG_RMAG, Link FSUIPC_OUT, Offset $3754, Length 4   // ENG2 RIGHT mag
Var 0029, name FS_RENG_START, Link FSUIPC_OUT, Offset $092A, Length 2  // ENG1 Starter Set
Var 0030, name FS_RENG_ALT, Link FSUIPC_OUT, Offset $3AB8, Length 4    // Alternator Right
Var 0031, name FS_FUELPUMPS, Link FSUIPC_OUT, Offset $3125, Length 1   // Fuel Pumps
Var 0032, name FS_COM1_SBY, Link FSUIPC_OUT, Offset $311A, Length 2    // tarviiko Huh
Var 0033, name FS_COM1_USE, Link FSUIPC_OUT, Offset $034E, Length 2
Var 0034, name FS_NAV1_SBY, Link FSUIPC_OUT, Offset $311E, Length 2    // tarviiko ??
Var 0035, name FS_NAV1_USE, Link FSUIPC_OUT, Offset $0350, Length 2
Var 0036, name Avionics
Var 0037, name FS_tpcode, Link FSUIPC_OUT, Offset $0354, Length 2
Var 0038, name TP_code
Var 0039, name TPdigit1
Var 0040, name TPdigit2
Var 0041, name TPdigit3
Var 0042, name TPdigit4
Var 0043, name Amps, Link FSUIPC_IN, Offset $2824, Length 8
Var 0044, name FS_audio, Link FSUIPC_INOUT, Offset $3122, Length 1     // Radio Audio Bytes
{
CALL &Audio_panel
}

//     ********************************
//     VAR 0200 -> 0399  Switches
//     ********************************

Var 0200, Link IOCARD_SW, Input 0, Type P     // DME Audio
{
IF &Avionics = 1
  {
  &FS_audio = CHANGEBIT 1 ,V0200
  }
}

Var 0201, Link IOCARD_SW, Input 1, Type P     // COM1 Audio
{
IF &Avionics = 1
  {
  &FS_audio = SETBIT 7
  &FS_audio = CLEARBIT 6
  }
}

Var 0202, Link IOCARD_SW, Input 2, Type P     // COM2 Audio
{
IF &Avionics = 1
  {
  &FS_audio = SETBIT 6
  &FS_audio = CLEARBIT 7
  } 
}

Var 0203, Link IOCARD_SW, Input 3, Type P     // NAV1 Audio
{
IF &Avionics = 1
  { 
  &FS_audio = CHANGEBIT 4 ,V0203
  }
}

Var 0204, Link IOCARD_SW, Input 4, Type P     // BOTH Audio
{
IF &Avionics = 1
  {
  &FS_audio = CHANGEBIT 5 ,V0204
  }
}

Var 0206, Link IOCARD_SW, Input 6, Type P     // ADF Audio
{
IF &Avionics = 1
  {
  &FS_audio = CHANGEBIT 0 ,V0206
  }
}

Var 0207, Link IOCARD_SW, Input 7, Type P     // MKR Audio
{
IF &Avionics = 1
  {
  &FS_audio = CHANGEBIT 2 ,V0207
  }
}

Var 0208, Link IOCARD_SW, Input 8, Type P     // NAV2 Audio
{
IF &Avionics = 1
  {
  &FS_audio = CHANGEBIT 3 ,V0208
  }
}

Var 0209, name Strobe_SW, Link IOCARD_SW, Input 9     // Strobe_sw
{
CALL &Switches
}

Var 0210, name Master_SW, Link IOCARD_SW, Input 10     // Master_sw
{
&FS_batt = &Master_SW
CALL &Avionics_state
CALL &Switches 
}

Var 0211, name Avionics_SW, Link IOCARD_SW, Input 11     // Avionics_sw
{
&FS_avionics = &Avionics_SW   
CALL &Avionics_state
}
Var 0212, name Beacon_SW, Link IOCARD_SW, Input 12     // Beacon_sw
{
CALL &Switches
}

Var 0213, name Pitot_SW, Link IOCARD_SW, Input 13     
{
&FS_Pitot = &Pitot_SW
}

Var 0214, name Nav1_toggle_sw, Link IOCARD_SW, Input 14     // Nav1 Toggle switch
{
IF &Nav1_toggle_sw = 1
{
L0 = &Nav1_sby_khz
L1 = &Nav1_use_khz
&Nav1_sby_khz = L1
&Nav1_use_khz = L0
L0 = &Nav1_sby_mhz
L1 = &Nav1_use_mhz
&Nav1_sby_mhz = L1
&Nav1_use_mhz = L0
}
CALL &Nav1_sby
CALL &Nav1_use
}

Var 0215, name Gear_SW, Link IOCARD_SW, Input 15     // Gear_sw
{
&FS_gear = &Gear_SW
CALL &Gear 
}

Var 0216, name Ldglight_SW, Link IOCARD_SW, Input 16   
{
CALL &Switches
}

Var 0217, name Navlights_SW, Link IOCARD_SW, Input 17   
{
CALL &Switches
}

Var 0218, name Com1_toggle_sw, Link IOCARD_SW, Input 18     // Com1 Toggle switch
{
IF &Com1_toggle_sw = 1
{
L0 = &Com1_sby_khz
L1 = &Com1_use_khz
&Com1_sby_khz = L1
&Com1_use_khz = L0
L0 = &Com1_sby_mhz
L1 = &Com1_use_mhz
&Com1_sby_mhz = L1
&Com1_use_mhz = L0
}
CALL &Com1_sby
CALL &Com1_use
}

Var 0219, name Nav1_mhz, Link IOCARD_ENCODER, Input 19, Aceleration 2, Type 2
{
L0 = &Nav1_mhz
&Nav1_sby_mhz = ROTATE 8, 17, L0
}

Var 0221, name Nav1_khz, Link IOCARD_ENCODER, Input 21, Aceleration 2, Type 2
{
L0 = &Nav1_khz * 5
&Nav1_sby_khz = ROTATE 0, 99, L0
}

Var 0223, name Com1_mhz, Link IOCARD_ENCODER, Input 23, Aceleration 2, Type 2
{
L0 = &Com1_mhz
&Com1_sby_mhz = ROTATE 18, 35, L0
}

Var 0225, name Com1_khz, Link IOCARD_ENCODER, Input 25, Aceleration 2, Type 2
{
L0 = &Com1_khz * 5
&Com1_sby_khz = ROTATE 0, 99, L0
}

Var 0228, name TPdigit1_in, Link IOCARD_ENCODER, Input 28, Aceleration 2, Type 2
{
L0 = &TPdigit1_in
&TPdigit1 = ROTATE 0, 7, L0
CALL &transponder
}

Var 0230, name TPdigit2_in, Link IOCARD_ENCODER, Input 30, Aceleration 2, Type 2
{
L0 = &TPdigit2_in
&TPdigit2 = ROTATE 0, 7, L0
CALL &transponder
}

Var 0232, name TPdigit3_in, Link IOCARD_ENCODER, Input 32, Aceleration 2, Type 2
{
L0 = &TPdigit3_in
&TPdigit3 = ROTATE 0, 7, L0
CALL &transponder
}

Var 0234, name TPdigit4_in, Link IOCARD_ENCODER, Input 34, Aceleration 2, Type 2
{
L0 = &TPdigit4_in
&TPdigit4 = ROTATE 0, 7, L0
CALL &transponder
}


//     ***********************************
//     VAR 0400 -> 0599  Radiostack
//     ***********************************

Var 0401, name Nav1_sby_mhz
{
CALL &Nav1_sby
}

Var 0402, name Nav1_sby_khz
{
CALL &Nav1_sby
}

Var 0403, name Nav1_use_mhz
{
CALL &Nav1_use
}

Var 0404, name Nav1_use_khz
{
CALL &Nav1_use
}

Var 0405, name Com1_sby_mhz
{
CALL &Com1_sby
}

Var 0406, name Com1_sby_khz
{
CALL &Com1_sby
}

Var 0407, name Com1_use_mhz
{
CALL &Com1_use
}

Var 0408, name Com1_use_khz
{
CALL &Com1_use
}

//     **********************************
//     VAR 0600 -> 0799  Outputs
//     **********************************

Var 0611, name Nose_green, Link IOCARD_OUT, Output 11
Var 0612, name Left_green, Link IOCARD_OUT, Output 12
Var 0613, name Right_green, Link IOCARD_OUT, Output 13
Var 0614, name Gear_transit, Link IOCARD_OUT, Output 14
Var 0615, name Desimal, Link IOCARD_OUT, Output 15


//     **********************************
//     VAR 0800 -> 0899  Subroutines
//     **********************************

Var 0800, name Audio_panel, Link SUBRUTINE // audiopanel leds
{
IF &Avionics = 1
   {
   &FS_com1_LED = TESTBIT &FS_audio ,7     // COM1
   &FS_com2_LED = TESTBIT &FS_audio ,6     // COM2
   &FS_both_LED = TESTBIT &FS_audio ,5     // BOTH
   &FS_nav1_LED = TESTBIT &FS_audio ,4     // NAV1
   &FS_nav2_LED = TESTBIT &FS_audio ,3     // NAV2
   &FS_mkr_LED = TESTBIT &FS_audio ,2     // MKR
   &FS_dme_LED = TESTBIT &FS_audio ,1     // DME
   &FS_adf_LED = TESTBIT &FS_audio ,0     // ADF
   }
   ELSE
   {
   &FS_com1_LED = 0     // COM1
   &FS_com2_LED = 0     // COM2
   &FS_both_LED = 0     // BOTH
   &FS_nav1_LED = 0     // NAV1
   &FS_nav2_LED = 0     // NAV2
   &FS_mkr_LED = 0     // MKR
   &FS_dme_LED = 0     // DME
   &FS_adf_LED = 0     // ADF
   }
}

Var 0801, name Nav1_sby, Link SUBRUTINE
{
IF &Avionics = 1
   { 
   L0 = &Nav1_sby_mhz * 100
   L0 = L0 + &Nav1_sby_khz
   &Nav1_sby_out = L0   
   &Desimal = 1
   &FS_NAV1_SBY = TOBCD &Nav1_sby_out 
   }
   ELSE
   {
   &Nav1_sby_out = -999999 
   &Desimal = 0
   }
}

Var 0802, name Nav1_use, Link SUBRUTINE
{
IF &Avionics = 1
   { 
   L0 = &Nav1_use_mhz * 100
   L0 = L0 + &Nav1_use_khz
   &Nav1_use_out = L0   
   &Desimal = 1
   &FS_NAV1_USE = TOBCD &Nav1_use_out 
   }
   ELSE
   {
   &Nav1_use_out = -999999 
   &Desimal = 0
   }
}

Var 0803, name Com1_sby, Link SUBRUTINE // Nav 1 sby taajuus näytölle
{
IF &Avionics = 1
   { 
   L0 = &Com1_sby_mhz * 100
   L0 = L0 + &Com1_sby_khz
   &Com1_sby_out = L0   
   &Desimal = 1
   &FS_COM1_SBY = TOBCD &Com1_sby_out 
   }
   ELSE
   {
   &Com1_sby_out = -999999 
   &Desimal = 0
   }
}

Var 0804, name Com1_use, Link SUBRUTINE
{
IF &Avionics = 1
   { 
   L0 = &Com1_use_mhz * 100
   L0 = L0 + &Com1_use_khz
   &Com1_use_out = L0   
   &Desimal = 1
   &FS_COM1_USE = TOBCD &Com1_use_out 
   }
   ELSE
   {
   &Com1_use_out = -999999 
   &Desimal = 0
   }
}

Var 0805, name Avionics_state, Link SUBRUTINE
{
L0 = &Master_SW + &Avionics_SW
IF L0 = 2
   {
   &Avionics = 1
   }
   ELSE
   {
   &Avionics = 0
   }
CALL &Nav1_sby
CALL &Nav1_use
CALL &Com1_sby
CALL &Com1_use
CALL &Audio_panel
CALL &Gear
CALL &transponder
}

Var 0806, name Gear, Link SUBRUTINE
{
IF &Master_SW = 0
   {
   &Gear_transit = 0
   &Nose_green = 0
   &FS_rightgear = 0
   &Left_green = 0
   }
   ELSE
   {
   IF &FS_nosegear < 16383
      {
      &Gear_transit = 1
      &Nose_green = 0
      }
   IF &FS_nosegear = 0
      {
      &Gear_transit = 0
      }
   IF &FS_nosegear = 16383
      {
      &Nose_green = 1
      &Gear_transit = 0
      }
   IF &FS_leftgear = 16383
      {
      &Left_green = 1
      }
      ELSE
      {
      &Left_green = 0
      }
   IF &FS_rightgear = 16383
      {
      &Right_green = 1
      }
      ELSE
      {
      &Right_green = 0
      }
   }   
}   

Var 0807, name Switches, Link SUBRUTINE
{
IF &Master_SW = 0
   {
   &FS_light = CLEARBIT 0
   &FS_light = CLEARBIT 1
   &FS_light = CLEARBIT 2
   &FS_light = CLEARBIT 4
   &FS_light = CLEARBIT 5
   }
   ELSE
   {
   &FS_light = CHANGEBIT 0 &Navlights_SW
   &FS_light = CHANGEBIT 1 &Beacon_SW 
   &FS_light = CHANGEBIT 2 &Ldglight_SW
   &FS_light = CHANGEBIT 4 &Strobe_SW
   &FS_light = CHANGEBIT 5 &Navlights_SW
   }
}

Var 0808, name transponder, Link SUBRUTINE
{
L0 = &TPdigit1 * 1000
L1 = &TPdigit2 * 100
L0 = L0 + L1
L1 = &TPdigit3 * 10
L0 = L0 + L1
L0 = L0 + &TPdigit4
&TP_code = L0
&FS_tpcode = TOBCD &TP_code
}

// L0 = V0410 * 1000
//  L1 = V0411 * 100
//  L0 = L0 + L1
//  L1 = V0412 * 10
//  L0 = L0 + L1
//  L0 = L0 + V0413
//  &XPNDRTOFS = TOBCD L0
//  &XPNDRDISP = L0   
 
 
//     ********************************
//     VAR 0900-> 0999  Displays
//     ********************************

Var 0900, name Nav1_sby_out, Link IOCARD_DISPLAY, Digit 0, Numbers 5
Var 0901, name Nav1_use_out, Link IOCARD_DISPLAY, Digit 5, Numbers 5
Var 0902, name Com1_sby_out, Link IOCARD_DISPLAY, Digit 10, Numbers 5
Var 0903, name Com1_use_out, Link IOCARD_DISPLAY, Digit 16, Numbers 5








« Last Edit: 10.12.08, 19:57 by Mika Jylhä »
Tuomas Kuosmanen
Moderator
Offline Offline

Posts: 10450
Date Registered: 18.06.02

WWW
Re: SIOC-ohjelmointia (IOCards)
« Reply #29 on: 12.12.08, 09:00 »

Mainiota mainiota! Tuossa onkin hyvää logiikkaa avionics master + battery -juttujen miettimistä varten Smiley

- T

O-P Pietila
Offline Offline

Posts: 2462
Date Registered: 26.09.02

Re: SIOC-ohjelmointia (IOCards)
« Reply #30 on: 25.12.08, 15:03 »

Moi,

Pieni probleema:

Com2:n isompi rotary kasvattaa lukuja väärään suuntaan, eli kun väännän sisempää Com2:n rotaryä vasemmalle, luvut kasvavat ja päinvastoin.

Sama ongelma NAV2:n ulommassa rotaryssä, eli suunta pitäisi kääntää. Apuja kaivataan..

----------------------------------------------------------------------------------------------------------------------

Var 0210, name FS_C2_SB_BCD, Link FSUIPC_INOUT, Offset $311C, Length 2     // FS COM2 standby frequency in BCD format

Var 0218, name FS_C2_ACT_BCD, Link FSUIPC_IN, Offset $3118, Length 2     // FS COM2 active frequency in BCD format
{
  &DISP_C2_ACT = FROMBCD &FS_C2_ACT_BCD     // Update C1 active freq display (4 digits)
  CALL &C2_LH_ROT_VAL     // Align rotary with new C2 SB integer val
  CALL &C2_RH_ROT_VAL     // Align rotary with new C2 SB decimal val
  CALL &C2_UPDATE_LHS
  CALL &C2_UPDATE_RHS
}

Var 0219, name FS_C2_SWAP, Link FSUIPC_OUT, Offset $3123, Length 1     // FS COM2 active standby swap

Var 0220, name C2_SB_AS_DEC     // COM2 standby frequency in decimal format

Var 0239, name C2_SB_LHS     // COM2 standby frequency integers

Var 0240, name C2_SB_RHS     // COM2 standby frequency decimals

Var 0241, name C2_RHS_ROT_VAL     // COM2 right hand rotary encoder ref value

Var 0242, name C2_LHS_ROT_VAL     // COM2 left hand rotary encoder ref value

Var 0243, name ROT_C2_LHS, Link IOCARD_ENCODER, Input 69, Aceleration 0
{
  &C2_LHS_ROT_VAL = ROTATE 18 ,36 ,&ROT_C2_LHS
  CALL &C2_UPDATE_LHS
  CALL &SET_FS_C2_SB
}

Var 0244, name ROT_C2_RHS, Link IOCARD_ENCODER, Input 64, Aceleration 2
{
  &C2_RHS_ROT_VAL = ROTATE 0 ,39 ,&ROT_C2_RHS
  CALL &C2_UPDATE_RHS
  CALL &SET_FS_C2_SB
}

Var 0245, name SW_C2_SWAP, Link IOCARD_SW, Input 58
{
  &FS_C2_SWAP = TOGGLE 2
}

Var 0246, name DISP_C2_SB_LHS, Link IOCARD_DISPLAY, Digit 10, Numbers 2     // Standby integers

Var 0247, name DISP_C2_SB_RHS, Link IOCARD_DISPLAY, Digit 8, Numbers 2     // Standby decimals

Var 0248, name DISP_C2_ACT, Link IOCARD_DISPLAY, Digit 12, Numbers 4

Var 0249, name C2_LH_ROT_VAL, Link SUBRUTINE     // Aligns LH rotary ref with COM2 SB freq
{
  L0 = FROMBCD &FS_C2_SB_BCD
  L1 = L0 / 100
  &C2_LHS_ROT_VAL = TRUNC L1
}

Var 0250, name C2_RH_ROT_VAL, Link SUBRUTINE     // Aligns RH rotary ref with COM2 SB freq
{
  L0 = FROMBCD &FS_C2_SB_BCD
  L1 = &C2_LHS_ROT_VAL * 100
  L2 = L0 - L1
  &C2_RHS_ROT_VAL = L2 / 2.487179
}

Var 0251, name C2_UPDATE_LHS, Link SUBRUTINE     // Update COM2 stanby integers
{
  &DISP_C2_SB_LHS = &C2_LHS_ROT_VAL         // Set COM1 standby integer display
  &C2_SB_LHS = &C2_LHS_ROT_VAL   
}

Var 0252, name C2_UPDATE_RHS, Link SUBRUTINE     // Update COM2 standby decimals
{
  L0 = &C2_RHS_ROT_VAL * 2.5
  &C2_SB_RHS = TRUNC L0
  &DISP_C2_SB_RHS = &C2_SB_RHS   
}

Var 0253, name SET_FS_C2_SB, Link SUBRUTINE     // Update COM2 standby frequency in FS
{
  L0 = &C2_SB_LHS * 100
  L1 = L0 + &C2_SB_RHS
  &FS_C2_SB_BCD = TOBCD L1
}

Var 0254, name FS_N2_SB_BCD, Link FSUIPC_INOUT, Offset $3120, Length 2     // FS NAV2 standby frequency in BCD format

Var 0255, name FS_N2_ACT_BCD, Link FSUIPC_IN, Offset $0352, Length 2     // FS NAV2 active frequency in BCD format
{
  &DISP_N2_ACT = FROMBCD &FS_N2_ACT_BCD     // Update N2 active freq display (4 digits)
  CALL &N2_LH_ROT_VAL     // Align rotary with new N2 SB integer val
  CALL &N2_RH_ROT_VAL     // Align rotary with new N2 SB decimal val
  CALL &N2_UPDATE_LHS
  CALL &N2_UPDATE_RHS
}

Var 0256, name FS_N2_SWAP, Link FSUIPC_OUT, Offset $3123, Length 1     // FS NAV2 active standby swap

Var 0258, name N2_SB_AS_DEC     // NAV2 standby frequency in decimal format

Var 0259, name N2_SB_LHS     // NAV2 standby frequency integers

Var 0260, name N2_SB_RHS     // NAV2 standby frequency decimals

Var 0262, name N2_RHS_ROT_VAL     // NAV2 right hand rotary encoder ref value

Var 0264, name N2_LHS_ROT_VAL     // NAV2 left hand rotary encoder ref value

Var 0266, name ROT_N2_LHS, Link IOCARD_ENCODER, Input 60, Aceleration 0
{
  &N2_LHS_ROT_VAL = ROTATE 8 ,17 ,&ROT_N2_LHS
  CALL &N2_UPDATE_LHS
  CALL &SET_FS_N2_SB
}

Var 0268, name ROT_N2_RHS, Link IOCARD_ENCODER, Input 55, Aceleration 0
{
  &N2_RHS_ROT_VAL = ROTATE 0 ,39 ,&ROT_N2_RHS
  CALL &N2_UPDATE_RHS
  CALL &SET_FS_N2_SB
}

Var 0270, name SW_N2_SWAP, Link IOCARD_SW, Input 59
{
  &FS_N2_SWAP = TOGGLE 0
}

Var 0271, name DISP_N2_SB_LHS, Link IOCARD_DISPLAY, Digit 2, Numbers 2     // Standby integers

Var 0272, name DISP_N2_SB_RHS, Link IOCARD_DISPLAY, Digit 0, Numbers 2     // Standby decimals

Var 0273, name DISP_N2_ACT, Link IOCARD_DISPLAY, Digit 4, Numbers 4

Var 0274, name N2_LH_ROT_VAL, Link SUBRUTINE     // Aligns LH rotary ref with NAV2 SB freq
{
  L0 = FROMBCD &FS_N2_SB_BCD
  L1 = L0 / 100
  &N2_LHS_ROT_VAL = TRUNC L1
}

Var 0275, name N2_RH_ROT_VAL, Link SUBRUTINE     // Aligns RH rotary ref with NAV2 SB freq
{
  L0 = FROMBCD &FS_N2_SB_BCD
  L1 = &N2_LHS_ROT_VAL * 100
  L2 = L0 - L1
  &N2_RHS_ROT_VAL = L2 / 2.487179
}

Var 0276, name N2_UPDATE_LHS, Link SUBRUTINE     // Update NAV2 stanby integers
{
  &DISP_N2_SB_LHS = &N2_LHS_ROT_VAL         // Set NAV2 standby integer display
  &N2_SB_LHS = &N2_LHS_ROT_VAL   
}

Var 0278, name N2_UPDATE_RHS, Link SUBRUTINE     // Update NAV2 standby decimals
{
  L0 = &N2_RHS_ROT_VAL * 2.5
  &N2_SB_RHS = TRUNC L0
  &DISP_N2_SB_RHS = &N2_SB_RHS   
}

Var 0280, name SET_FS_N2_SB, Link SUBRUTINE     // Update NAV2 standby frequency in FS
{
  L0 = &N2_SB_LHS * -100
  L1 = L0 + &N2_SB_RHS
  &FS_N2_SB_BCD = TOBCD L1
}
Tuomas Kuosmanen
Moderator
Offline Offline

Posts: 10450
Date Registered: 18.06.02

WWW
Re: SIOC-ohjelmointia (IOCards)
« Reply #31 on: 25.12.08, 21:04 »

V0123 = V0123 * -1

..auttaa tällaisissa tilanteissa ja kääntää rotaryn suunnan. :-)

- T

Ville Pietilä
Offline Offline

Posts: 745
Date Registered: 17.05.06

WWW
Re: SIOC-ohjelmointia (IOCards)
« Reply #32 on: 16.12.09, 10:19 »

Tervehdys!

Tarkoituksena on nyt ohjelmoida tuo GNS430+GTX327 tuolla "näppäinemulaatorilla", mutta en ymmärrä paria asiaa. Eli haluaisin lähettää komennon CTRL-SHIFT-A kun gepsin nappia painetaan. 

Meneekö homma näin?

Ensin määritetään rxpgns.iniin vaikka nappi CDI joka olisi CTRL-SHIFT-A. (530_CDI=CTRL-SHIFT-A)  Sitten ilmeisesti tuo pitää määrittää seuraavaksi sioc.iniin. Mutta sitten tulee se asia jota ei ymmärrä:

Sioc.iniin tulee vain tälläisiä määrityksiä Esim #1=\B\A. Mistä tidän mikä on sitten CTRL-SHIFT-A?  onko se sitten vaikka #1=\3\1\A, (3 = CTRL_DN\1 = SHIFT_DN\A)

3 = CTRL_DN = #252;       

4 = CTRL_UP = #253;

1 = SHIFT_DN = #250;
2 = SHIFT_UP = #251;


Sitten vaan siocin koodiin seuraavasti esimerkiksi:

Var 1 Link IOCARD_SW Input 1 Type I
 {
   IF v1 = 1
   {
     &Key = 1
   }
   ELSE
   {
     &Key = 0
   }
 }

 Var 2 name Key Link KEYS


Oikeinko?

//Vipu
Mika Jylhä
Offline Offline

Posts: 266
Date Registered: 29.12.06

Re: SIOC-ohjelmointia (IOCards)
« Reply #33 on: 20.12.09, 16:17 »

Moikka,

Tuo USBKeys(english).pdf

Näyttäisi määrittelevän sen näin: \3\1A\2\3 ??

Control - dn, Shift down + A, Shift up, control up ?
Ville Pietilä
Offline Offline

Posts: 745
Date Registered: 17.05.06

WWW
Re: SIOC-ohjelmointia (IOCards)
« Reply #34 on: 20.12.09, 16:32 »

No niinpäs onkin  Smiley

//Vipu
Antti Toivanen
Offline Offline

Posts: 976
Date Registered: 25.02.02

Re: SIOC-ohjelmointia (IOCards)
« Reply #35 on: 30.12.10, 18:52 »

MIK:ssä on aloitettu SIOC-koodin harjoittelut, ja tuloksena on syntynyt mm. kitkakertoimen mallinnus OH-TWN simulaattoriin SIOC:n avulla. Tässä koodi, jolla sen teimme:

Aluksi määritellään muutamia muuttujia kitkakertoimen mallinnusta varten. Simulaattorista halutaan tietää lämpötilan ja sademäärän arvoja, ja niistä laskettu kitkakerroin voidaan tallentaa omaan muuttujaan (FRIC_COEFF) talteen. Lopuksi määritetään vielä muuttujat, joilla kitkakertoimen avulla laskettu jarrutus lähetetään simulaattorille. (Lämpötilan ja sademäärän kohdalla on koodissa kohta "CALL &FRIC_RUTINE", joka viittaa kitkakerroinarvon laskemisen tekevään silmukkaan - siitä lisää myöhemmin)
Code:
Var 302, Name FS_PRECIPRATE, Link FSUIPC_IN, Offset $04CB, Length 1 // Precipitation rate 0-5
{
CALL &FRIC_RUTINE
}

Var 303, Name FS_PRECIPTYPE, Link FSUIPC_IN, Offset $04CC, Length 1 // Precipitation type 0=none, 1=rain, 2=snow

Var 304, Name FS_OAT, Link FSUIPC_IN, Offset $0E8C, Length 2 // degrees C * 256
{
CALL &FRIC_RUTINE
}

Var 305, Name FRIC_COEFF, value 100 // Friction coefficient as per cent

Var 307, Name FS_LBRAKE, Link FSUIPC_OUT, Offset $0BC4, Length 2 // LBRAKE OUT, 0...16383
Var 308, Name FS_RBRAKE, Link FSUIPC_OUT, Offset $0BC6, Length 2 // RBRAKE OUT, 0...16383

Meillä varvasjarrut ovat joystickin painonäppäiminä, eli niitä ei voi suoraan lukea SIOC:lla. Onneksi saimme sen rajoituksen kierrettyä FSUIPC:n avulla, jossa määritimme varvasjarrun painallukset muuttujiksi 5300 ja 5301. Huom! Tässä kohtaa pitää jarrut poistaa simulaattorin näppäinkomennoista, sillä jatkossa jarrutuksesta huolehtii SIOC:n koodi.
Code:
Var 300, Name SW_LBRAKE, Link FSUIPC_IN, Offset $5300, Length 1 // Left brake pedal
{
IF &SW_LBRAKE = 1
{
L0 = &FRIC_COEFF / 100
L0 = L0 * 16383
&FS_LBRAKE = L0
}
ELSE
{
&FS_LBRAKE = 0
}
}

Var 301, Name SW_RBRAKE, Link FSUIPC_IN, Offset $5301, Length 1 // Right brake pedal
{
IF &SW_RBRAKE = 1
{
L0 = &FRIC_COEFF / 100
L0 = L0 * 16383
&FS_RBRAKE = L0
        }
ELSE
{
&FS_RBRAKE = 0
}
}

Kitkakertoimen arvo oli siis tallennettuna muuttujaan FRIC_COEFF. Sen muuttamisesta huolehtii alla oleva SUBRUTINE, joka ajetaan aina kun lämpötila TAI sademäärä muuttuu.
Code:
Var 306, Name FRIC_RUTINE, Link SUBRUTINE // To calculate friction coefficient FRIC_COEFF
{
L0 = 100 // Set friction coefficient to 1 at first
L1 = &FS_OAT / 256 // Temperature
IF L1 > 100
{
L1 = L1 - 255
}
L2 = &FS_PRECIPRATE
// temperature calculations
IF L1 > 5
{
L0 = L0 // do nothing
}
IF L1 < 5
{
L0 = L0 - 20 // reduce coefficient by 0.2
}
IF L1 < -5
{
L0 = L0 + 10 // increase coefficient by 0.1
}
// precipitation calculations
IF L2 = 0
{
L0 = L0 // do nothing
}
IF L2 > 0
{
L0 = L0 - 20 // reduce coefficient by 0.2
}
IF L2 > 3
{
L0 = L0 - 10 // reduce coefficient by 0.1
}
&FRIC_COEFF = L0
}

Ja näin se toimii!

Terveisin,
Antti

Ville Pietilä
Offline Offline

Posts: 745
Date Registered: 17.05.06

WWW
Re: SIOC-ohjelmointia (IOCards)
« Reply #36 on: 09.01.11, 16:35 »

Haluaisin käyttää Engine1 oil pressure- offsettia tuntimittarin ohjaukseen.

Pieni rele, joka ottaa vain 22mA virtaa on kytketty mastercardin outputtiin.

When I start FS2004 and IOCP-console offset brings right values to Iocp console, so this variable works well.
kun fs2004 ja IOCP-konsoli on käynnissä, saadaan fsuipc muuttujasta oikeaa dataa eli lukuarvoja välillä 0-15000.

Mutta kun oljynpaine saavuttaa arvon 12000, niin output ei kuitenkaan aktivoidu, vaan pysyy iocp:n mukaan nollana.

Manuaalisesti pystyn syöttämään iocp:n arvon "1", jolloin rele vetää.


Miksei rele vaihda tilaa kun lukuarvo 12000 saavutetaan?




Tässä koodinpätkä:

Var 0670, name eng1_oil_prss, Link FSUIPC_IN, Offset $08BA, Length 2     // Engine oil pressure

Var 0672, name hobbs_on, Link IOCARD_OUT, Output 110     // Hobbs hour meter on
{
  IF &eng1_oil_prss < 12000
  {
    &hobbs_on = 1   
  }
  ELSE
  {
    &hobbs_on = 0   
  }
}



//Vipu
Antti Toivanen
Offline Offline

Posts: 976
Date Registered: 25.02.02

Re: SIOC-ohjelmointia (IOCards)
« Reply #37 on: 09.01.11, 17:37 »

Hei,

Koska hakasulkuihin kirjoittamasi koodi suoritetaan vain silloin kun sen yläpuolella oleva muuttuja (VAR 0672) muuttuu.

Siirrä koodi ylemmän variablen alle tähän tapaan:
Code:
Var 0670, name eng1_oil_prss, Link FSUIPC_IN, Offset $08BA, Length 2     // Engine oil pressure
{
  IF &eng1_oil_prss < 12000
  {
    &hobbs_on = 1   
  }
  ELSE
  {
    &hobbs_on = 0   
  }
}

Var 0672, name hobbs_on, Link IOCARD_OUT, Output 110     // Hobbs hour meter on
Jolloin koodi suoritetaan aina kun öljynpaineen arvo FSUIPC:n kautta luettuna muuttuu.

Antti

Ville Pietilä
Offline Offline

Posts: 745
Date Registered: 17.05.06

WWW
Re: SIOC-ohjelmointia (IOCards)
« Reply #38 on: 09.01.11, 18:02 »

Äh, aivan :-). Kiitos Antti!

//Vipu
Samu Mäntyniemi
Offline Offline

Posts: 282
Date Registered: 08.05.10

Re: SIOC-ohjelmointia (IOCards)
« Reply #39 on: 12.05.11, 20:16 »

Noniin, master card lähti toimimaan, joten päästään SIOC ongelmien pariin. Laskutelinekytkimen sain pelaamaan ilman ongelmia, ja seuraavaksi haasteeksi otin HDG-rotaryn.

Rotarynä on tämä:

http://fi.mouser.com/Search/ProductDetail.aspx?R=3315C-001-006Lvirtualkey65210000virtualkey652-3315C-001-006L

Keskimmäinen pinni on input cardin GND1/5:ssä ja reunat 1/37 ja 2/38. Contorladorin mukaan nämä ovat input 001 ja 002, jotka vilistävät diagnostiikka ruudussa kun nuppia pyörittää.

Koodina on sitten tällainen pätkä, jonka tein apinoimalla sioc:in mukana tullutta esimerkkiä ja ohjetta osoitteessa : http://www.lekseecon.nl/howto.html#rotaryencode
Code:
Var 0002, name FS_HDG_w, Link FSUIPC_OUT, Offset $07CC , Length 2 // HDG bug write
Var 0001, name KNOB, Link IOCARD_ENCODER Input 001 Aceleration 1 Type 2     // HDG encoder, inputs 1,2
{
       &FS_HDG_w = ROTATE 1 360 &KNOB
}

Tämä ensimmäinen yritys on siinä mielessä onnekas, että kun nuppia vääntää niin FSX;ssä jotain tapahtuu. Ei mene kuitenkaan niinkuin oli tarkoitus. Kun nuppia hitaasti pyörittää, niin HDG muuttuu asteen ja palaa seuraavassa pykälässä takaisin edelliseen arvoon. Näyttäisi vielä olevan niin, että pyörityssuunnasta riippumatta aina tulee lisättyä aste, joka sitten taas tulee vähennettyä.

EDIT: Jos Offsetiksi vaihtaa  arvon $0C4E, joka kääntää CRS neulaa, niin koodi toimii CRS rotarylle aivan oikein.

Mikähän tässä menee vikaan?
« Last Edit: 12.05.11, 20:47 by Samu Mäntyniemi »

Osallistu maiseman luontiin:
1) http://www.youtube.com/watch?v=Q6CNXmmUaB4
2) http://osm2xp.com/

X-Plane 10 :
Vasen    : AMD Phenom II x4 965@3.74GHz/8GB/HD6970 22"/Win 7 Ultimate 64
Oikea     : i7 980x @4.6GHz /12GB/HD6970/22"+2x15"/Win 7 Ultimate 64
Keskellä : i7 2600K @4.5GHz /8GB/HD6970/22"/Win 7 Ultimate 64
Pages: 1 [2] 3 4 Reply Print 
« previous thread next thread »
Jump to:  

1