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

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

Odp: Aplikacja DomowyKokpit
« Odpowiedź #360 dnia: Grudnia 19, 2013, 20:22:49 »
Nie potrzebne jest wywołanie funkcji StringReplace dla HDG. Poprawiony wiersz:
$hdg = FormatNumber(FSDataInput:BCDFrequencyToDouble($HdgValue), "000");

Odp: Aplikacja DomowyKokpit
« Odpowiedź #361 dnia: Grudnia 21, 2013, 10:41:06 »
kenic, u mnie skrypt do wyświetlenia np kursu dla I oficera wygląda tak:


//Course_Right...

variable $_6522
{
module = "FSDataInput";
id = "6522";
type = int;
direct = in;
}

variable $_021
{
module = "simOUT";
id = "021";
type = string;
direct = out;
}

variable_changed $_6522
{
if ( $_6522 <= 9 )
{
Log( "CRS_RIGHT: 00" + ToString( $_6522 ));
$_021 = "00" + ToString( $_6522 ));
}

if ( $_6522 >= 10 )
{
if ( $_6522 <= 99)
{
Log( "CRS_RIGHT: 0" + ToString( $_6522 ));
$_021 = "0" + ToString( $_6522 ));
}
}

if ( $_6522 >= 100 )
{
Log( "CRS_RIGHT: "+ ToString( $_6522 ));
$_021 = ToString( $_6522 ));
}
}

codeking, tak na marginesie,
czy aplikacja domowy kokpit może obsługiwać przekaźniki czasowe?
Chodzi o to, aby po czasie od pewnego zdarzenia ( np od przełącznika ) zapaliła się dioda ( np po 2 minutach )

Odp: Aplikacja DomowyKokpit
« Odpowiedź #362 dnia: Grudnia 23, 2013, 21:41:10 »
@peccet
Tak, moduł Timer, http://homesimcockpit.com/?p=190

Odp: Aplikacja DomowyKokpit
« Odpowiedź #363 dnia: Grudnia 26, 2013, 14:55:27 »
Faktycznie zapomniałem o module Timer.
Dokładnie potrzebuje wykonać skrypt, który umożliwi miganie litery A na wyświetlaczu 7 segmentowym.
Wyświetlacz wyświetla literę A bez problemu. Wykorzystałem do tego zapis bitowy danego wyświetlacza.

Wykonałem taki skrypt
$_025 = "  "+ ToString( $_6524/0131072--8448 ));
$COM2_7led_025_001_int = 238;

Działa bez zarzutu, ale nie umiem poradzić sobie aby uzyskać efekt migania dla $COM2_7led_025_001_int = 238.

Druga spawa.
Do prawidłowego wyświetlenia wartości prędkości muszę zmienną $_6524 dzielić przez jakieś cyfry. Dwa tygodnie szukałem powodu złego wyświetlania, kombinowałem kombinowałem ale nie uruchomiłem tak jak być powinno. W końcu wymyśliłem wspólny mianownik i jak na razie działa,  ALE TO JEST PARTYZANTKA )
Powodem moich dziwnych przeliczeń jest typ offsetu dla SPEED w PMDG ( FLT32, 4 znaki ). Nie mam pojęcia jak go prawidłowo zapisać w skryptach i w FSData.xml. 

Możesz podsunąć idee, w którym mam zmierzać aby napisać taki skrypt ( łącznie z miganiem litery A ) ?

Na wyświetlenie prędkości przyjąłem 5 wyświetlaczy 7 segmentowych.
Pierwsza ma za zadanie wyświetlić literę A lub cyfrę  8.
Druga ma być pusta
Trzecia, czwarta i piąta ma wyświetlić prędkość.
Cyfra 8 i litera A powinny migać ( załączam je od zmiennej $_652A i $_6529 )

Ogólnie to skrypt który jest poniżej działa, ale to nie jest doraźne zaprogramowanie. Jest to nie profesjonalnie.

//Speed...

//anun_IAS_Blank....................................

variable $_6528
{
module = "FSDataInput";
id = "6528";
type = int;
direct = in;
}

variable_changed $_6528
{
if ( $_6528 == 1  )
{
Log( "anun_IAS_Blank:ON " );
}

if ( $_6528 == 0  )
{
Log( "anun_IAS_Blank:OFF " );
}
}

//anun_Overspeed_Blank..............................

variable $_6529
{
module = "FSDataInput";
id = "6529";
type = int;
direct = in;
}

variable_changed $_6529
{
ForceSignal($_6524);

if ( $_6529 == 1  )
{
Log( "anun_OverSpeed_BLANK:ON " );
}

if ( $_6529 == 0  )
{
Log( "anun_OverSpeed_BLANK:OFF " );
}
}

//anun_Under_Overspeed_Blank.........................

variable $_652A
{
module = "FSDataInput";
id = "652A";
type = int;
direct = in;
}

variable_changed $_652A
{
ForceSignal($_6524);

if ( $_652A == 1  )
{
Log( "anun_Under_OverSpped:ON " );
}
                                                                               
if ( $_652A == 0  )
{
Log( "anun_Under_OverSpped:OFF " );
}
}

variable $_6524
{
module = "FSDataInput";       
id = "6524";
type = int;
direct = in;
}

variable $_025
{
module = "simOUT";
id = "025";
type = string;
direct = out;
}

variable $COM2_7led_025_001_int
{
module = "simOUT";
id = "COM2_7led_025_001_int";
type = int;
direct = out;
}

variable_changed $_6524
{
if ( $_6524 <= 1124073472 )
{
if ( $_652A == 1  )
{
Log( "Speed: A " + ToString( $_6524/0131072--8448 ));
$_025 = "  "+ ToString( $_6524/0131072--8448 ));
$COM2_7led_025_001_int = 238;
}
else
{
Log( "Speed: " + ToString( $_6524/0131072--8448 ));
$_025 = "  "+ ToString( $_6524/0131072--8448 ));
$COM2_7led_025_001_int = 0;
}
}
if ( $_6524 > 1124073472 )
{
if ( $_6524 < 1132494830 )
{
if ( $_652A == 1  )
{
Log( "Speed: A " + ToString( $_6524/065536--17024));
$_025 = "  "+ToString($_6524/065536--17024));
$COM2_7led_025_001_int = 238;
}
}

if ( $_6529 == 1  )
{
if ( $_6524 < 1132494840  )
{
if ( $_6524 > 1132494830  )
{
Log( "Speed: 8 " + ToString( $_6524/065536--17024));
$_025 = "8 "+ToString($_6524/065536--17024));
}
}
}

if ( $_6529 == 0  )
{
if ( $_652A == 0  )
{
if ( $_6524 < 1132494840  )
{
$COM2_7led_025_001_int = 0;
Log( "Speed:  " + ToString( $_6524/065536--17024));
$_025 = "  "+ToString($_6524/065536--17024));
}
}
}

}

if ( $_6524 > 1132494840  )
{
if ( $_6529 == 1  )
{
Log( "Speed: 8 " + ToString( $_6524/032768--34304 ));
$_025 = "8 "+ ToString( $_6524/032768--34304 ));
}

if ( $_6529 == 0  )
{
Log( "Speed: " + ToString( $_6524/032768--34304 ));
$_025 = "  "+ ToString( $_6524/032768--34304 ));
}
}
}
variable $_6528
{
module = "FSDataInput";       
id = "6528";
type = int;
direct = in;
}

Odp: Aplikacja DomowyKokpit
« Odpowiedź #364 dnia: Grudnia 28, 2013, 10:13:42 »
Czy te zmienne $_652A i $_6529 informują o tym, że np. literka A powinna mrugać czy informuje o tym, że ta literka jest zapalona i odpowiednio zmienia się wartość (czyli wystarczy zapalać i gasić A wg. wartości offsetu) ?

Czy możesz sprawdzić w aplikacji FSInterrogate jaka jest wartość dla offsetu z prędkością?

Odp: Aplikacja DomowyKokpit
« Odpowiedź #365 dnia: Grudnia 28, 2013, 21:02:03 »
Zmienne  $_652A i $_6529 oznaczają zapalenie się cyfry 8 lub litery A z tym tylko, że sygnał jest ciągły i trwa tak długo do puki w/w zmienne mają wartość 1.
Symulator nie generuje przerywań. Przerywania trzeba opracować samemu. I tu jest pies pogrzebany.

Obecnie wyświetlacz wyświetla je prawidłowo z tym tylko, że nie migają. Sygnał migania jest do opracowania w własnym zakresie.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #366 dnia: Stycznia 02, 2014, 22:43:45 »
Wg. tego http://homesimcockpit.com/?p=190 można to prosto zrobić. Nawet przykładowy skrypt można wykorzystać.

W momencie gdy w ofsecie $_652A (lub $_6529) pojawia się informacja, że coś ma mrugać to zapalamy to coś i startujemy timer

Timer:StartTimer( "timer_00" );

Jak w ofsecie jest informacja, że nic nie ma mrugać to zatrzymujemy timer:

Timer:StopTimer( "timer_00" );

Ale, timer trzeba skonfigurować, najlepiej w zdarzeniu input_started:

   input_started
   {
      Log( "Ustawienie licznika, nieskończenie wiele wywołań co 250ms" );
      Timer:SetTimer( "timer_00", 250, 0 );
   }

I pozostało już tylko obsłużenie zdarzenia timera:
   variable_changed $timer_00
   {
                // warto na początku sprawdzić wartość ofsetu, który decyduje o tym czy coś ma mrugać, jeśli nie ma mrugać to od razu return

                // sprawdzić czy dioda jest zapalona, jeśli tak to zgasić, jeśli nie to zapalić
               
   }

Odp: Aplikacja DomowyKokpit
« Odpowiedź #367 dnia: Stycznia 03, 2014, 07:17:45 »
Dzięki za informacje, w wolnym czasie zabiorę się za programowanie i zobaczymy co i jak.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #368 dnia: Stycznia 04, 2014, 23:09:11 »
codeking, udało mi się uruchomić timer.
Do migania musiałem wykorzystać 2 timery. Pierwszy zapala a drugi czyści wyświetlacz. Tak czy owak  litera A i cyfra 8 migają świetnie. Załączanie i wyłączanie jest od zmiennych opisanych post wyżej. Częstotliwość migania dobrałem według własnego uznania ( 1200ms i 600ms ).
Do wyświetlenia prędkości mam segment wyświetlaczy składający się z 5 pojedynczych wyświetlaczy. Podzieliłem go na 2 części nadając 2 różne ID. Na wyświetlaczach 3,4,5 wyświetlam kurs, na 1wszym migania a drugi jest pusty.  Nie sądziłem że będzie to takie proste.
Zauważyłem jedną ciekawą rzecz, mianowicie jeśli dany wyświetlacz zapalam bitowo  muszę go gasić bitowo ( czyścić ). Inaczej po skończeniu migania wyświetlacz świecił dalej. To samo tyczy się formy string. Jeśli zapalam w postaci string to gaszę również.

Do gaszenia bitowo : np. $COM2_7led_025_001_int = 0;

Do gaszenia w typie string : $_25mig = "  ");

W temacie timera wielkie dzięki za info.

Kolejny problem dotyczy nie programowania lecz płytki simIn.

Może doradzisz mi dlaczego płytka simoutXL nie widzi za każdym razem płytki simIn ?
Mam 2 płytki simoutXL. Jedną zrobiłem rok temu, drugą kilka tygodni temu. Obie płytki posiadają różne układy RS232 ( jedna jest ACPE a druga CPE, oczywiście kondensatory dobrane ). Na obu występuje ta sama przyczyna. A teraz będzie ciekawiej.
Wykonałem 3 płytki simIN. Pierwsza była na płytce uniwersalnej a jej wykonane bardzo słabe. Wtedy tłumaczyłem sobie tym że mam wadliwą płytkę simIn. Teraz wykonałem taka jak jest na stronie simoutXL. Problem jest nadal. Płytka była za mała. Zbyt małe odstępy między ścieżkami powodowały zwarcia i błędy. Zaprojektowałem i wykonałem własną  płytkę simIn, już 3 i dalej to samo. Wszystkie kable sprawdzone, zimne luty wyeliminowane. Porty USB zmieniałem, przejściówki również, układy scalone. Kwarc też próbowałem podmienić od innego producenta,dalej to samo.
Często jest tak, że aby uruchomić simIn muszę odpiąć zasilanie od simIn, podpiąć go z powrotem i spróbować wykryć płytkę. I zazwyczaj wtedy jest już ok. Czasem wystarczy dwa, trzy razy uruchomić skrypt w konsoli.

Pierwszą płytkę programowałem poprzez złącze na płytce simIn. 2 kolejne programowałem w złączu do programowania w simoutXL. Dalej to samo. Brak mi pomysłów.

Macie jakieś sugestie gdzie szukać przyczyny ?

Płytka którą wykonałem :


Uploaded with ImageShack.us

Odp: Aplikacja DomowyKokpit
« Odpowiedź #369 dnia: Stycznia 05, 2014, 17:14:19 »
Widzę, że próbujesz metodą prób znaleźć przyczynę niepewnego działania simIN. Jak ja bym to zrobił.
1. Musisz mieć pewność, że działa interfejs USB->przejściówka i np. simOUT. Codeking zaprojektował sterownik w ten sposób, że uP są na nasłuchu. Wystarczy wyposażyć simOUT w jeden uP i sprawdzić czy działa. Jeśli tak to można podłączyć simIN.
2. Po podłączeniu simIN sprawdzić czy nadal działa prawidłowo simOUT. Jeśli tak to sprawdzić simIN. SimIN komunikuje się z pc w obu kierunkach. Czy jest komunikacja można stwierdzić na LED-ach podpiętych do lini TxD oraz RxD. Jeśli masz oscyloskop to można odczytać bajty.
3. Możesz sprawdzić simIN w układzie  simIN połączony z simOUT w którym jest tylko układ RS232, pozostałe układy możesz wyjąć z podstawek (zakładam, że masz podstawki).
Na podstawie testów wg. 1, 2 oraz 3 można znaleźć przyczynę niestabilnej pracy simIN.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #370 dnia: Stycznia 05, 2014, 21:39:47 »
vito_zm, wszystko to już sprawdzałem.
SimoutXL działa świetnie, nie mam z nim żadnych problemów, za każdym razem mogę wyświetlić cokolwiek na wyświetlaczach i zapalić lub zgasić diody ( działa za każdym podłączeniem ). Dodatkowo sprawdzałem simoutXL na kilku przejściówkach. Działa bez zarzutu na każdej.

Podłączam simIn a simoutXL działa dalej bez najmniejszego błędu ale simIN nie zawsze jest wykryty. Oscyloskopu nie mam, a nawet jak bym miał to nie wiem jak się go używa.
Test bez układów scalonych też wykonałem. Żadnej różnicy. Ale podstawki oczywiście mam.

Dziś naszedł mnie jeszcze jeden pomysł. Spróbuje zmienić zasilacz. Obecnie mam 5V DC z jakiegoś telefonu o prądzie 1A. Prąd duży, jak na taką płytkę to bardzo duży. Nie chce  mi się wierzyć, że pobór simoutXL i simIN razem wzięty jest większy od 1A.
Choć nie wiem czy ma to sens zmiany zasilacza, bo jak działa simoutXL to czemu simIn na tych samych kościach miałby nie działać. 
Zastanawiam się czy zwiększenie kondensatorów na płytce simIN nie załatwi sprawy. Ale wolałbym aby wypowiedział się ktoś, kto się na tym zna. Nie chce coś spalić.

vito_zm, pomysłów mi naprawdę brak ale staje się to dla mnie coraz bardziej uciążliwe.
Kończę powoli MCP i za chwilę zacznę budowę obudowy do niego. Jak ja potem będę wykrywał simIN to nie wiem. 

Odp: Aplikacja DomowyKokpit
« Odpowiedź #371 dnia: Stycznia 05, 2014, 22:08:43 »
Z tego co napisałeś wynika, że problem jest w komunikacji pc simIN. Tak jak napisałem wszystkie uP od simOUT oraz uP od simIN są podłączone równolegle od jednej ścieżki. Każdy uP ma swój IP i program HSC komunikuje się z określonym przez IP uP. Tylko simIN ma komunikację dwukierunkową, może kierunek od simIN do pc czyli odpowiedź nie działa. Komunikacja pomiędzy modułami (uP) jest za pomocą kilku bajtowych protokołów czyli obserwując LED powinieneś zauważyć czy migają przy wysłaniu komendy odczytu jakiegoś przełącznika.
Z simOUT potrzebujesz tylko RS232 pozostałe układy można wyjąć z podstawek. Może codeking doradzi Tobie jakiś prosty sposób testu. Zobaczysz, że problem okaże się trywialny.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #372 dnia: Stycznia 06, 2014, 11:19:02 »
vito_zm, chyba znalazłem przyczynę.

Trzeba ustawić prędkość i bity stopu. Ustawiłem to w konsoli. Ale grzebiąc w sterownikach win7 i konwertera rs232 na usb również znalazłem możliwość ustawienia bitów, prędkości i innych wartości.
U mnie w systemie były inne. Ustawiłem je obecnie na takie jak mam w konsoli.
Zobaczymy czy powodem tego była zła konfiguracja w systemie. Oby tak, bo to wyeliminowało kolejny problem.
Po testach dam Wam znać co i jak.

Obecnie mam ustawione :
Prędkość transmisji  57600
Ilość bitów danych 8
Bity stopu 2
Parzystość brak
Handshake ( nie wiem co to jest ) brak.

Czy te ustawienia są prawidłowe ? Możecie je sprawdzić u siebie ?

A tak na marginesie. Mam banalne pytanko, ale nigdzie znalazłem informacji na nie, mianowicie :
Do czego służy złącze EXTENSION PORT na simoutXL ? Podłącza się do niego analogi ?

Odp: Aplikacja DomowyKokpit
« Odpowiedź #373 dnia: Stycznia 06, 2014, 16:15:38 »
Cytuj
Do czego służy złącze EXTENSION PORT na simoutXL ? Podłącza się do niego analogi ?
O ile mnie pamięć nie myli to można podłączać kolejne moduły simOUT. Nie mam schematu, ale z tego co pamiętam to jeden podstawowy simOUT powinien mieć interfejs RS232 do komunikacji z pc a pozostałe mogą być połączone przez te złącza 3 pin Extension  port co daje oszczędność portów RS232 i przejściówek na USB.
Co do ustawienia rs232 to nie pamiętam, ale to musi być opisane na stronie codeking.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #374 dnia: Stycznia 06, 2014, 20:34:41 »
Ustawienia transmisji RS232 dla simOUT (i simIN jednocześnie):
Prędkość: 57600
Ilość bitów: 8
Bity stop: 2
Parzystość: brak
Handshake: brak

Złącze EXTENSION PORT służy, tak jak napisał vito_zm, do podłączenia kolejnych płytek simOUT i zaoszczędzeniu tym samym portu RS/USB.