Wywołanie danych przez naciśnięcie przycisku.

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
goldi
Posty: 7
Rejestracja: 10 gru 2011 11:15
Wersja środowiska: LabVIEW 2011

Wywołanie danych przez naciśnięcie przycisku.

Post autor: goldi »

Witam,

Mam dość prosty problem do rozwiązania, a jednak nie potrafię go rozgryźć i prosiłbym o pomoc.
Program, który mam działa poprawnie, ale chciałbym wprowadzić pewne udogodnienia. Aktualnie wprowadzenie kilku danych i wysłanie ich w formie komunikatu wymaga wpisania ich z klawiatury w odpowiednie pole. Program bazuje na 12 komunikatach. Z racji tego, że jest ich niewiele chciałbym zrealizować wywoływanie tych wiadomości przez naciśnięcie konkretnego przycisku (dwustanowego). Przykładowo, przycisk 1 powoduje wysłanie komunikatu '51' (ON) i '50' (OFF). Jednocześnie chciałbym aby nadal istniała możliwość wpisywania komunikatów z klawiatury, a wywołanie komunikatu przez naciśnięcie przycisku powodowało również wyświetlenie go w polu wpisywania/edycji z klawiatury.

Proszę o pomoc.
Awatar użytkownika
Harnas
Posty: 152
Rejestracja: 16 mar 2011 09:56
Wersja środowiska: LabVIEW 2009

Re: Wywołanie danych przez naciśnięcie przycisku.

Post autor: Harnas »

Moj pomysl na rozwiazanie problemu. Troche malo eleganckie, ale pierwsze co mi przyszlo do glowy. W Twoim przypadku musialbys nalozyc na siebie oba elementy.
Załączniki
Buttons.vi
(9.9 KiB) Pobrany 435 razy
goldi
Posty: 7
Rejestracja: 10 gru 2011 11:15
Wersja środowiska: LabVIEW 2011

Wywołanie danych przez naciśnięcie przycisku.

Post autor: goldi »

Dziękuję za odpowiedź.
Chyba niezrozumiale napisałem. Zacznę od tego, że cały program dotyczy komunikacji ze sterownikiem OPLC poprzez magistralę CAN. W tym momencie żeby wysłać jakąś ramkę danych do sterownika muszę podać (wpisać/wybrać) )standard ramki, ID oraz dane. Chciałbym aby te parametry były wysyłane tylko przez wciśnięcie konkretnego przycisku dla danego zdarzenia. Przykładowo, zapalenie żarówki jest realizowane przez standardowy format ramki (wartość 0 w programie), ID=5 i wartość danych 1. Żarówka gaśnie dla ramki o wartości danych równych 0 (ID i standard ten sam). Należy przypisać konkretne zdarzenia do konkretnego przycisku z tym, że powinna istnieć nadal opcja edycji tych parametrów z klawiatury.
Garreth
Posty: 74
Rejestracja: 28 gru 2011 14:13
Wersja środowiska: LabVIEW 2011

Wywołanie danych przez naciśnięcie przycisku.

Post autor: Garreth »

Jeżeli nie spowoduje to kompromitacji tajności jakiejś umowy, to mógłbyś podrzucić kod, albo przynajmniej fragment odpowiadający za wysyłanie ramek.
Gdybyś używał struktury producer/consumer wraz z maszyną stanu, to sprawa byłaby prawdopodobnie banalna - stworzyłbyś odpowiednie przyciski, każdemu w strukturze event przypisał akcję "on value change" i rozkazywał pętli konsumenta przez kolejkę wysłanie odpowiednich ramek. Jeżeli program nie posiada takiej struktury, wtedy stworzenie podobnego rozwiązania musiałoby się odbyć prawdopodobnie jakoś na case'ach, ewentualnie można by zwinąć wartości wszystkich przycisków w jakiś wektor, ale poziom komplikacji wzrósłby znacząco, a dopisanie obsługi kolejnego przycisku (np po miesiącu) byłoby straszne:)
goldi
Posty: 7
Rejestracja: 10 gru 2011 11:15
Wersja środowiska: LabVIEW 2011

Wywołanie danych przez naciśnięcie przycisku.

Post autor: goldi »

Program jest oparty na przykładach, które dostarcza producent dlatego nie jest to żadną tajemnicą. Pliki w załączniku (dla wersji 9).
Program wysyła ramkę zdefiniowaną w polu 'MSG' (po wciśnięciu ENTER). Jeśli sterownik odbierze ramkę to wysyła automatycznie ramkę zwrotną do programu 'Received MSG'.
Definiuję pola 'Flags', 'ID(Hex)' oraz 'Data' dla różnych zdarzeń. Pozostałe pola są ustawiane przed wywoływaniem zdarzeń.
Wydaje mi się, że wykonanie opcji z przyciskami na strukturach 'case' nie jest zbyt skomplikowany. Problem jest w tym, że nie wiem jak się za to zabrać.
Załączniki
can_send_receive_9.zip
(173.07 KiB) Pobrany 506 razy
Garreth
Posty: 74
Rejestracja: 28 gru 2011 14:13
Wersja środowiska: LabVIEW 2011

Wywołanie danych przez naciśnięcie przycisku.

Post autor: Garreth »

Ten program wygląda tak, jakby ramkę z informacjami w klastrze MSG wysyłał co obrót pętli (btw, w pętli masz zdublowany wait until next ms). Gdyby zachować obecną strukturę programu, nie byłoby wygodniej zrobić listy rozwijanej (combo box na przyklad), albo checkboxów? Taką listę, podpiąć pod warunek case'a, a każdym warunku tego case'a, zdefiniować jak ta ramka miałaby wyglądać.
goldi
Posty: 7
Rejestracja: 10 gru 2011 11:15
Wersja środowiska: LabVIEW 2011

Re: Wywołanie danych przez naciśnięcie przycisku.

Post autor: goldi »

Może i byłoby lepiej i wygodniej, ale założenia do programu są takie żeby wykonać to na przyciskach.
goldi
Posty: 7
Rejestracja: 10 gru 2011 11:15
Wersja środowiska: LabVIEW 2011

Wywołanie danych przez naciśnięcie przycisku.

Post autor: goldi »

Udało mi się zrealizować zadanie na przyciskach za pomocą zmiennej lokalnej 'MSG', rozbicia pierwszego klastra tablicy, trochę struktur 'case' i podstaw algebry Boola. Trochę klikania, ale warto.
ODPOWIEDZ