Autor Wątek: Aplikacja DomowyKokpit  (Przeczytany 62077 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #255 dnia: Marca 23, 2011, 22:30:36 »
Powoli nadchodzi czas uporządkowania moich skryptów. Pomyślałem, że dobrze byłoby mieć poszczególne części w różnych plikach. HSC oferuje możliwość łączenia skryptów. Ale na jakiej zasadzie? Zauważyłem w przykładzie, że można wywoływać funkcję. Ale jak wywołać procedurę/skrypt. Jeśli podstawiłem drugi skrypt, w którym jest np. timer - to otrzymuję same błędy. Zapewne problem tkwi w tym, że nie rozumiem, czym różni się funkcja od zwykłej procedury. Zawsze miałem z tym kłopot - nigdy nie rozumiałem. Tyle pamiętam, że skrypt/procedura wykonuje szereg poleceń, a funkcja ma zwracać wartość (hehe - też przecież musi wykonać polecenia).

Dobra pogadałem teraz pytanie:
Jeśli zmieni się zmienna (variable changed) to mogę wywołać funkcję z drugiego pliku. Czy mogę jednak wywołać jakoś cały skrypt? Bo przecież wewnątrz funkcji nie mogę stosować znowu np. variable_changed - co przydałoby mi się do TIMERa...

Czyli mam skrypt_główny w jednym pliku i skrypt do testowania simouta w drugim. Jak wywołać jeden z drugiego?

Odp: Aplikacja DomowyKokpit
« Odpowiedź #256 dnia: Marca 24, 2011, 08:10:01 »
Można uporządkować skrypty w prosty sposób stosując "funkcję??" include.Tutaj jest przykład mojego skryptu
Cytuj
script "FalconOF-SimOUT-FullPit"
//jest to skrypt dla Falcona OF
{
   include { file = "FalconOF - MP71.hcps"; script = "FalconOF - MP71-panele LG,CMDS,TWAux"; }
   include { file = "FalconAF - SimOUT - FuelTOTAL.hcps"; script = "FalconAF - SimOUT - FuelTOTAL"; }
   include { file = "Falcon-simOUT-PFL.hcps"; script = "PFL-simOUT-LCD"; }
   include { file = "FalconOF - LED - Right side.hcps"; script = "FalconOF - LED - Right side"; }   
}
Skrypt zawiera 4 niezalężne skrypty,które mogę uruchamiać i testować niezależnie od siebie.
Nie jestem programistą dlatego napiszę jak ja to rozumiem.Codeking zrobi to dokładniej.
Tak jak wspomniał codeking HSC nie jest językiem wyższego rzędu.Nie mam pojęcia jak zdefiniować określenie skrypt.Podam przykład z OpenCockpits gdzie stosują "język SIOC" i piszą w nim skrypty ("programy"??).SIOC jest bardziej rozbudowany od HSC.Posiada instrukcje typu CALL i funkcje między innymi Timer.O ile pamiętam to nie ma tam procedur.Są tam pojęcia zmiennych lokalnych i globalnych.
HSC też posiada funkcje nie ma procedur.Z tego co pamiętam z dyskusji z codeking to można trakować zmienne w HSC jako globalne ale nie jestem tego pewien musi to potwierdzić autor.
Mam wrażenie,że traktujesz HSC jako język wyższego rzędu gdzie można napisać procedury i funkcje i je wywoływać.Tak jak wspomniałem SIOC posiada pewne cechy takiego języka i można w nim wprowadzając argumenty do funkcji otrzymać wynik tej funkcji.Tyle uwag laika,ale ja tak to rozumiem.Oczywiście mogę być w błędzie.
Dla mnie HSC jest bardzo dobrym narzędziem dla takiego laika w programowaniu jak ja,ale przyznam,że czasem muszę prosić codeking o pomoc.HSC jest zrobiony dla takich laików jak ja,dlatego nie może być skąplikowany.Jest to pewien kompromis.Podobna sytuacja jest w SIOC,który jest także dla laików w programowaniu.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #257 dnia: Marca 24, 2011, 17:59:21 »
A opublikuj, albo na priva prześlij najkrótszy z twoich dołączanych skryptów. Ja sobie rozgryzę.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #258 dnia: Marca 24, 2011, 19:25:18 »
W sumie nie wiem co napisać :)

Może napiszę co się dzieje gdy HSC "spotka" rozkaz "include". Robi prostą rzecz, wczytuje wskazany skrypt i łączy go (wkleja jego zawartość) do skryptu, który go "includuje". Zdublowane zmienne ignoruje, łączy kod zdarzeń zmiany zmiennych. Z tego skryptu, który pokazał vito_zm, HSC zrobi jeden długi skrypt. Można sobie to wyobrazić tak jakby do notatnika wklejać po kolei całe skrypty wskazane rozkazem include, a później tak długi skrypt wczytać do HSC.

Include w HSC działa podobnie jak include w PHP czy C++.

HSC nie rozróżnia procedur i funkcji, są tylko funkcje, ale żadna z nich nie musi zwracać wartości. Skrypt to wszystko pomiędzy klamrami "{" i "}" zaczynające się od słowa "script <nazwa".

Odp: Aplikacja DomowyKokpit
« Odpowiedź #259 dnia: Marca 24, 2011, 19:50:19 »
Tak jak wyjaśnił codeking.Include ułatwia pisanie skryptów.Tutaj przykład o który prosił shopiK
Cytuj
script "FalconAF - SimOUT - FuelTOTAL"
{
   variable $total { module = "FalconData"; id = "total"; type = double; direct = in; }
   variable $FuelTOTAL { module = "simOUT"; id = "FuelTOTAL"; type = string; direct = out; }
   variable_changed $total
   {
   $FuelTOTAL = FormatNumber ($total,"00000");
   }
   variable $fuelFlow { module = "FalconData"; id = "fuelFlow"; type = double; direct = in; }
   variable $FuelFLOW { module = "simOUT"; id = "FuelFLOW"; type = string; direct = out; }
   variable_changed $fuelFlow
   {
   // $FuelFLOW = FormatNumber ($fuelFlow,"00000");
   $FuelFLOW = Substring (FormatNumber ($fuelFlow,"00000"),0,3) + "00";
   }
}
U mnie podział na 4 skrypty wynika z elementów,które steruje SimOut.LED-y,7segLED oraz LCD mają swoje skrypty.Przyciski oraz przełączniki podłączone do kontrolera MJoy też mają swój skrypt w HSC.Jak widać możliwości HSC są bardzo duże i załatwiają to co niepotrafi zrobić SVMapper dla większej liczby kontrolerów gier.
Przy okazji pytanie jak zrobić aby np.załączony skrypt był przewijany (zajmnie mniej miejsca,zapomniałem jak to się robi).

Odp: Aplikacja DomowyKokpit
« Odpowiedź #260 dnia: Marca 24, 2011, 20:02:19 »
Można sobie to wyobrazić tak jakby do notatnika wklejać po kolei całe skrypty wskazane rozkazem include, a później tak długi skrypt wczytać do HSC.
Include w HSC działa podobnie jak include w PHP czy C++.

a... czyli ok. Tak, to mi pasuje. W przykładowym skrypcie (mainscirpt) było odwołanie do funkcji function_1(); Myślałem, że poboczny skrypt trzeba wywołać odpowiednim zawołaniem i stąd wynikał problem, bo w funkcji nie mogłem korzystać ze zdarzeń np. variable_changed. A skoro łączy się to w jeden skrypt, to nie ma problemu. Dzięki za wytłumaczenie.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #261 dnia: Marca 24, 2011, 20:34:03 »
Przy okazji pytanie jak zrobić aby np.załączony skrypt był przewijany (zajmnie mniej miejsca,zapomniałem jak to się robi).

Kod wstawiaj w znacznikach code zamiast quote. Jeśli skrypt będzie długi to automatycznie dodadzą się paski przewijania.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #262 dnia: Kwietnia 01, 2011, 10:51:20 »
Witam wszystkich. Na tym forum pisze po raz pierwszy, ale obserwuje i czytam posty juz od jakiegos czasu. Czasem pisze z pracy z palmtopa i nie mam polskich znakow, wiec wybaczcie mi. Nie jetem programista ani elektronikiem wszyskiego ucze sie sam, korzystajac z wyszukiwarki i kilku stron. Uruchomilem mjoy'a i simout. Obie plytki przetestowalem w HSC. Teraz przyszla kolej na skrypty. Napisalem maly skrypcik, studiujac strone HSC, wlaczajacy wybrana led z simout za pomoca modulu testowego i zmiennych we/wy typu bool. Teraz staram sie napisac skrypt ze zmienna typu int jako "in" i zmienna typu bool jako "out", a dokladniej zmienna z sfx ->simout(np:dioda swiatel). Nie wiem jak zaczac. Sugerowalem sie troche skryptem gear position ze strony HSC, ale cos mi nie idzie. Czy moglby mi ktos, chocby na priv wyslac przyklad skryptu. Nie chodzi mi o tozeby ktos napisal mi skrypty na gotowo, tylko chcialbym jako przyklad, zebym mogl to zrozumiec. Przepraszam ze wtracilem sie w wysoce zaawansowana debate, ale nie chcialem zaczynac nowego watku :). Walus

Odp: Aplikacja DomowyKokpit
« Odpowiedź #263 dnia: Kwietnia 01, 2011, 18:50:13 »
Witamy na forum i zapraszamy do udziału w dyskusji :)

Przykład z kontrolką świateł lądowania:
// przykładowa zmienna "diody LED" z simOUT
variable $simOUT_LandingLights
{
   module = "simOUT";
   id = "COM36_led_021_001";
   type = bool;
   direct = out;
}

// zmienna przechowująca stan świateł lądowania
variable $LandLights
{
   module = "FSDataInput";
   id = "028C";
   type = int;
   direct = in;


// zdarzenie zmiany stanu świateł lądowania
variable_changed $LandLights
{
   // jeśli zmienna ma wartość zero tzn., że światła lądowania nie są włączone
   if ($LandLights == 0)
   {
      // światła wyłączone
      $simOUT_LandingLights = false;
   }
   else
   {
      // światła włączone
      $simOUT_LandingLights = true;
   }
}

Odp: Aplikacja DomowyKokpit
« Odpowiedź #264 dnia: Kwietnia 02, 2011, 20:51:37 »
Witam was  ciesze się, że mogę do was dołączyć.

Skrzyneczkę już mam chyba z rok na mjoy16. Przyzwyczaiłem się do tego, że switche działają tylko z 0 - 1. Ale to przeszkadza w dalszej rozbudowie.
Nie korzystam z toggle, gdyż jest tego za mało, a tym skryptem:

variable $MJ16_przycisk_046
{
   module = "GameControllersInput";
   id = "MJ16:przycisk_046";
   type = bool;
   direct = in;
}


variable_changed$MJ16_przycisk_046
{
   if($MJ16_przycisk_046)
      {
         KeyboardOutput:SendShortcut( "^+1" );
      }
      else
      {   
         KeyboardOutput:SendShortcut( "^+3" );
      }
}

Idzie bez problemu. Ale robić te kombinacje to głupota jak można wykorzystać macro mause z fsuipc.
I tu się pojawiają schody.


variable $efis_TFC
   {module = "GameControllersInput";id = "MJ16:przycisk_046";type = bool;direct = in;}
   
   variable_changed$efis_TFC
   {if($efis_TFC){SetWithSignal($fs_MACRO, "B767:OVRD");}}   
   
   
   
}

Ok. z pozycji 0 - 1 idzie super a z 0 - 1 nie, zresztą czemu miałoby iść z powyższym kodem. Nie mam pomysłu jak to zrobić, jak wykorzystać else.
Liczę na wasza pomoc.
Serdeczne podziękowania dla Zająca, który mi we wszystkim pomaga.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #265 dnia: Kwietnia 02, 2011, 21:16:10 »
A po co funkcja "if, else" dla Toggle? To się raczej przypisuje dla przycisków. Jeśli kombinacja klawiszy "^+1" załącza jakąś funkcję,  można uprościć skrypt pomijając to. Przykładowo, przełączasz Toggle na pozycję ON czyli klawisze "^+1", wracasz na OFF funkcja przestaje działać. To tak jak byś przycisnął klawisz i trzymał ( przełącza się Toggle na ON), puszczasz ( wraca na pozycję OFF). Dzięki czemu z każdego buttona  w Mjoy zrobisz Toggle. Chyba, że kombinacja klawiszy "^+3" to pozycja OFF.

Cytuj
Idzie bez problemu. Ale robić te kombinacje to głupota jak można wykorzystać macro mause z fsuipc.
I tu się pojawiają schody.
Licz się z tym, że macro-FSUIPS ogranicza do chyba ( nie pamiętam) 15 kombinacji, w HSC można to robić bez ograniczeń.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #266 dnia: Kwietnia 02, 2011, 21:48:39 »

Nie korzystam z toggle.

Właśnie chce korzystać z HSC wykorzystując mause macro.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #267 dnia: Kwietnia 03, 2011, 09:39:06 »
A po co funkcja "if, else" dla Toggle? To się raczej przypisuje dla przycisków.

To ja doradziłęm koledze konstrukcję if... else, ponieważ on podpina toggle pod pushbuttony. Kiedy się podpina pod toggle, przy przestawieniu przełącznika na on - zapala się na CHWILĘ jeden przycisk (w swmapperze), a gdy na off - na CHWILĘ zapala się drugi - wtedy rzeczywiście nie potrzeba if'a. Bo każda pozycja to osobny przycisk.
Jeśli jednak toggla podepnie się pod pushbutton - to przestawienie przełącznika na on powoduje, że zapala się jeden przycisk i pozostaje jakby był wciśnięty. Przestawienie na off gasi przycisk. Problem może się pojawić wtedy, gdy np. FS, albo HSC się przyhaczy i nie zanotuje zmiany. Wtedy przełącznik zmieni pozycję np. na off, a FS w wirtualnym kokpicie już nie. Wygląda to nieatrakcyjnie, jak w w kokpicie masz na jednej pozycji, a na monitorze w drugiej. Trzeba by wyłączać HSC, przestawić przełącznik na odpowiednią pozycję i uruchomić ponownie skrypt, coby to zsynchronizować.

Idzie bez problemu. Ale robić te kombinacje to głupota jak można wykorzystać macro mause z fsuipc.

Korzystać z mouse macro to głupota jak się ma Level d 767, który obsługuje standardowe offsety FSa :021:

Odp: Aplikacja DomowyKokpit
« Odpowiedź #268 dnia: Kwietnia 03, 2011, 10:12:04 »
Cytuj
jak w w kokpicie masz na jednej pozycji, a na monitorze w drugiej.
Dlatego nie ma sensu tego stosować.Z toggle też może być w momencie włączenia symulatora konflikt,ale wystarczy zmienić pozycję przełącznika w kokpicie tak jak na ekranie i jest o.k.
Moja rada poczekać na DMKeys Damosa,tam nie zabraknie wejść.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #269 dnia: Kwietnia 03, 2011, 11:27:57 »
papkinus - witamy kolejnego użytkownika HSC :)

Jeśli to działa dobrze:
variable $MJ16_przycisk_046
{
   module = "GameControllersInput";
   id = "MJ16:przycisk_046";
   type = bool;
   direct = in;
}


variable_changed$MJ16_przycisk_046
{
   if($MJ16_przycisk_046)
      {
         KeyboardOutput:SendShortcut( "^+1" );
      }
      else
      {   
         KeyboardOutput:SendShortcut( "^+3" );
      }
}
To dlaczego nie zrobić tego tak samo z makrem:
variable $efis_TFC
   {module = "GameControllersInput";id = "MJ16:przycisk_046";type = bool;direct = in;}
   
   variable_changed$efis_TFC
   {
        SetWithSignal($fs_MACRO, "B767:OVRD");       
   }
}

Cytuj
Problem może się pojawić wtedy, gdy np. FS, albo HSC się przyhaczy i nie zanotuje zmiany. Wtedy przełącznik zmieni pozycję np. na off, a FS w wirtualnym kokpicie już nie. Wygląda to nieatrakcyjnie, jak w w kokpicie masz na jednej pozycji, a na monitorze w drugiej. Trzeba by wyłączać HSC, przestawić przełącznik na odpowiednią pozycję i uruchomić ponownie skrypt, coby to zsynchronizować.
Co masz na myśli pisząc "przyhaczy" ? Może da się to jakoś rozwiązać - muszę tylko wiedzieć co dokładnie :)

Problem rozsychronizowania nie powinien występować pod warunkiem ustawienia prawidłowo wszystkich przełączników przed "wejściem do samolotu". Problem jest praktycznie nie do przeskoczenia gdy przełączamy coś na panelu a w FS przełącznik przełącza się ale systemy samolotu stwierdzają że coś jest nie halo i przełączają przełącznik na poprzednią pozycję. Nie ma wtedy sprzężenia zwrotnego FS->HSC->Panel, więc przełącznik na panelu jest w innej pozycji niż w FS. Nawet gdyby była informacja zwrotna to trzeba by wykorzystywać odpowiednie przełączniki i dodatkowe sterowniki. Inny przykład: na panelu mamy przełącznik bez zabezpieczenia a w FS z zabezpieczeniem i do tego zabezpieczony, możemy sobie przełączać na panelu a FS ani drgnie :)

Rozwiązaniem jest więc informacja zwrotna czyli możliwość odczytania aktualnego stanu przełącznika w FS. Jeśli samolot współdziała z FSUIPC lub ma swoje SDK to problemu nie ma. Ale np. PMDG robi problem. Chodzi mi po głowie rozwiązanie, włączamy panel 2D i HSC analizuje graficznie położenie przełączników i raportuje zdarzeniami o ich zmianie. Teoretycznie nie jest to trudne i więcej trudności może sprawić konfiguracja takiego ustrojstwa :) Myślę o takim czymś, bo sam będę miał ten problem bo chciałem sobie zrobić panel do ATR72 od Flight1 a ten FSUIPC po prostu nie lubi.