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

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

Odp: Aplikacja DomowyKokpit
« Odpowiedź #150 dnia: Lipca 31, 2010, 10:33:05 »
Witam,zanim rozpocznę pytania związane z pisaniem skryptów chciałbym napisać parę ogólnych uwag.W moim przypadku powstanie karty SimOUT spowodowało konieczność opanowania pisania skryptów.Przed pojawieniem się tej karty można było eksperymentować z modułem testowym,joystickami lub siecią teraz sytuacja się zmieniła i trzeba do tej karty napisać skrypt pod konkretny symulator.Zajmuję się różnymi sprawami i praktycznie muszę wrócić do pisania skryptów pod HSC od nowa i to pod Falcona.Dodatkowym problemem jest interpretacja dokumentu SharedMemHeader w którym jest mowa o wersji AF i innych np.OF.Postaram się po napisaniu skryptu dla moich potrzeb zrobić skrótowy opis.Problem polega między innymi na tym,że Codeking zrobił bardzo dobre opisy,ale dotyczą one wszystkich możliwości HSC.W moim przypadku będę potrzebował tylko niektóre z nich.Z góry przepraszam,że będę pytał o rzeczy oczywiste,ale chciałbym to zrozumieć.Mam nadzieję,że Codeking będzie wyrozumiały.Tyle wstępu a teraz konkrety.
Najpierw ogólne spostrzeżenie.W wspomnianym dokumencie SharedMemHeader zmienne np.rpm,chaffcount,flarecount itd.są opisane jako public float.W module FalconData są jako double czyli zmiennoprzecinkowe.Rozumiem,że jest to to samo.
Teraz konkrety testowałem 3 zmienne rpm,które jest w % od 0 do 105%.Chaffcounter jest w symulatorze przedstawiony jako licznik zmieniajacy wartość od 60 do 0 oraz flarecounter zmieniający wartość od 30 do 0.Dla wszystkich 3 zmiennych zastosowałem funkcję ToString() zamieniając liczby na "string".Nie robiłem obróbki tekstu (string).Jak to się zachowuje.
Dla rpm jest grupa 3 wyświetlaczy 7segLED dla pozostałych 2 wyświetlacze.
Rpm opisałem w poprzednim post.Dodam tylko,że mam ustawione w HSC wyrównanie-left,przycięcie-right i dla takiego ustawienia to działa tak jak to opisałem w poprzednim post.Jeśli zmienię przycięcie na left to watości wyświetlane cały czas się zmieniają,odczyt jest niemożliwy.
Wyświetlanie pozostałych zmiennych jest inne.Wyświetlane wartości są prawidłowe do liczby 10,później następuje przesunięcie jedności na pozycję dziesiątek.Wygląda to następująco:
symulator     wyświetlacz
60               60
....               ...
10               10
9                 90
1                 10
0                 4 lub inna wartość
Czy mógłbym prosić o wyjaśnienie kilku spraw.Jeśli mamy zamienioną liczbę na tekst (string) i wiemy,że się zmienia od np. 0 do 105 rosnąc lub malejąc (moc silnika) to jaki wpływ ma ustawienie wyrównania oraz przycięcia w HSC.
Co zrobić aby wyświetlanie rpm oraz chaffcounter (flarecounter) było właściwe?

Odp: Aplikacja DomowyKokpit
« Odpowiedź #151 dnia: Lipca 31, 2010, 10:57:25 »
Więc tak:
 - wyrównanie działa dokładnie tak jak w edytorach tekstowych, wyrównujesz do lewej, do prawej lub centrujesz (nie ma justowania)
 - przycięcie jest mylące i zastanawiałem się nad usunięciem tej funkcji, jeśli tekst do wyświetlenia jest dłuższy od obszaru np. tekst ma 5 znaków ("12345") a obszar składa się z 3 wyświetlaczy, to przycięcie z lewej usunie z tekstu 2 znaki od lewej strony (zostanie "345"), przycięcie z prawej usunie 2 znaki z prawej strony tekstu (zostanie "123"), ta opcja w połączeniu z wyrównaniem może być myląca

Jeśli chcesz wyświetlić RPM zawsze w postaci trzech cyfr (zera z lewej strony dla wartości 2 i 1 cyfrowych) to wystarczy zrobić coś takiego:
$RPM_ = FormatNumber( $rpm , "000" );
Nie musisz się wtedy martwić o cyfry po przecinku itp., a wyświetlacz zawsze będzie pokazywał to co trzeba. Ustawienia obszaru w tym przypadku nie mają znaczenia i najlepiej ustawić wyrównanie do prawej, przycięcie z lewej i brak dopełnienia.

Jeśli nie chcesz wyświetlać zer wiodących, to:
 - chcąc wyświetlić wartości zaokrąglone np. 1.58 jako 2
$RPM_ = FormatNumber( $rpm , "0" );
  a w obszarze ustaw wyrównanie do prawej, przycięcie z lewej i dopełnienie z lewej, a znak dopełniający wstaw spację
 - chcąc wyświetlić wartości obcięte np. 1.58 jako 1
$RPM_ = ToString( ToInt( $rpm ) );
  a obszar ustaw dokładnie jak w poprzednim punkcie

Powyższe ustawienie obszaru spowoduje uzupełnienie spacjami z lewej strony tekstów krótszych od długości obszaru.

Zastosuj to do wyświetlania RPM, Chaffcounter i flarecounter - wszystko będzie się dobrze wyświetlać.

Teraz wyświetla Ci:
60               60
....               ...
10               10
9                 90
1                 10

dlatego, że w przypadku jednej cyfry, tylko jeden wyświetlacz jest aktualizowany a pozostałe wyświetlają to co wyświetlały czyli 0. Dlatego na końcu zamiast 9 i 1 wyświetla się 90 i 10 (bo wcześniej na drugim wyświetlaczu wyświetliło się 0).

Napisałeś, że przy wartości 0 wyświetla się 4 lub inna wartość, sprawdź to korzystając z funkcji Log( ToString( $rpm ) );

W pliki SharedMemHeader  jest float a w module double. Double może zapamietać większy zakres wartości niż float. Double jest dlatego, że na początku pisania programu przyjąłem, że liczby będzie można zapisywać jako int i double. Im mniej typów tym lepiej.

Mam nadzieję, że nie zrobiłem większego mętliku niż był.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #152 dnia: Lipca 31, 2010, 16:28:12 »
Dziękuję za wyjaśnienia.Zrobiłem testy i działa tak jak powinno z wyjątkiem...Zanim przejdę do omówienia tego wyjątku to małe  wyjaśnienie jak działa licznik chaff oraz flare.W Falconie jest ograniczona liczba chaff=60 oraz flare=30.Opróżniamy zasobniki wyrzucając określoną liczbę flar lub chaff.Wyrzucam sekwencje np.chaff po 9 i mam na liczniku 60,51,42,33,24,15,06 i w tym momencie niespodzianka zamiast 00 mam 04 następnie 13,22,31,40,49,58,67,76 itd.
Zrobiłem log i mam chaff=60,59,........1,-1,-2,-3,......Brak pozycji 00.Skrypt wygląda następująco:

script "Falcon - SimOUT - Chaff"
{
   variable $ChaffCount { module = "FalconData"; id = "ChaffCount"; type = double; direct = in; }
   variable $CHAFF { module = "simOUT"; id = "CHAFF"; type = string; direct = out; }
   variable_changed $ChaffCount
   {
   $CHAFF = FormatNumber ( $ChaffCount,"00" );
   Log ( "Chaff= " +ToString( $ChaffCount ));      
   }
}

W symulatorze licznik zatrzymuje się na pozycji 00,podobnie w wyświetlaczach sterowanych kartą z OC Display.Czegoś nie rozumiem,dlaczego symulator wysyła "chaff" pomimo,że jest pusty i dlaczego w karcie Dispay jest o.k.
Może zrobić jakąś w programie blokadę typu
if   $ChaffCount = 00 (nie ma tej pozycji w log??)
  to wyświetlaj =00
Temat zaczyna być ciekawy.
Ogólnie będę miał 3 przypadki,gdzie 2 już zostały przedstawione.Trzeci rozpocznę testować.Będzie to np.pomiar wysokości lub prędkości gdzie będą liczby z przecinkami (typ double).Zobaczymy co z tego wyniknie.
Teraz prośba do Codeking,czy rozumiesz co się dzieje z licznikami chaff oraz flare i czy można temu zaradzić.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #153 dnia: Sierpnia 01, 2010, 10:06:44 »
Cytuj
przycięcie jest mylące i zastanawiałem się nad usunięciem tej funkcji,
Nie usuwaj tej funkcji,jest przydatna.Postaram się to uzasadnić na przykładzie.Tak jak wspomniałem zrobiłem test Fuel Flow.Informacja w symulatorze jest wyświetlana na 5 pozycjach gdzie 2 ostatnie pozycje są zawsze zerami.W starym rozwiązaniu z kartami OC zrobiłem to w ten sposób,że wyświetlałem pierwsze 3 cyfry licząc z lewej strony a 2 ostatnie wyświetlały zawsze 00.
W HSC można  zrobić to samo deklarując grupę złożoną z 3 wyświetlaczy 7segLED i ustawiając w konfiguracji wyrównanie do lewej i przycięcie z prawej.W tym przypadku HSC ma przewagę nad kartą Display z OC.W OC musimy zadeklarować zmienną Fuel Flow jako 5 pozycji tracąc w ten sposób 2 pozycje (hardware) w karcie Display.W HSC nic nie tracimy (hardware).
Wracając do liczników Chaff oraz Flare to nie rozumiem czemu kręcą się dalej po osiągnięciu zera.Przy okazji sprawdzę to w programie monitoringu SIOC dla Falcona.Jedyne rozwiązanie to funkcja warunkowa typu If.... Else,ale takiej w HSC nie ma.
Reasumując myślę,że można zrealizować przy pomocy HSC wyświetlanie wszystkich zmiennych (wyświetlanych) z Falcona z wyjątkiem wspomnianych liczników.Funkcja FormatNumber (zmienna,"0....0") jest bardzo przydatna i prawdopodobnie rozwiązuje większość problemów.Tyle moich uwag.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #154 dnia: Sierpnia 01, 2010, 10:13:21 »
OK, te liczniki trzeba sprawdzić w innych programach, jeśli jest OK to błąd jest w module.

If i Else oczywiście istnieje w HSC :) Przykład:

if ( $ChaffCount < 0 )
{
   $CHAFF = "00";
}
else
{
   $CHAFF = FormatNumber ( $ChaffCount,"00" );
}


Odp: Aplikacja DomowyKokpit
« Odpowiedź #155 dnia: Sierpnia 01, 2010, 11:54:46 »
Nie doczytałem w jakim dokumencie jest to opisane,czy możesz podać datę tego opisu.Sprawdziłem liczniki w SIOC,FAST zatrzymują się na zerze.
Teraz będę porównywał plik ShareMemHeaders z plikiem iocp_config.con,który zrobił Michi twórca FAST dla potrzeb Falcona.Muszę to zrobić ponieważ chcę przejść częściowo z FAST na HSC oczywiście wykorzystując SimOUT.
Przy okazji mam do Codeking pytanie.Będę się konsultował z niektórymi members z viperpits głównie w sprawie pliku ShareMemHeaders (pomieszane wersje dla AF oraz OF).Przy pytaniach chciałbym to uzasadnić i tutaj pytanie:
czy mogę powoływać się na opracowanie HSC,SimOUT oraz na Twoją stronę?Ponieważ jesteś twórcą to Ty decydujesz czy to ujawniać na innych forach.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #156 dnia: Sierpnia 01, 2010, 18:31:05 »
Jeśli dane dla płytki Skalarki pochodzą z serwera to musisz na kliencie również uruchomić serwer :) Do tego na serwerze uruchomić też klienta. Tak więc będziesz miał dwa PC na których działa DK jednocześnie w trybie klienta i serwera. Z serwera (obecnego) będziesz wysyłał dane na klienta (obecnego) aczkolwiek aktualny serwer będzie działa również jako klient (bo klient może wysyłać dane na serwer), a aktualny klient będzie działał również jako serwer (bo tylko serwer może odbierać dane od klientów). Robisz wszystko tak jak do tej pory, to co zrobiłeś na serwerze zrób na kliencie i odwrotnie.

codeking,
 pytałem kiedyś Ciebie jak wysłać dane do Skalarki na komp klient.
Mam pytanie odnośnie cytatu, czy wystarczy do skryptu serwer dopisać:

variable $sygnal { direct = out; module = "DataSender"; id = "sygnal"; type = bool; }

A do klienta to co jest na serwer?
Druga sprawa, czy do każdej zmiennej na serwerze dopisać- $sygnal = Not( $sygnal ); ?
Czyli np:
//EngineFault
$usb_output_001 = GetBitState( $lightBits , 20 );
$sygnal = Not( $sygnal );

Możesz podać jakiś przykład jak wysłać powyższą zmienną, z kompa serwer ( na którym jest Falcon) do klient ( na nim Skalarki) ?

vito,
 widzę, że zająłeś się wyświetlaczami Fuel Flow. Może pogrzebiesz coś przy Fuel Gauge? Mechanicznie mamy już rozwiązane, cały mechanizm jest gotowy do wycięcia na laserze. Pytanie- mogę użyć te wyświetlacze które mamy?  W SimOut chyba jest wspólna anoda? ( nie pamiętam)

Pozdrawiam.



 


Odp: Aplikacja DomowyKokpit
« Odpowiedź #157 dnia: Sierpnia 01, 2010, 18:47:49 »
 
Cytuj
W SimOut chyba jest wspólna anoda?
Tak jest wspólna anoda.Te,które wysłałem też mają wspólną anodę.SimOUT będzie realizował Fuel Quantity w Fuel Gauge,nie ma problemu.Planuję wykorzystać SimOUT do realizacji PFL,caution panel,generalnie ma sterować prawą stroną kokpitu.W zasadzie problemy z skryptami pod potrzeby Falcona stosowane w SimOUT są już prawie rozwiązane.Pozostaje sprawa wersji AF,OF ale to mam nadzieję też się wyjaśni.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #158 dnia: Sierpnia 01, 2010, 19:41:17 »
vito_zm

O instrukcji 'if-else' pisałem tutaj: http://angus.foxnet.pl/fs/blog/?p=42


EGHI

Na komputerze z płytką Skalarki skonfiguruj serwer (moduł DataReceiver). W skrypcie zrób (przykład):
// dioda na płytce Skalarki
variable $Glare_output_000
{
    module = "SkalarkiIO";
    id = "Glare:output_000";
    type = bool;
    direct = out;
}

// zmienna z klienta, światło MASTER CAUTION
variable $MASTER_Light
{
    direct = in;
    module = "DataReceiver";
    id = "MASTER_Light";
    type = bool;
}

// klient przysłał zmienną więc zapalan/gaszę diodę
variable_changed $MASTER_Light
{
    $Glare_output_000 = $MASTER_Light;
}

Na kliencie (komputer z Falcon), ustaw adres serwera (komputer z płytką Skalarki) i skrypt:
variable $lightBits
{
    direct = in;
    module = "FalconData";
    id = "lightBits";
    type = int;
}

variable_changed $lightBits
{
    DataSender:SendVariable( "MASTER_Light" , GetBitState( $lightBits , 0 ) );
}

W ten sposób powinno się sterować diodą odpowiedzialną za MASTER CAUTION. Zmienne jak $Sygnal są potrzebne w innych przypadkach (np. przy wysyłaniu klawiszy gdzie kilka razy pod rząd chcemy nacisnąć ten sam skrót klawiszowy).

Skrypt "powinien" działać :) Dzisiaj niedziela i ciężke pytanie zadałeś :)

Odp: Aplikacja DomowyKokpit
« Odpowiedź #159 dnia: Sierpnia 01, 2010, 21:26:27 »
Codeking dzięki za wszystkie informacje.Poczytam na temat instrukcji warunkowych.Coraz bardziej lubię HSC jest rewelacyjny.Dzięki za możliwość wyboru wariantu Falcona AF lub OF.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #160 dnia: Sierpnia 02, 2010, 06:23:34 »
Chciałbym poruszyć w tym wątku jeszcze jeden temat związany z HSC oraz innymi opracowaniami.Na forum viperpits mam swój wątek związany z budową kokpitu dla F16,gdzie opisuję postęp prac przy jego budowie oraz zastosowane rozwiązania.Przechodzę stopniowo z rozwiązań OpenCockpits na opracowania Codeking.Mam na myśli HSC oraz SimOUT.Za moment zamienię także MJoy na DSMJoy Damosa.Zastosowałem także opracowanie EGHI związane z serwerami.Są to nasze polskie rozwiązania.Chciałbym prosić kolegów Codeking,Damosa oraz EGHI o zgodę na publikacje ich opracowań na forum viperpits.Wiem,że jest bariera językowa oraz ewentualne pytania.Z drugiej strony nasze opracowania są naprawdę dobre i można je zaprezentować.Co o tym myślicie?Zapomniałem o platformie Skalarki,ale nie miałem okazji ją testować.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #161 dnia: Sierpnia 02, 2010, 13:13:55 »
Witam,wyjaśniła się sprawa odczytu liczników flar oraz chaff w Falconie. Winę za zachowanie się tych liczników ponosi biblioteka F4SharedMem.dll.Można zrobić w skrypcie instrukcję warunkową i dla użytkownika ten błąd będzie niewidoczny.
script "Falcon - SimOUT - Flare"
{
   variable $FlareCount { module = "FalconData"; id = "FlareCount"; type = double; direct = in; }
   variable $FLARE { module = "simOUT"; id = "FLARE"; type = string; direct = out; }
   variable_changed $FlareCount
    {
      if ($FlareCount < 0)
      {
      $FLARE = "00";
      }
      else
      {   
       $FLARE = FormatNumber ( $FlareCount,"00");
      }
   }
}
Ten skrypt podsunął mi pewien pomysł.Nie jestem pewien czy można go zrealizować.Postaram się wyjaśnić o co chodzi.
W falconie są pewne zmienne np.Fuel Flow,które mają 5 pozycji.Jeśli te 5 pozycji będziemy wyświetlać na 7segLED to będzie to denerwujące lub rozpraszające,ponieważ ostatnie 2 pozycje ciągle się zmieniają.Może dlatego w symulatorze te dwie ostatnie pozycje mają cały czas wartość zero.W moim rozwiązaniu opartym na kartach OC zrobiłem podobnie tzn.ostatnie 2 pozycje są zerami.Zrobiłem to hardwarowo.Można zrobić podobnie w HSC tworząc grupę 3 wskaźników 7segLED i obcinając z prawej strony.
W tym momencie pytanie do codeking.Czy jest możliwe takie ustawienie konfiguracji lub skryptu aby osiągnąć to samo ale nie za pomocą hardware tylko softu.Jeśli utworzę grupę z 5 wskaźników 7segLED to czy mogę zadeklarować w skrypcie instrukcję,która ustawi ostatnie 2 pozycje na wartość 00.Dlaczego to jest istotne,ponieważ mamy zrobione pcb na 5 wskaźników.Jeśli jest to niemożliwe to trzeba trochę przerobić pcb pod wskaźniki.W przypadku rozwiązania za pomocą softu tracimy 2 pozycje w SimOUT,w przypadku rozwiązania za pomocą hardware musimy przerobić pcb.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #162 dnia: Sierpnia 02, 2010, 14:22:55 »
vito_zm

DK/HSC jest projektem publicznym więc możesz o nim wspominać wszędzie i zawsze :)

Tą kwestię z przykładem FuelFlow rozwiązałbym jeszcze inaczej. Szkoda dwóch wyświetlaczy którymi można sterować, więc podłączyłbym je tak (na stałe do zasilania), żeby zawsze pokazywały 00. W ten sposób zostaną Tobie dwa wyświetlacze do wykorzystania (sterowanie). Do tego definiujesz obszar z 3 wyświetlaczy, ustawiasz wyrównanie do lewej i obcięcie z prawej. A wartość przypisujesz: $FuelFlowDisplays = FormatNumber( $FuelFlowFalcon , "00000" );

Odp: Aplikacja DomowyKokpit
« Odpowiedź #163 dnia: Sierpnia 02, 2010, 16:41:33 »
W najbliższym post na viperpits opiszę moją modyfikację sterowania kokpitu przy pomocy SimOUT oraz HSC.
Cytuj
Szkoda dwóch wyświetlaczy którymi można sterować, więc podłączyłbym je tak (na stałe do zasilania), żeby zawsze pokazywały 00. W ten sposób zostaną Tobie dwa wyświetlacze do wykorzystania (sterowanie).
Ja tak zrobiłem w aplikacji z kartą OC,ale tam nie ma zysku,ponieważ jest inne rozwiązanie softu.W HSC jest zysk w postaci możliwości sterowania dwoma wyświetlaczami,ale trzeba zrobić małą modyfikacje pcb pod 5 wyświetlaczy 7segLED,co nie jest problemem.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #164 dnia: Sierpnia 02, 2010, 20:55:35 »
Skrypt "powinien" działać :) Dzisiaj niedziela i ciężke pytanie zadałeś :)
Zakładam, że skrypt będzie działać, jeszcze nie sprawdzałem.
Napisałeś, żeby na kliencie (komp z Falconem) ustawić adres serwera, komp z Skalarki będzie serwerem. Z tym nie ma problemu ponieważ mam taki sam adres IP na wszystkich kompach. Problem w tym, że na każdym kompie DK lub HSC musi być zarówno serwerem jak i klientem. Chodzi o rozmieszczenie sprzętu. Żeby było jaśniej, napiszę jaka konfiguracja będzie:
komp nr.1 ( z Falconem)
- Dwie karty BU0836
komp nr.2 (pomocniczy)
-Skalarki
- Mjoy
- BU0836X
Teraz pytanie, co muszę zrobić żeby DK na każdym kompie wysyłał i odbierał dane?

Dzisiaj jest poniedziałek, więc chyba można ? ;)