tak wyglądają moje programiki(część dalsza)

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
gathor
Posty: 18
Rejestracja: 02 maja 2004 00:00
Kontakt:

tak wyglądają moje programiki(część dalsza)

Post autor: gathor »

to jest moj program odpowiedzialny za generowanie ciągupseudolosowego i działa tak jak powinien [img]http://republika.pl/gathor/images/gen.jpg[/img] a to jest program do którego go wklejam i w którym nie działa. może źle to robię?? [img]http://republika.pl/gathor/images/qpsk.jpg[/img] jak powinien być dołączony taki program gen.vi do qpsk.vi by działał?? dzięki za poprzednie porady jeszcze napiszę nie ma obawy(nawet często) :)
bogdani
Administrator
Posty: 1315
Rejestracja: 30 lip 2003 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Ruda Śląska
Kontakt:

Zatrzymanie programu

Post autor: bogdani »

Chciałbym zauważyć, że funkcja Wait powoduje zatrzymanie wykonywania programu na określoną liczbę ms. Zauważ że używasz tej funkcji w obu pętlach i pragram jest co chwilę zatrzymywany 4 razy po 5 sekund i 200 razy po 100 milisekund.
W drugim przykładzie masz dwie pętle, które działają niezależnie, jednakże opóźnienia każdej z nich mają wpływ na cały program.
W takich przypadkach bardzo przydatna jest funkcja Highlight Execution (taka żaróweczka na pasku w oknie diagramu), która to pokazuje przebieg wykonywania programu. Widać wtedy przepływ danych między poszczególnymi elementami programu. Żeby pętle działały niezależnie i bez przerw musisz pozbyć się funkcji Wait, np. poprzez zliczanie milisekund (funkcja Tick Count podaje liczbę milisekund, która upłynęła od pewnego momentu).
Zastanawia mnie jedno, skoro działa generacja, to dlaczego nie zamkniesz tego do VI i nie wstawisz go jako SubVI (podprogramu) podłączając odpowiednio sygnały sterujące do wejść i pobierając dane z jego wyjścia. Będzie to rozwiązanie na pewno lepsze i program będzie wyglądał bardziej przejrzyście, a to jest ważne.
Jeśli wolno mi coś zasugerować, to ogólnie dąży się do minimalizowania jeśli to możliwe zmiennych, co można u ciebie zrealizować poprzez pociągnięcie sygnału z odpowiednich kontrolek i program będzie nadal czytelny.[/b]
bogdani
PS. Przeniosłem Twojego posta bo był założony w złym forum. Mam nadzieję, iż zwrócisz na to uwagę. Dodatkowo możesz kontynuować temat odpowiadając dalej, zamiast zakładać nowy temat, który dotyczy tego samego. (to takie małe uwagi na przyszłość)
Ktoś ci pomógł na forum? Podziękuj dając pochwałę.

Obrazek Obrazek Obrazek
PMaj
Posty: 231
Rejestracja: 04 sty 2004 00:00

Post autor: PMaj »

Witam

Odpowiedź na pytanie: "jak dołączyć aby działał ?" jest łatwa - jak się wie jak to zrobić ... również miałem kiedyś z tym duuże problemy. Spróbuję jak najlepiej - chodź odpowiedź na Twoje pytanie już padła - w pierwszej odpowiedzi 'bogdaniego'... Otóż z tego co widze, to w programie gen.vi masz 5 wejść (kolejno 1bit, 2bit, ... 5 bit) oraz jedno wyjście, którym jest sygnał psełdolosowy. Szczerze mówiąc w Twoim drugim programie qpsk.vi nie doszukałem się dołączonego gen.vi (więc może gadam głupoty - jak tak to przepraszam wszystkich).
Tak więc - aby dołączyć jeden program do drugiego należy go dołączyć jako tzw. sub.vi. Aby to zrobić należy w programie, który ma być wspomnianym sub.vi ustawić co ma być wejściem a co wyjściem (można również wyedytować ikonkę) - w tym celu (jak pisał już bogdani) należy - u ciebie w programie gen.vi - na ikonie w prawym górnym rogu kliknąć prawym przyciskiem myszy i wybrać zakładkę 'show connector', pokaże się prawdopodobnie biały kwadrat z czarną krawędzią. następnie klikasz na nim ponownie prawym klawiszem myszy i po najechaniu na zakładkę 'patterns' wybierasz jeden z interesujących cię połączeń - u ciebie takie, które ma 5 wejść i jedno wyjście - choć polecam zostawić zapas choć po jednym połączeniu wolnym... tak na wszelki wypadek. Na razie nie ma znaczenia co będzie wejściem a co wyjściem. Po wybraniu odpowiedniego układu pokaże się on w miejscu wspomnianego już białego kwadratu. teraz zmieniasz - że tak powiem - wskaĹşnik myszy w tools palet na wire (tak jak do łączenia bloczków) i musisz połączyć twoje pięć kontrolek wejściowych z odpowiednimi wejściami na układzie w miejscu ikony (tak jak w poprzednim poście bogdaniego) - klikasz raz na ikonie potem na wejściu - zmienia ono kolor w zależności od rodzaju wejścia. to samo z wyjściem. Zapisujesz program (działa bez zmian oczywiście) a następnie w Twoim programie qpsk.vi dołączasz go poprzez kliknięcie na palecie funkcji na 'select a vi...' (taka chmurka 'komiksowa') i znajdujesz swój program gen.vi. aby zadziałał musisz oczywiście teraz podpiąć wejścia i wyjście, gdyż twój dołączony program nie działa samoistnie - tzn. nie zadziała bez podłączonych wejść.
To tyle. Przepraszam za nieco przydługi list - ale może pomoże raczkującym. (sorki za błędy - ale nie czytałem ponownie tekstu)
gathor
Posty: 18
Rejestracja: 02 maja 2004 00:00
Kontakt:

Post autor: gathor »

tick count o ile dobrze przeczytałem synchronizuje się z wait until next multiple. po zamienieniu wait na dwa powyższe moja ch-ka się troszkę rozjeżdża. a generator wstawiam właśnie tak do programu qpsk [img]http://republika.pl/gathor/images/genp.jpg[/img] i w tym układzie się nie uruchamia. czy jeśli stosuję tick count to muszę umieszczać go w każdej pętli?. chodzi mi o to: mam program który zawiera pętle i wstawiam go do innego programu który też ma pętle, lecz umieszczam go poza ich obrębem(na zewnątrz jakiejkolwiek) czy nie powinien on wykonywać się niezależnie od pozostałych?taką miałem koncepcję. buduję sobie kilka programików składowych (generator, koder, nadajnik, modulator,demodulator. linię transmisyjną....) z których każdy wykonuje się w swoich pętlach, a potem umieszczam wszystkie w jednym dużym programie gdzie je łączę i takie tam. i tak właśnie mi nie chce działać a osobno każdy działa. wydaje mi się że nie rozumiem jakiejś ważnej podstawowej rzeczy w labview :( kupiłem nawet książkę Pana Tłaczały ale i ona za wiele mi nie pomogła. (a się zrobiłem z tą pracą dyplomową, mogłem matlaba brać i program w kilkanascie dni napisać jak pozostali :):):)) więc chyba powiem pomocy:) do napisania. dzięki za rady i już wiem na jakim forum jestem (na przyszłość :))
bogdani
Administrator
Posty: 1315
Rejestracja: 30 lip 2003 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Ruda Śląska
Kontakt:

Problem pętli

Post autor: bogdani »

Funkcja Tick Count pokazuje aktualny czas, jaki minął od określonego momentu w milisekundach. Natomiast Wait Until Next Multiple o ile dobrze pamiętam synchronizuje czas i czeka do następnego Tick Count co można wykorzystać do równoczesnego uruchomienia różnych elementów. Rozjeżdża Ci się pewnie dlatego, iż użycie Tick Count zamiast Wait ma nieco inne właściwości. Wait zatrzymuje wykonywanie programu na określony czas, natomiast odpowiednie użycie Tick Count
umożliwia sterowanie, jeśli jakiś czas minął to wykonaj to. Tylko czasem jest to niebezpieczeństwo, że możemy nie trafić w ten określony czas, o który nam chodzi, np. jeśli jakaś pętla wykona się dłużej, to możemy przekroczyć wymagany przez nas czas o np. kilka lub więcej milisekund. Wtedy właśnie się to będzie rozjeżdżało. Można by się w tym momencie pokusić o jakieś inne rozwiązanie.
Co do drugiego pytania to oczywiście jeśli program umieścisz poza pętlą, to wykona on się tylko raz, potem będzie wykonywane to co jest w pętli. Więc jeśli chcesz, aby program był ciągle wykonywany, bezwzględnie musisz umieścić go w pętli, która jest wykonywana w czasie działania programu.
W LabVIEW o to właśnie chodzi, aby jeśli to możliwe robić sobie podprogramy odpowiedzialne za jakieś funkcje i potem łączyć je w jeden duży program. Może właśnie dlatego one nie działają bo są umieszczone w jakiejś pętli. Takie moduły powinny być wykonywane póki nie wykonają swojego zadania. Bo jeśli one generują jekieś dane to program LabVIEW zatrzymuje się na tym module (chyba że moduł ma być wykonywany równolegle) i czeka na wszystkie dane z tego modułu. Trzaba pamiętać, iż wykonywanie programu jest warunkowane przepływem danych.
uf ale się rozpisałem, mam nadzieję, że trochę pomogłem ...
bogdanii
Ktoś ci pomógł na forum? Podziękuj dając pochwałę.

Obrazek Obrazek Obrazek
gathor
Posty: 18
Rejestracja: 02 maja 2004 00:00
Kontakt:

Post autor: gathor »

jak mogę zastąpić zmienne lokalne w programie tak abym mógł stworzyć z danego programu podprogram??(tyczy się to programu generującego ciąg pseudolosowy widoczna jest tam choćby zmienna lokalna typu "5 bit").W czasie tworzenia podprogramu zmienne są "wyrzucane na zewnątrz" i tym samym nie biorą udziału w przesyłaniu danych na zewnątrz. Troszkę to komplikuje minimalizację programów, a potrzebne jest aby co przesunięcie rejestru wydobywać z niego dane, które odpowiadają za zmianę fazy sygnału modulowanego. Hejka do usłyszenia :)
ODPOWIEDZ