RS232 jednorazowe wysyłanie
RS232 jednorazowe wysyłanie
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
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
Re: RS232 jednorazowe wysyłanie
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.
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.
Re: RS232 jednorazowe wysyłanie
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.
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.
Re: RS232 jednorazowe wysyłanie
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.
Re: RS232 jednorazowe wysyłanie
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,
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,
Re: RS232 jednorazowe wysyłanie
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"
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.
Re: RS232 jednorazowe wysyłanie
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,
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,
Re: RS232 jednorazowe wysyłanie
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
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
Re: RS232 jednorazowe wysyłanie
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