RS232 jednorazowe wysyłanie

Wszelkie sprawy związane z LabVIEW i komunikacją ze sprzętem. Problemy i ciekawe rozwiązania.
jutsu
Posty: 8
Rejestracja: 01 lip 2009 20:28
Lokalizacja: Zdzieszowice
Kontakt:

RS232 jednorazowe wysyłanie

Post autor: jutsu »

Witam wszystkich.

Jak w temacie chciałbym jednorazowo wysłać jakąś daną do procka. Na początku chciałem zrobić to na przycisku, ale jak zostanie włączony to niczym go wyłączę to wyśle już parę razy. Jak zrobić żeby tylko raz wysłał a po wysłaniu wystawił jakiś znacznik. Dopiero wtedy można było by znowu wysłać kolejną daną. Chodzi mi o to żeby nie potrzebnie nie wysyłał do procka cały czas tego samego. Wysyłał tylko wtedy, gdy np zmieni się położenie suwaka. Proszę o pomoc
gstomekk
Posty: 29
Rejestracja: 14 mar 2008 13:41
Wersja środowiska: LabVIEW 8.6
Kontakt:

Re: RS232 jednorazowe wysyłanie

Post autor: gstomekk »

Witam, niestety nie mogę udzielić Ci precyzyjnej odpowiedzi gdyż nie mam w tej chwili pod ręką LV i nie podzieliłeś się z nami schematem programu.
Ale jeżeli mówisz, że zanim zdążysz wyłączyć przycisk to wiadomość zostanie wysłana już kilkanaście razy to pewnie robisz to w pętli z użyciem bloczka case. Jeżeli występuje taki problem to zawsze można ustawić akcję mechaniczną w przycisku, także po jego włączeniu i odczycie wartości przez instrukcję warunkową automatycznie powróci on do stanu początkowego.
Jeżeli chcesz możesz także wykorzystać bloczki event. Kod wewnątrz nich będzie wykonany tylko w odpowiedzi na konkretne zdarzenie, a takowym może być np zmiana wartości suwaka. Jeżeli zdecydujesz się na takie rozwiązanie pamiętaj, żeby umieścić ten bloczek w pętli, bo inaczej wykona się on tylko raz.
pozdrawiam.
Awatar użytkownika
coolfon
Posty: 232
Rejestracja: 01 gru 2007 08:59
Wersja środowiska: LabVIEW 2009
Kontakt:

Re: RS232 jednorazowe wysyłanie

Post autor: coolfon »

Tak jak napisał gstomekk, nie podzieliłeś się swoim kodem, także możemy tylko zgadywać co robisz nie tak. Jeśli faktycznie wysyłasz dane w pętli, w której jest struktura Case, a do jej selectora podpięty jest ten Twój przycisk, to nic dziwnego że wysyła dan kilka(naście) razy.

Na obrazku poniżej masz zilustrowane jak wysłać dane tylko raz po naciśnięciu przycisku (tak jak zasugerował gstomekk - należy skorzystać ze struktury Event). Jest to tylko szybki przykład (lepiej dać dwie pętle While, osobna dla reagowania na przyciski, osobna dla obsługi RS232), ale daje ogólne pojęcie o co chodzi.
jutsu
Posty: 8
Rejestracja: 01 lip 2009 20:28
Lokalizacja: Zdzieszowice
Kontakt:

Re: RS232 jednorazowe wysyłanie

Post autor: jutsu »

Dokładnie tak jak mówicie. Użyłem pętli case i przycisku. Poniżej znajduje się mój schemat. Spróbuje opisać w skrócie jak to ma działać. Zmieniając wartość suwaka, końcowa wartość suwaka ma zostać wysłana do procesora następnie procesor ma wysłać potwierdzenie że otrzymał tą wiadomość i dopiero wtedy może znowu wysłać wartość suwaka. Potwierdzenie brzmi"OK=1", jeśli OK=1. W pętli read wyciągam wartość jeden poza pętle i na podstawie tego sygnału dopiero można wysłać następna wartość suwaka. Musiałbym zrobić tak jak sygnał od suwaka się zmieni to wystaw TRUE następnie wyślij wartość suwaka później czekaj na "OK=1" i dopiero sprawdzaj czy znowu wartość suwaka się zmienia. Próbowałem to zrobić na przycisku i bloczku select ale nie za bardzo to działa. Ma ktoś jakiś pomysł. Jak najlepiej wstawić tą pętle even bo jak zamieniłem pętle case na even to sygnał dochodzi do pętli even i się zatrzymuje, nie mogę wtedy odbierać już żadnych informacji z procka dopóki nie włączę wysyłania . Z góry dzięki za pomoc
Ostatnio zmieniony 11 sie 2009 22:30 przez jutsu, łącznie zmieniany 1 raz.
Awatar użytkownika
Cuspy1
Posty: 39
Rejestracja: 12 cze 2009 09:31
Lokalizacja: Warszawa
Kontakt:

Re: RS232 jednorazowe wysyłanie

Post autor: Cuspy1 »

Witam,

W załączniku znajdziesz vi skompilowany dla wersji LV 8.0
Ogólnie wychwytuje on zmianę wartości suwaka i wysyła ją na wskazany port oczekując na odpowiedź. Nie konfigurowałem portu i nie uwzględniałem znaków oddzielających ramki danych - będziesz musiał zrobić to sam bo niestety nie mogę sprawie poświęcić dzisiaj tyle czasu ile bym chciał.
Starałem się opisać kod źródłowy.

Twój opis działania programu pozostawia kilka niepewności jak np. czy urządzenie docelowe zawsze zwraca odpowiedź, czy możliwa jest odpowiedĹş inna niż "OK=1" np. "OK=0", jak program ma reagować itd.

Jeśli pojawią się dalsze kłopoty daj znać - będziemy kombinować.

Pozdrawiam,
jutsu
Posty: 8
Rejestracja: 01 lip 2009 20:28
Lokalizacja: Zdzieszowice
Kontakt:

Re: RS232 jednorazowe wysyłanie

Post autor: jutsu »

O to właśnie mi chodziło. Wielkie dzięki =D>
Tylko jeszcze nie za bardzo wszystko rozumiem. Czy można przerobić ten układ tak żeby odczytywał wszystkie dane które wysyła procesor. Po zmianie suwaka wysłał wartość np. V=1000 i następną zmiane suwaka wysłał dopiero po odczytaniu np. OK=1 (może również być inna komenda tak sobie po prostu wymyśliłem).
Układ ma działać tak. Procesor steruje pracą silnika elektrycznego.Wysyła wszystkie parametry do Labview (prąd, napięcie, obroty). Labview wysyła zadaną prędkość z suwaka. Żeby uniknąć wysłania złej danej wprowadziłem potwierdzenie "ok=1" :)
Ostatnio zmieniony 12 sie 2009 16:02 przez jutsu, łącznie zmieniany 2 razy.
Awatar użytkownika
Cuspy1
Posty: 39
Rejestracja: 12 cze 2009 09:31
Lokalizacja: Warszawa
Kontakt:

Re: RS232 jednorazowe wysyłanie

Post autor: Cuspy1 »

Witam,

Zmodyfikowałem kod. Teraz po zmianie wartości suwaka VI będzie w kółko wysyłał zmienną dopóki nie zostanie ona zaakceptowana. Wprowadziłem również Timeout, po wystąpieniu którego odczytywane są dane z procesora.
Naturalnie Timeout nie wystąpi w momencie wysyłania danych, więc kod nie zapewnia stałych odstępów między akwizycją danych z procesora.
Ponadto założyłem, iż informacje sterujące silnikiem są transmitowane non stop - jeśli jest to poprawne założenie to możesz mieć kłopot z odróżnieniem potwierdzenia odbioru poprawnej nastawy suwaka z ramką danych sterujących.


Pozdrawiam,
jutsu
Posty: 8
Rejestracja: 01 lip 2009 20:28
Lokalizacja: Zdzieszowice
Kontakt:

Re: RS232 jednorazowe wysyłanie

Post autor: jutsu »

Super.Wielkie dzięki :)
Wszystko już działa. Miałeś racje z tym znacznikiem dodatkowe wysyłanie 'OD' powodowało co jakiś czas zawieszenie programu w procku. Po ustawieniu LF wszystko działa poprawnie. Dodatkowo wprowadziłem początkowe zerowanie suwaka żeby uniknąć pomyłki i ruszenie silnika maksymalną prędkością. Wprowadziłem też kontrolkę "Akceptacja", która zerowana jest w czasie wysyłania i uruchamiana w czasie odczytu wartości 'OK=1' (odczyt usprawniłem bloczkiem "Serch/Split String" jak przyjdzie inna wartość niż "OK=1" to nie bierze jej pod uwagę).
Wszytko działa wyśmienicie.
Pozdrawiam i jeszcze raz wielkie dzięki za pomoc

P.S
Czy ma ktoś może model w labview do sterowania liniami USB na układzie "ft 232BM".Czy uda mi się na tym układzie wygenerować sygnał o zmiennej szerokości impulsów 10us-stan niski i 50us-stan wysoki
avatar_mk
Posty: 1
Rejestracja: 04 cze 2010 18:50
Wersja środowiska: LabVIEW 8.5

Re: RS232 jednorazowe wysyłanie

Post autor: avatar_mk »

Witam, chciałem na wstępie zaznaczyć, że jescze malo znam LabVIEW mam pewien problem właśnie z wysyłaniem danych przez RS232, dane mają być wyświetlane na lcd oprzez uC. Stworzyłem najprstyszy program przy użyciu VISA READ I WRITE, ale dana wysyła mi ciągle nie przerwanie a chciałbym zrobić tak aby się to wysłało tylko raz i 2 pytanie na uC mam zapisana pewną dana i chce ją pobierać i wyswietlać w lab view jak powinien wyglądać taki program. Program dostepny tuitaj rs232- przycisk nie działa umnie poprawanie. Czekam na pomoc. Pozdrawiam
ODPOWIEDZ