SIOC-ohjelmointia (IOCards)

<< < (9/13) > >>

smä:
Tutkin lisää tuota SIOC;in mukana tullutta esimerkkiä ja kopioin sitä vähän kirjamellisemmin. Tällä alkoi sitten toimimaan:
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
{
&TEMP_HDG = ROTATE 1 360 &KNOB
}

Var 0003, name TEMP_HDG
{
L0 = &TEMP_HDG * 182.444
&FS_HDG_w = ROUND L0
}


Jos yritän kirjoittaa lyhyemmin kuten alla, niin ei toimi.
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
{
L0 = ROTATE 1 360 &KNOB
L1 = L0 * 182.444
&FS_HDG_w = ROUND L1
}


Selvästikään en nyt ymmärrä jotain keskeistä asiaa kun kuvittelen, että noiden pitäisi toimia samoin.

tigert:
Quote

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.


Homma selviää kun katsoo minkälaisia arvoja siellä fsuipc-offsetissa on. Eli esiin FSUIPC SDK -> FSUIPC for Programmers.pdf:

   07CC 2 Autopilot heading value, as degrees*65536/360
   0C4E 2 NAV1 OBS setting (degrees, 0–359)

Tuossa tuo heading-arvo ei ole suoraan asteina vaan jostain syystä pitää muuntaa se tuohon muotoon kertolaskulla, kun taas nav1 obs on suoraan vain 0-359.  Eli joskus noita lukuja joutuu vähän muuntelemaan koodissa.

//Tuomas

smä:
Quote


Tuossa tuo heading-arvo ei ole suoraan asteina vaan jostain syystä pitää muuntaa se tuohon muotoon kertolaskulla, kun taas nav1 obs on suoraan vain 0-359.  Eli joskus noita lukuja joutuu vähän muuntelemaan koodissa.

//Tuomas



Tämän hoksasinkin tosiaan sitten hetken päästä. Tämä ei ilmeisesti kuitenkaan selitä tuota noiden kahden version eroa, joissa molemmissa teen (luullakseni) tuon tarvittavan kertolaskun. Näistä jälkimmäisessä on sama vika kuin aivan ensimmäisessä yrityksessä: neula värähtää mutta palaa aina takaisin.

jounipyh:
Quote


Jos yritän kirjoittaa lyhyemmin kuten alla, niin ei toimi.
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
{
L0 = ROTATE 1 360 &KNOB
L1 = L0 * 182.444
&FS_HDG_w = ROUND L1
}



Tämä koodi ei toimi koska jokaisella kerralla kun nuppiin kosket niin lähdetään liikkeelle arvosta 0.
L0, L1 ovat väliaikaisia muuttujia jotka eivät muista arvoaan suorituskertojen välillä.

Toimivassa koodissahan alkuperäinen HDG on tallessa TEMP_HDG variablessa. Ja sitä lähdetään muuttamaan niin toimii ok.

smä:
Quote

Tämä koodi ei toimi koska jokaisella kerralla kun nuppiin kosket niin lähdetään liikkeelle arvosta 0.
L0, L1 ovat väliaikaisia muuttujia jotka eivät muista arvoaan suorituskertojen välillä.

Toimivassa koodissahan alkuperäinen HDG on tallessa TEMP_HDG variablessa. Ja sitä lähdetään muuttamaan niin toimii ok.


Kiitos! Nyt meni tajuntaan 

Navigation

Up one level

Next page

Previous page