Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 7 lut 2025, o 21:01


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 22 sie 2019, o 15:09 
Offline
Użytkownik

Dołączył(a): 13 mar 2013
Posty: 123
Pomógł: 1

Witam
Może na przykładzie wyjaśnię o co mi chodzi.
Wyobraźmy sobie iż mamy silnik któremu za pomocą paru klawiszy chcielibyśmy nadawać pewne parametry ruchu - klawisz nr1 - silnik obraca się z prędkością v1 do przodu, klawisz nr2 - silnik obraca się z prędkością v2 do tyłu, itd.
Tworzę więc najpierw strukturę SILNIK i odpowiednie obiekty:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Następnie tworzę drugą strukturę związaną z klawiszami, jak w znanym ogólnie przykładzie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Oczywiście jako fun1 i fun2 kryje się funkcja Obsługa_Silnika - jest to ta sama funkcja wywoływana z różnymi obiektami SILNIKA - Silnik1 i Silnik2. Tu nie ma problemu, bo w procedurze obsługi klawisza mogę wywołać fun ze wskaźnikiem do Silnik1 i Silnik2.
Schody zaczynają się przy kolejnych klawiszach Klawisz2, Klawisz3 itd.
Przy tworzeniu tych obiektów mogętylko podać wskaźnik do funkcji Obsługa_Silnika która dla każdego obiektu będzie taka sama bez uwzględnienia iż powinna być wywoływana z różnymi paramtrami. Funkcja obsługi klawiszy też jest jedna.
Radzę sobie w ten sposób iż tworzę zbiór dodatkowych funkcji pośrednich wywoływanych z obiektów Klawisz1, Klawisz2 itd., i dopiero w tych funkcjach wywołuję Obsługę_Silnika z odpowiednim parametrem.
Ale chciałbym prościej. Jak to osiągnąć?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sie 2019, o 20:53 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Z Twojego opisu trudno jest wywnioskować, co dokładnie chcesz osiągnąć. Nie wiadomo np.: ile jest silników, ile jest klawiszy, a przede wszystkim jakie są zależności między nimi, to znaczy iloma i którymi silnikami sterują poszczególne klawisze.

Tak na pierwszy rzut oka, skoro funkcja Obsługa_Silnika jest wspólna, to po co Ci w ogóle wskaźnik do niej w strukturze BUTTON? Powinieneś w niej umieścić raczej parametry, na jakie dany klawisz ma ustawić poszczególne silniki po jego wciśnięciu. Wydaje mi się, że niepotrzebnie skomplikowałeś sprawę a rozwiązanie może być banalne, ale musiałbyś sprecyzować cel, jaki chcesz osiągnąć.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sie 2019, o 13:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 maja 2015
Posty: 61
Pomógł: 2

Witaj
Zamontuj falownik i po sprawie , tam masz wszystkie operacje na
przyciskach
-start
-stop
-do przodu
-do tył i wiele innych

No chyba że chcesz się pomęczyć samemu :D albo myślisz o sterowaniu z telefonu.
Do falowników LG chyba jest aplikacja na PC



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sie 2019, o 15:19 
Offline
Użytkownik

Dołączył(a): 05 sty 2015
Posty: 393
Lokalizacja: Mielec
Pomógł: 14

ABB ACS 580 tez na fona apka jest.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sie 2019, o 16:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 24 mar 2012
Posty: 72
Pomógł: 5

Cześć,
Twój opis jest trochę za mało dokładny. Mógłbyś sprecyzować czym dysponujesz i co chcesz osiągnąć ?

1) ile masz silników ? (z pierwszego akapitu wydaje się, że jeden silnik a z listingu, że kilka silników między innymi stąd konsternacja),
2) ile masz przycisków i jaka jest rola każdego z nich ? (jeżeli jeden silnik to rozumiem, że każdy przycisk odnosi się do tego samego silnika ale jeżeli masz kilka silników to jakie role pełnią poszczególne przyciski),
3) rozumiem, że funkcja która nazywasz: "Obsługa_Silnika" to funkcja która jest rejestrowana pod wskaźnikiem "void ( *kfun) (SILNIK *btn);". Jeżeli nie jest to tajemnicą to wrzuć definicję tej funkcji.

Pozdrawiam :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sie 2019, o 19:42 
Offline
Użytkownik

Dołączył(a): 13 mar 2013
Posty: 123
Pomógł: 1

Trochę się nie zrozumieliśmy. Struktura SILNIK nie określa różnych silników, a opisuje parametry pracy jednego. Po prostu wywołując SILNIK1 mówię że np. nasz silnik ma obracać się do przodu z prędkością V1 a wywołując SILNIK2 uruchamiam go do tyłu z prędkością V2. Mogę tak sobie ustalić różne tryby pracy tego samego silnika i wywoływać je odpowiednimi klawiszami - do tego mają właśnie one służyć. Dodatkowe klawisze mogą też służyć do precyzyjnego dostrojenia wybranej już prędkości. Stąd trudno określić z góry zarówno ilość obiektów SILNIK jak i klawiszy.
Funkcja Obsluga_Silnika to prostu przełączanie uzwojeń silnika krokowego w odpowiedniej kolejności i z właściwą prędkością, zgodnie z danymi pobieranymi z wybranego obiektu SILNIK. Niestety odpowiadam że smartfona i nie mam jak przytoczyć kodu.
Generalnie chodzi mi o to czy jest jakiś kruczek aby mieć wskaźnik do funkcji z wywołanym wcześniej parametrem.
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 sie 2019, o 06:26 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

MisterWhite napisał(a):
Trochę się nie zrozumieliśmy. Struktura SILNIK nie określa różnych silników, a opisuje parametry pracy jednego. Po prostu wywołując SILNIK1 mówię że np. nasz silnik ma obracać się do przodu z prędkością V1 a wywołując SILNIK2 uruchamiam go do tyłu z prędkością V2.

Nie zrozumieliśmy się, ponieważ dość ważne jest jednak nazewnictwo. Gdybyś np. strukturę nazwał PARAMETRY_RUCHU (lub choćby RUCH), a zmienne RUCH1, RUCH2, RUCH3, osobie postronnej łatwiej byłoby zrozumieć Twoje intencje. Podobnie jest z nazwą funkcji. Nazwa Obsluga_Silnika jest zbyt ogólna i niewiele mówi. Do mnie bardziej przemówiłaby np. nazwa Ustaw_Predkosc.

Nadal nie do końca rozumiem, co dokładnie chcesz osiągnąć. Przykładowo, skoro silnik jest jeden i klawisz ma ustawić jego parametry pracy, to po co Ci dwa wskaźniki do funkcji w jednej strukturze BUTTON. Jeden klawisz ma ustawić dwie różne prędkości tego samego silnika? Mam wrażenie, że niepotrzebnie skomplikowałeś sprawę i sam już się w tym nieco pogubiłeś. Gdybyś jednak mógł podać większe fragmenty kodu, być może łatwiej byłoby coś doradzić.

MisterWhite napisał(a):
Generalnie chodzi mi o to czy jest jakiś kruczek aby mieć wskaźnik do funkcji z wywołanym wcześniej parametrem.

Ogólnie rzecz biorąc, odpowiedź brzmi: NIE. Wskaźnik do funkcji to nie jest jakaś magiczna struktura, to zwykła wartość (16-bitowa w przypadku 8-bitowego AVR) reprezentująca adres (w pamięci programu) wejścia do funkcji. Żadnych dodatkowych informacji we wskaźniku umieścić się nie da. Można ewentualnie kombinować z użyciem jakichś "funkcji pośredniczących", ale raczej nie tędy droga (jak sam chyba zauważyłeś), choćby dlatego, że to fatalnie wpływa na czytelność kodu.

Moim zdaniem Twoje dylematy wynikają z próby niewłaściwego użycia wskaźników do funkcji, lub użycia ich w sytuacji do tego nieodpowiedniej. Wskaźniki do funkcji stosuje się np. tam, gdzie funkcja wywoływana po naciśnięciu klawisza jest inna w zależności od stanu, w jakim znajduje się aktualnie program (czyli np. przy obsłudze menu w zależności od kontekstu). Jeśli dobrze zrozumiałem, u Ciebie po naciśnięciu klawisza wywoływana jest zawsze ta sama funkcja ustawiająca parametry ruchu silnika, zmienia się tylko argument do niej przekazywany, więc wskaźnik do funkcji jest tu zbędny. W Twojej strukturze BUTTON możesz sobie zapisać ten argument (lub wskaźnik do niego) i przy obsłudze klawisza po prostu wywołujesz Twoją funkcję Obsluga_Silnika z tym argumentem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 7 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO