Sterowanie dwoma silnikami krokowymi (RS232, Euro, SMC)
Sterowanie dwoma silnikami krokowymi (RS232, Euro, SMC)
Witam wszystkich.
Dostałem do napisania program który ma za zadanie, w wielkim skrócie, poruszać dwoma silniczkami krokowymi. Przyznam że jestem zielony w tym temacie, a moja znajomość LabView nie stoi na zbyt wysokim poziomie. Miałem kiedyś jakiś kurs, ale obejmował tylko podstawy i było to spory kawałek czasu temu.
Zagadnienie przedstawia się tak: komputer komunikuje się z silniczkami z pomocą kasety EURO i SMC przez RS232, i na dobrą sprawę tyle wiem. Program ma działać w ten sposób, że po wciśnięciu przycisku i przytrzymaniu go, będzie poruszał się jeden z silników w jednym kierunku lub w drugim (góra, dół, prawo, lewo). Ma mieć cztery punkty charakterystyczne i powinien zapamiętać ich pozycję (kliknięcie odpowiedniej kontrolki), po czym (po kliknięciu powiedzmy "start") ma poruszać się od jednego punktu do drugiego i w dwóch z nich pozostać określoną przez użytkownika ilość czasu. A potem zakończyć swoje działanie. Coś tam jeszcze szefowa chciała, ale to i tak jak dla mnie to sporo.
I w związku z tym mam kilka pytań:
- czy z niewielką znajomością początkową LabView da się to napisać? Zaznaczę że mam wyznaczony deadline (17 styczeń), a jeszcze muszę odbyć testy. Czy lepiej zatrudnić kogoś z zewnątrz?
- Jakich informacji potrzebuję aby rozpocząć pracę?
- I czy mogę liczyć na pomoc w razie ewentualnych problemów?
Aha, do dyspozycji dostałem LabView 7.1.
Pozdrawiam
Dostałem do napisania program który ma za zadanie, w wielkim skrócie, poruszać dwoma silniczkami krokowymi. Przyznam że jestem zielony w tym temacie, a moja znajomość LabView nie stoi na zbyt wysokim poziomie. Miałem kiedyś jakiś kurs, ale obejmował tylko podstawy i było to spory kawałek czasu temu.
Zagadnienie przedstawia się tak: komputer komunikuje się z silniczkami z pomocą kasety EURO i SMC przez RS232, i na dobrą sprawę tyle wiem. Program ma działać w ten sposób, że po wciśnięciu przycisku i przytrzymaniu go, będzie poruszał się jeden z silników w jednym kierunku lub w drugim (góra, dół, prawo, lewo). Ma mieć cztery punkty charakterystyczne i powinien zapamiętać ich pozycję (kliknięcie odpowiedniej kontrolki), po czym (po kliknięciu powiedzmy "start") ma poruszać się od jednego punktu do drugiego i w dwóch z nich pozostać określoną przez użytkownika ilość czasu. A potem zakończyć swoje działanie. Coś tam jeszcze szefowa chciała, ale to i tak jak dla mnie to sporo.
I w związku z tym mam kilka pytań:
- czy z niewielką znajomością początkową LabView da się to napisać? Zaznaczę że mam wyznaczony deadline (17 styczeń), a jeszcze muszę odbyć testy. Czy lepiej zatrudnić kogoś z zewnątrz?
- Jakich informacji potrzebuję aby rozpocząć pracę?
- I czy mogę liczyć na pomoc w razie ewentualnych problemów?
Aha, do dyspozycji dostałem LabView 7.1.
Pozdrawiam
Pozdrawiam
Magoo
Magoo
- Nowszy
- Posty: 504
- Rejestracja: 30 maja 2008 08:33
- Wersja środowiska: LabVIEW 2011
- Lokalizacja: Katowice
- Kontakt:
Sterowanie dwoma silnikami krokowymi (RS232, Euro, SMC)
Cześć
Na pomoc liczyć możesz zawsze, ale pod warunkiem że sam poświęcisz na to trochę czasu i będziesz zadawał konkretne pytania na które nie znasz odpowiedzi, a nie 'napiszcie to za mnie'.
Na dobry początek dowiedz się, jak te silniczki są sterowane. Zapewne musisz wysłać przez RS jakieś komendy i silniczki będą już odpowiednio wysterowane. Jak już to będziesz wiedział, to wysłanie komendy z LV przez RS nie powinno być problemem (musisz znać parametry transmisji - prędkość, liczbę bitów stopu, parzystości, etc). A stąd już niedaleko do pełnej aplikacji. Zacznij więc od sprawdzenia jak się z tym komunikować, odpal przykład 'Basic serial write and read.vi', który powinien być dostarczony z LV i spróbuj spowodować, żeby cokolwiek się poruszyło.
PS. LV7.1 to już staruszek, dowiedz się czy masz dostęp do nowszej wersji.
Na pomoc liczyć możesz zawsze, ale pod warunkiem że sam poświęcisz na to trochę czasu i będziesz zadawał konkretne pytania na które nie znasz odpowiedzi, a nie 'napiszcie to za mnie'.
Na dobry początek dowiedz się, jak te silniczki są sterowane. Zapewne musisz wysłać przez RS jakieś komendy i silniczki będą już odpowiednio wysterowane. Jak już to będziesz wiedział, to wysłanie komendy z LV przez RS nie powinno być problemem (musisz znać parametry transmisji - prędkość, liczbę bitów stopu, parzystości, etc). A stąd już niedaleko do pełnej aplikacji. Zacznij więc od sprawdzenia jak się z tym komunikować, odpal przykład 'Basic serial write and read.vi', który powinien być dostarczony z LV i spróbuj spowodować, żeby cokolwiek się poruszyło.
PS. LV7.1 to już staruszek, dowiedz się czy masz dostęp do nowszej wersji.
Pozdrawiam, Maciek Antonik
Edu4Industry
Edu4Industry
Re: Sterowanie dwoma silnikami krokowymi (RS232, Euro, SMC)
Witam. dodam tylko do tego co napisał Nowszy, że:
- Według mnie LabVIEW jest bardzo intuicyjnym językiem, w którym można naprawdę szybko napisać program,
-Jeżeli chciałbyś zatrudnić kogoś z zewnątrz do napisania tego programu, Twoja praca może się wydłużyć kilkakrotnie, ponieważ będziesz prawdopodobnie musiał testować program za kogoś kto go napisał. Oznacza to tyle, że jeżeli coś będzie nie tak to niestety raczej marne szanse, że sam to poprawisz(łatwiej analizować swój kod), więc będzie się to wiązało z kolejnym wysyłaniem programu itd.
-Komunikacja przez RS w LabVIEW jest bardzo prosta jeżeli już wiesz to o czym napisał Nowszy. Poza tym prosząc kogoś o napisanie tego programu musisz zapewnić dokładnie takie same informacje.
Z tego wynika, że jeżeli chcesz mieć ten program to trzeba wziąć się do pracy i to jak najszybciej.
Pozdrawiam.
- Według mnie LabVIEW jest bardzo intuicyjnym językiem, w którym można naprawdę szybko napisać program,
-Jeżeli chciałbyś zatrudnić kogoś z zewnątrz do napisania tego programu, Twoja praca może się wydłużyć kilkakrotnie, ponieważ będziesz prawdopodobnie musiał testować program za kogoś kto go napisał. Oznacza to tyle, że jeżeli coś będzie nie tak to niestety raczej marne szanse, że sam to poprawisz(łatwiej analizować swój kod), więc będzie się to wiązało z kolejnym wysyłaniem programu itd.
-Komunikacja przez RS w LabVIEW jest bardzo prosta jeżeli już wiesz to o czym napisał Nowszy. Poza tym prosząc kogoś o napisanie tego programu musisz zapewnić dokładnie takie same informacje.
Z tego wynika, że jeżeli chcesz mieć ten program to trzeba wziąć się do pracy i to jak najszybciej.
Pozdrawiam.
Sterowanie dwoma silnikami krokowymi (RS232, Euro, SMC)
Witam ponownie.
Minął weekend i coś niecoś się ruszyło. Zanim jednak powiem to i owo odpowiem na pytanie czy mogę dostać nowszą wersję LabView. Niestety nie mogę, z powodów jakieś kompatybilności i ewentualnego przenoszenia programu na starsze komputery, czy czegoś. Nie do końca zrozumiałem o co chodziło, ale po 5 minutach w mojej głowie brzmiało to mniej więcej tak: "proszę nie narzekać na wersję, tylko pisać program". Mam nadzieję, że 7.1 starczy do napisania tego programu.
Dowiedziałem się też co nieco o silnikach i parametrach transmisji. Silniczki są krokowe, 4 fazowe i mam używać algorytmu 1/2.
Parametry transmisji są następujące: 8 bitów danych, brak parzystości, brak kontroli danych, szybkość 9600 bps.
Dorwałem też 3 książki o LabView, a mianowicie:
Znalazłem też niesamowicie przydatną [url=http://tcf.w.interia.pl/pspwf.pdf]pracę inżynierską[url] z UMK, która na dobrą sprawę robi prawie identyczną rzecz z silnikami jaką ja potrzebuję. No ale jak już wspomniałem, nie do końca kumam komunikację ze światem.
Napisałem też program, który, w założeniu, powinien działać, czy tak będzie przekonam się jutro, bo dziś niestety nie uda mi się go przetestować ze względu na obowiązki. Program zamieszczę w załączniku.
Bardzo bym prosił o to aby ktoś mądrzejszy ode mnie go przeanalizował i powiedział co myśli. Chodzi w nim o to, że po naciśnięciu przycisku, silnik ma się ruszać do chwili zwolnienia przycisku.
Przycisk "Hold" na razie nie jest podłączony, ale chciałbym aby działał na zasadzie przełączenia "Mechanical action" przycisków sterujących pomiędzy "Switch until relesed" a "Switch when pressed". Podejrzewam że trzeba skorzystać z property node, ale nie mogłem tego znaleźć. Ktoś może wie jak takie coś osiągnąć?
Aha i jeszcze jedno pytanie. Jest jakaś możliwość eksportowania całego diagramu do jakiegoś formatu graficznego w LabView?
To by było na tyle na chwilę obecną, mam nadzieję że nie zanudziłem postem i wyraziłem swoje myśli jasno, bo wiem, że mam z tym problemy
Pozdrawiam.
Minął weekend i coś niecoś się ruszyło. Zanim jednak powiem to i owo odpowiem na pytanie czy mogę dostać nowszą wersję LabView. Niestety nie mogę, z powodów jakieś kompatybilności i ewentualnego przenoszenia programu na starsze komputery, czy czegoś. Nie do końca zrozumiałem o co chodziło, ale po 5 minutach w mojej głowie brzmiało to mniej więcej tak: "proszę nie narzekać na wersję, tylko pisać program". Mam nadzieję, że 7.1 starczy do napisania tego programu.
Dowiedziałem się też co nieco o silnikach i parametrach transmisji. Silniczki są krokowe, 4 fazowe i mam używać algorytmu 1/2.
Parametry transmisji są następujące: 8 bitów danych, brak parzystości, brak kontroli danych, szybkość 9600 bps.
Dorwałem też 3 książki o LabView, a mianowicie:
- M. Chruściel, LabView w praktyce, wyd. btc, Legionowo 2008
- W. Tłaczała, Środowisko LabView w eksperyencie wspomaganym komputerowo, wyd. Naukowo-Technicze, Warszawa 2002
- M. L. Chugani, A. R. Samant, M. Cerna, LabView signal procesing, Prentice-Hall, 1998
Znalazłem też niesamowicie przydatną [url=http://tcf.w.interia.pl/pspwf.pdf]pracę inżynierską[url] z UMK, która na dobrą sprawę robi prawie identyczną rzecz z silnikami jaką ja potrzebuję. No ale jak już wspomniałem, nie do końca kumam komunikację ze światem.
Napisałem też program, który, w założeniu, powinien działać, czy tak będzie przekonam się jutro, bo dziś niestety nie uda mi się go przetestować ze względu na obowiązki. Program zamieszczę w załączniku.
Bardzo bym prosił o to aby ktoś mądrzejszy ode mnie go przeanalizował i powiedział co myśli. Chodzi w nim o to, że po naciśnięciu przycisku, silnik ma się ruszać do chwili zwolnienia przycisku.
Przycisk "Hold" na razie nie jest podłączony, ale chciałbym aby działał na zasadzie przełączenia "Mechanical action" przycisków sterujących pomiędzy "Switch until relesed" a "Switch when pressed". Podejrzewam że trzeba skorzystać z property node, ale nie mogłem tego znaleźć. Ktoś może wie jak takie coś osiągnąć?
Aha i jeszcze jedno pytanie. Jest jakaś możliwość eksportowania całego diagramu do jakiegoś formatu graficznego w LabView?
To by było na tyle na chwilę obecną, mam nadzieję że nie zanudziłem postem i wyraziłem swoje myśli jasno, bo wiem, że mam z tym problemy
Pozdrawiam.
- Załączniki
-
- Inicjalizacja.vi
- (118.47 KiB) Pobrany 479 razy
Pozdrawiam
Magoo
Magoo
Sterowanie dwoma silnikami krokowymi (RS232, Euro, SMC)
Niestety, pierwsze testy pokazały że program nie działa. Nie rusza silnikami, a nawet nie reaguje na użytkownika w żaden sposób. Używając żarówki widać że zatrzymuje się w Data Flush i stoi przez chwilę, po czym wywala błąd i stoi dalej, nawet sam się nie wyłącza.
Pozdrawiam
Magoo
Magoo
Sterowanie dwoma silnikami krokowymi (RS232, Euro, SMC)
Kilka uwag:
jesli struktura event to tylko wewnatrz pętli while,
Istnieją praktycznie tylko dwa wyjątki od tej reguły, tutaj się nie stosują.
Inicjalizacja portu prawidlowa, jednak: proponuję wykorzystać wzorzec Producer/Consumer Design Pattern (Events)
1. petla producenta bedzie tworzyła komendy i wstawiala je do kolejki
2. petla konsumenta bedzie odbierała komendy i wysyłała przez port szeregowy, a jesli nie dostanie żadnej komendy w okreslonym czasie - odczyta port szeregowy korzystając z timeoutu kolejki:
Zapis do portu wygląda oczywiście tak (sam środek case'a):
Oczywiscie to wzorzec,który trzeba odpowiednio dopasować do zadania.
Życzę powodzenia.
jesli struktura event to tylko wewnatrz pętli while,
Istnieją praktycznie tylko dwa wyjątki od tej reguły, tutaj się nie stosują.
Inicjalizacja portu prawidlowa, jednak: proponuję wykorzystać wzorzec Producer/Consumer Design Pattern (Events)
1. petla producenta bedzie tworzyła komendy i wstawiala je do kolejki
2. petla konsumenta bedzie odbierała komendy i wysyłała przez port szeregowy, a jesli nie dostanie żadnej komendy w okreslonym czasie - odczyta port szeregowy korzystając z timeoutu kolejki:
Zapis do portu wygląda oczywiście tak (sam środek case'a):
Oczywiscie to wzorzec,który trzeba odpowiednio dopasować do zadania.
Życzę powodzenia.
Sterowanie dwoma silnikami krokowymi (RS232, Euro, SMC)
Próbuję zrozumieć i użyć tego wzorca, ale do końca rozumiem jak działa. Przede wszystkim gdzie mam umieścić moją tablicę rozkazów którą chcę wysłać? Jak próbuję podłączyć ją bezpośrednio pod Enqueue Element to mówi mi że podłączyłem nie ten typ danych, to samo jest jak robię to przez pętlę For.
Spróbowałem więc umieścić procedury przed pętlą w Case'ie, ale i tu nic z tego.
No i stoję w miejscu, tak samo jak silnik.
Spróbowałem więc umieścić procedury przed pętlą w Case'ie, ale i tu nic z tego.
No i stoję w miejscu, tak samo jak silnik.
- Załączniki
-
- test1.vi
- (123.59 KiB) Pobrany 422 razy
Pozdrawiam
Magoo
Magoo
- smiga
- Administrator
- Posty: 817
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Sterowanie dwoma silnikami krokowymi (RS232, Euro, SMC)
W bloczku Obtain Queue podpinasz do Element Data Type (z tego co widzę co chcesz zrobić) tablicę 11 elementową typu string - może być wypełniona zerami bo tam tylko definiujesz typ danych.
W bloczku Enqueue Element w Event'cie wstawiasz swojego case'a (czyli przenosisz go z lewej strony schematu blokowego do odpowiednich zdarzeń w pętli event z odpowiednią obsługą przycisków).
To na początek - jak zrobisz i nie będzie coś działało zamieść znowu kod.
W bloczku Enqueue Element w Event'cie wstawiasz swojego case'a (czyli przenosisz go z lewej strony schematu blokowego do odpowiednich zdarzeń w pętli event z odpowiednią obsługą przycisków).
To na początek - jak zrobisz i nie będzie coś działało zamieść znowu kod.
Sterowanie dwoma silnikami krokowymi (RS232, Euro, SMC)
Otóż działa on tak
producent:
1. Petla wykonuje sie gdy wystapi zdarzenie obsługiwane przez event
zatem
Jesli nacisniety jest przycisk Left Button wstawiasz w pętli FOR do kolejki kolejne elementy do wysłania.
Pętla FOR nie potrzebuje podłaczenia do N, jeśli wprowadzasz dane do pętli tak jak w konsumencie, czyli przez tunel indeksowany.
2. żaden z obsługiwanych przycisków nie powinien być podłaczony do ORa ze statusem błędu kończacym prace petli oprócz przycisku STOP, którego tutaj nie widać - zrób osobny event obsługujacy ten przycisk.
3. porównanie w konsumencie timeoutu jest nie potrzebne, tak jak było w przykładzie jest dobrze.
4. zapis do portu szeregowego prościej będzie zrobić bez petli i wysyłać kolejne stringi z tablicy od strony producenta:
Sugeruję jednak osobno przećwiczyć pracę ze strukturą event: sama petl while z eventem i obsługa czterech przycisków.
Na przykład nacisnięcie przycisku niech powoduje wyświetlanie kolejnych komend dla sterownika.
producent:
1. Petla wykonuje sie gdy wystapi zdarzenie obsługiwane przez event
zatem
Jesli nacisniety jest przycisk Left Button wstawiasz w pętli FOR do kolejki kolejne elementy do wysłania.
Pętla FOR nie potrzebuje podłaczenia do N, jeśli wprowadzasz dane do pętli tak jak w konsumencie, czyli przez tunel indeksowany.
2. żaden z obsługiwanych przycisków nie powinien być podłaczony do ORa ze statusem błędu kończacym prace petli oprócz przycisku STOP, którego tutaj nie widać - zrób osobny event obsługujacy ten przycisk.
3. porównanie w konsumencie timeoutu jest nie potrzebne, tak jak było w przykładzie jest dobrze.
4. zapis do portu szeregowego prościej będzie zrobić bez petli i wysyłać kolejne stringi z tablicy od strony producenta:
Sugeruję jednak osobno przećwiczyć pracę ze strukturą event: sama petl while z eventem i obsługa czterech przycisków.
Na przykład nacisnięcie przycisku niech powoduje wyświetlanie kolejnych komend dla sterownika.
Sterowanie dwoma silnikami krokowymi (RS232, Euro, SMC)
Spróbowałem pojąć lepiej strukturę Event, więc stworzyłem sobie program Event nauka. No i oczywiście nie zdołałem pojąć dlaczego przycisk Wszytko nie ustawia wartości true we wszystkich zmiennych lokalnych. Może w ten sposób nie można tego zrobić. Ale myślę, że mniej więcej pojąłem o co chodzi w tym. I może w przyszłości z pomocą przykładu Event Tracking się zrobi sterowanie klawiaturą, ale to podejrzewam daleka przyszłość.
Co się tyczy właściwego programu to się zastanawiam co zrobić aby w pętli konsumenta labview uznał mi połączenie Dequeue Element z Visa Write, bo mi piszczy że łączę nie te typy, nie używając For tak jak radził Mikrobi.
Zastanawia mnie też co będzie lepszym rozwiązaniem. Czy budowanie tablicy, czy użycie stałej.
Na chwilę obecną to wszytko, muszę się położyć i się z tym przespać. Jutro, ze względu na obowiązki przy silnikach będę od około godziny 12, więc testy jakichkolwiek poprawek zacznę dopiero wtedy.
Co się tyczy właściwego programu to się zastanawiam co zrobić aby w pętli konsumenta labview uznał mi połączenie Dequeue Element z Visa Write, bo mi piszczy że łączę nie te typy, nie używając For tak jak radził Mikrobi.
Zastanawia mnie też co będzie lepszym rozwiązaniem. Czy budowanie tablicy, czy użycie stałej.
Na chwilę obecną to wszytko, muszę się położyć i się z tym przespać. Jutro, ze względu na obowiązki przy silnikach będę od około godziny 12, więc testy jakichkolwiek poprawek zacznę dopiero wtedy.
- Załączniki
-
- nauka event.vi
- program do "nauki" struktury event
- (41.8 KiB) Pobrany 412 razy
-
- test1.vi
- program główny
- (105.69 KiB) Pobrany 422 razy
Pozdrawiam
Magoo
Magoo
Sterowanie dwoma silnikami krokowymi (RS232, Euro, SMC)
Dwie uwagi do test1.vi:
-kolejka powinna zostać utworzona dla pojedynczego elementu string, nie tablicy
- tablica powinna wchodzić do pętli FOR przez tunel indeksowany (PKM>> Enable Indexing).
Co do nauka event.vi : polecam poobserwowanie działania kodu na żarówce i usunięcie eventu "Timeout".
-kolejka powinna zostać utworzona dla pojedynczego elementu string, nie tablicy
- tablica powinna wchodzić do pętli FOR przez tunel indeksowany (PKM>> Enable Indexing).
Co do nauka event.vi : polecam poobserwowanie działania kodu na żarówce i usunięcie eventu "Timeout".
Sterowanie dwoma silnikami krokowymi (RS232, Euro, SMC)
Nauka Event naprawiłem. Też porobiłem na zmiennych lokalnych, ale zobaczyłem gdzie mają się znaleźć. Oczywiście doskonały to on nadal nie jest, ale przynajmniej pokazał mi jak to mam ugryźć.
No ale ważniejsze jest to że udało mi się ruszyć silniczkami, i chyba dziś już mi nic nie zepsuje humoru.
Na razie działa to trochę inaczej niż bym chciał ponieważ muszę zadać liczbę kroków, ponieważ jak próbowałem zrobić aby silnik jechał kiedy mam wciśnięty przycisk, to wykonywał jeden krok i koniec. Oczywiście wszystkie rady mile widziane w tym temacie.
Błąd też pojawił się w miejscu data flush, był problem z ilością bitów i wywalało błąd.
Następną rzeczą jaką ma wykonywać program to pamiętać 4 punkty pomiędzy którymi ma się przemieszczać. Myślałem żeby wykorzystać do tego tablice, ale nie wiem czy to się nie skończy tym że po prostu silniki wykonają potem dokładnie tę samą sekwencję co przy ustawianiu tych punktów. To znaczy będą zasuwać tam i z powrotem.
No ale ważniejsze jest to że udało mi się ruszyć silniczkami, i chyba dziś już mi nic nie zepsuje humoru.
Na razie działa to trochę inaczej niż bym chciał ponieważ muszę zadać liczbę kroków, ponieważ jak próbowałem zrobić aby silnik jechał kiedy mam wciśnięty przycisk, to wykonywał jeden krok i koniec. Oczywiście wszystkie rady mile widziane w tym temacie.
Błąd też pojawił się w miejscu data flush, był problem z ilością bitów i wywalało błąd.
Następną rzeczą jaką ma wykonywać program to pamiętać 4 punkty pomiędzy którymi ma się przemieszczać. Myślałem żeby wykorzystać do tego tablice, ale nie wiem czy to się nie skończy tym że po prostu silniki wykonają potem dokładnie tę samą sekwencję co przy ustawianiu tych punktów. To znaczy będą zasuwać tam i z powrotem.
- Załączniki
-
- test1.vi
- program do sterowania
- (154.98 KiB) Pobrany 426 razy
-
- nauka event.vi
- prosty program do skumania o co chodzi w strukturze event
- (47.45 KiB) Pobrany 411 razy
Pozdrawiam
Magoo
Magoo
Sterowanie dwoma silnikami krokowymi (RS232, Euro, SMC)
Uwagi do silników:
Konsument:
petla FOR nie potrzebuje deklaracji N - jest ono niejawnie deklarowane przez samoindeksujący sie tunel.
Sprawdzanie rozmiaru tablicy (i wprowadzanie go do N-ki pętli FOR) realizuje kompulator, można mu zaufać, nic nie zgubi w tym tunelu i tylko tyle razy wykona petlę ile jest elementów w tablicy.
Podobnie producent:
Number of steps jest nie potrzebne, jesli petla ma się wykonac tyle razy ile jest elementów w tablicy, trzeba tylko zmienić typ tunelu wejściowego:
prawy klawisz myszy z kursorem na tunelu >> Enable indexing
Konsument:
petla FOR nie potrzebuje deklaracji N - jest ono niejawnie deklarowane przez samoindeksujący sie tunel.
Sprawdzanie rozmiaru tablicy (i wprowadzanie go do N-ki pętli FOR) realizuje kompulator, można mu zaufać, nic nie zgubi w tym tunelu i tylko tyle razy wykona petlę ile jest elementów w tablicy.
Podobnie producent:
Number of steps jest nie potrzebne, jesli petla ma się wykonac tyle razy ile jest elementów w tablicy, trzeba tylko zmienić typ tunelu wejściowego:
prawy klawisz myszy z kursorem na tunelu >> Enable indexing
Sterowanie dwoma silnikami krokowymi (RS232, Euro, SMC)
Number of steps musiałem niestety wprowadzić ponieważ bez tego silniki wykonują tylko jeden krok, a potem nic. Gdybym chciał przesunąć układ o powiedzmy 3 cm w prawo to bym się naklikał na swoje buttony. Chciałbym aby silnik jechał kiedy mam wciśnięty kierunek, ale niestety się tak nie dzieję, stąd Number of steps.
Jutro rano sprawdzę czy nie będzie nic krzyczał jak mu usunąłem te deklaracje N.
Jutro rano sprawdzę czy nie będzie nic krzyczał jak mu usunąłem te deklaracje N.
Pozdrawiam
Magoo
Magoo
Sterowanie dwoma silnikami krokowymi (RS232, Euro, SMC)
Witam ponownie.
Po dzisiejszych testach muszę powiedzieć że program nie działał jak należy, przede wszystkim ruch silnika z pionie był niesamowicie powolny. Po pewnym czasie zobaczyłem, że jest to wina wpisania minimalnej prędkości w rozkazach, ale nawet przestawienie jej na maxa nie dało żądanych rezultatów. Poza tym sterowanie silnikiem powinno się odbywać sprzętowo, a tak się nie działo, i przy okazji liczba wykonywanych kroków była nie taka jak wpisywana w programie.
Więc po niezliczonej ilości ulubionego polskiego słowa na k, postanowiłem podejść do problemu troszkę inaczej. Mianowicie napisałem 4 Sub'y który każdy wykonuje ruch w odpowiednią stronę. Sprawdza też czy silnik zakończył pracę, czego wcześniej nie miałem.
Porzuciłem też idę pętli producent/konsument. Z całym szacunkiem Mikrobi, widzę że pętla ma duże możliwości, ale ja niestety nie do końca ją pojmuję, mam nadzieję, że się nie obrazisz i dalej będziesz dawał cenne rady.
Program ciągle zawiera strukturę Event w której wykorzystuję Case w celu odpalenia Sub'a.
Podjąłem też próby ustawienia jakiejś kolejki wykonywania ruchu, ale stanąłem na stworzeniu tablicy klastrów. Nie wiem teraz jak zrobić, aby zapamiętał 4 konkretne punkty (gdzie w dwóch z nich powinien zatrzymać się na określoną ilość sekund), i potem jeździł od jednego do drugiego.
Późnym wieczorem postaram się zamieścić rysunek aparatury aby lepiej wyjaśnić o co chodzi z punktami.
Oczywiście zamieszczam kod programu.
Po dzisiejszych testach muszę powiedzieć że program nie działał jak należy, przede wszystkim ruch silnika z pionie był niesamowicie powolny. Po pewnym czasie zobaczyłem, że jest to wina wpisania minimalnej prędkości w rozkazach, ale nawet przestawienie jej na maxa nie dało żądanych rezultatów. Poza tym sterowanie silnikiem powinno się odbywać sprzętowo, a tak się nie działo, i przy okazji liczba wykonywanych kroków była nie taka jak wpisywana w programie.
Więc po niezliczonej ilości ulubionego polskiego słowa na k, postanowiłem podejść do problemu troszkę inaczej. Mianowicie napisałem 4 Sub'y który każdy wykonuje ruch w odpowiednią stronę. Sprawdza też czy silnik zakończył pracę, czego wcześniej nie miałem.
Porzuciłem też idę pętli producent/konsument. Z całym szacunkiem Mikrobi, widzę że pętla ma duże możliwości, ale ja niestety nie do końca ją pojmuję, mam nadzieję, że się nie obrazisz i dalej będziesz dawał cenne rady.
Program ciągle zawiera strukturę Event w której wykorzystuję Case w celu odpalenia Sub'a.
Podjąłem też próby ustawienia jakiejś kolejki wykonywania ruchu, ale stanąłem na stworzeniu tablicy klastrów. Nie wiem teraz jak zrobić, aby zapamiętał 4 konkretne punkty (gdzie w dwóch z nich powinien zatrzymać się na określoną ilość sekund), i potem jeździł od jednego do drugiego.
Późnym wieczorem postaram się zamieścić rysunek aparatury aby lepiej wyjaśnić o co chodzi z punktami.
Oczywiście zamieszczam kod programu.
- Załączniki
-
- PROGRAM.rar
- (149.29 KiB) Pobrany 410 razy
Pozdrawiam
Magoo
Magoo