Wywołanie danych przez naciśnięcie przycisku.
Wywołanie danych przez naciśnięcie przycisku.
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.
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.
Re: Wywołanie danych przez naciśnięcie przycisku.
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 541 razy
Wywołanie danych przez naciśnięcie przycisku.
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.
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.
Wywołanie danych przez naciśnięcie przycisku.
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:)
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:)
Wywołanie danych przez naciśnięcie przycisku.
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ć.
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 623 razy
Wywołanie danych przez naciśnięcie przycisku.
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ć.
Re: Wywołanie danych przez naciśnięcie przycisku.
Może i byłoby lepiej i wygodniej, ale założenia do programu są takie żeby wykonać to na przyciskach.
Wywołanie danych przez naciśnięcie przycisku.
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.