Wartość maksymalna enkodera

Pytania i odpowiedzi dotyczące sprzętu Unitronics

Moderatorzy: Marek Sikora, Mateusz Sikorski

Wartość maksymalna enkodera

Postprzez meister » Śr, 27 lip 2011, 16:15

Witam serdecznie,

borykam się z następującym problemem...

Mam enkoder który zlicza mi impulsy do rejestru, kasuję wartość tego rejestru co kilka sekund. W tym czasie w bardzo szybkim tempie zmienia się wartość tego rejestru w taki sposób, że nie jestem w stanie określić uzyskanej maksymalnej wartości. Myślałem na zrobieniem kilkudzieięciu porównań, dzięki którym byłbym wstanie określić wartości maksymalne w danym rzedziale czasowym, jednak zajęłoby to baaardzo wiele linii programu, istnieje jakieś rozwiązanei na tego typu sytuację??
meister
 
Posty: 13
Dołączył(a): Śr, 27 lip 2011, 15:56

Re: Wartość maksymalna enkodera

Postprzez Mateusz Sikorski » Cz, 28 lip 2011, 12:12

Witam,
proszę podać na jakim sterowniku Pan/Pani próbuje to zrobić. Jak szybko resetuje się ten rejestr ? Czy chodzi o różnice częstotliwości zliczania impulsów oraz czasu wykonywania programu sterownika ? Czy nie wystarcza jeden komparator i wpisywanie do innego rejestru wartości największej w danym przedziale czasowym ?
Mateusz Sikorski
Elmark Automatyka S.A.
Mateusz Sikorski
 
Posty: 564
Dołączył(a): Śr, 13 lip 2011, 08:08

Re: Wartość maksymalna enkodera

Postprzez meister » Cz, 28 lip 2011, 13:49

sterownik to vision V120-22-UA, rejestr kasuje się co 1 s (do tego używam systemowego SB3). Chciałbym, aby w przedziale czasu np. 5 sekund, otrzymać 5 wyników z maksymalną wartością impulsów zliczonych przez enkoder dla każdej sekundy z osobna. Wartości te powinny zapisywać się do jednego innego rejestru. Po przemyśleniach myślałem nad zastosowaniem tablicy, jednak nie do końca wiem jak ją wykorzystać i czy to ma sens, gdyż każdy maksymalny wynik uzyskiwany po czasie 1s chciałbym podtrzymać aż do osiągnięcia następnego maksymalnego wyniku uzyskanego w czasie drugiej sekundy, i tak dalej w nieskończoność
meister
 
Posty: 13
Dołączył(a): Śr, 27 lip 2011, 15:56

Re: Wartość maksymalna enkodera

Postprzez Mateusz Sikorski » Cz, 28 lip 2011, 14:06

Witam,
w takim razie proponuję przejrzeć program.
Krótki opis działania:
Rejestr MI 0 (odczyt z enkodera) zapisuje do MI 1 swoją największą wartość. Po czasie TD 0 (1s) wartość MI 1 jest wrzucana do rejestru MI 10 (blok Store Indirect). Następnie do MI 4 (w niej zapisana jest wartość 10, która odpowiada za MI 10) dodawana jest wartość 1, tak aby przy następnym odczycie zapisać wartość do MI 11. Dodatkowo uruchamiany jest ponownie Timer 0 z czasem 1s i wartość MI 1 ustawiana jest na najmniejszą możliwą.
Załączniki
program.zip
(178.78 KiB) Pobrane 970 razy
Mateusz Sikorski
Elmark Automatyka S.A.
Mateusz Sikorski
 
Posty: 564
Dołączył(a): Śr, 13 lip 2011, 08:08

Re: Wartość maksymalna enkodera

Postprzez meister » Cz, 4 sie 2011, 08:11

interesowałoby mnie, aby po każdym okresie czasu równym 1s (czyli TD 0) wartość z enkodera była zliczana od nowa, niekoniecznie wiem, gdzie ustawić bloczek Reset Numeric odpowiedzialny za kasowanie MI 0. Próbowałem ustawić go równolegle do bloczku zapisującego wartość -32768 do MI 1 (wydawało mi się, że skoro w danym czasie ustawię minimalną wartość na rejestrze i jednocześnie wyzeruję wartość enkodera to uzyskam zadowalający efekt), jednak w tym przypadku uzyskuję wartość znikomo małą, tak jakby była zliczana przez minimalnie krótki czas. Wyzerowanie wartości zmierzonej przez enkoder powinno trwać maksymalnie krótkie czas, ja ustawiająć bloczek Reset Numeric w swoim programie nie zapewniam tego. W ten sposób powinienem po każdej sekundzie otrzymać porównywalny wynik, różniący się jedynie niedokładnością odczytu z enkodera w czasie tej jednej sekundy. Należałoby zastosować przerwanie?? Tylko jak wtedy zsynchronizować czas mierzony w danym programie z czasem wyzerowania rejestru MI 0?? Nie wiem, może zbyt komplikuję ale nie mogę sobie poradzić z tym. Przepraszam jeśli może się to wydać trywialne, ale zaczynam zabawę ze sterownikami PLC.
meister
 
Posty: 13
Dołączył(a): Śr, 27 lip 2011, 15:56

Re: Wartość maksymalna enkodera

Postprzez Mateusz Sikorski » Cz, 4 sie 2011, 08:23

Witam,
proszę spróbować użyć bloku Reset HSC ( Utils -> Immediate -> Reset HSC). Po realizacji tego bloku, licznik powinien się natychmiast wyzerować (nie czekając na koniec programu).
Mateusz Sikorski
Elmark Automatyka S.A.
Mateusz Sikorski
 
Posty: 564
Dołączył(a): Śr, 13 lip 2011, 08:08

Re: Wartość maksymalna enkodera

Postprzez meister » Cz, 4 sie 2011, 10:48

bloczek ten jest niedostępny dla serii V120-22
meister
 
Posty: 13
Dołączył(a): Śr, 27 lip 2011, 15:56

Re: Wartość maksymalna enkodera

Postprzez Mateusz Sikorski » Cz, 4 sie 2011, 11:17

Zakładam, że odnosi się Pan do programu, który przesłałem.Tak więc, czy próbował Pan zastosować blok Reset Numeric tuż za blokiem Store Indirect ? Powinno pomóc. W załączniku przesyłam przykładowe rozwiązanie.
Przy Pana opisie musiało dochodzić do błędnych odczytów, gdyż w jednym cyklu zapisywana była największa wartość do kolejnego rejestru a dopiero w następnym cyklu była zerowana wartość MI0.
Załączniki
program2.zip
(177.85 KiB) Pobrane 997 razy
Mateusz Sikorski
Elmark Automatyka S.A.
Mateusz Sikorski
 
Posty: 564
Dołączył(a): Śr, 13 lip 2011, 08:08

Re: Wartość maksymalna enkodera

Postprzez meister » Cz, 4 sie 2011, 15:56

mam wątpliwość odnośnie tego programu2. Pozwala on na jednokrotne wykonanie zapisu i inkrementacji rejestru MI 4. Nie byłem przekonany czy mam rację, jednak zamieniłem sobie te bloczki zapisu na zaświecenie się pojedyńczej diody co prezentuje się w sposób następujący http://imageshack.us/photo/my-images/600/dioda.jpg/ i ona jedynie jednokrotnie się zaświeca... czym ponownie wyzwolić w poim przypadku MB 26 aby kolejny raz się zaświeciła dioda?? Bez tego nie ejstem w stanie sprawdzić kolejnych rzeczy
meister
 
Posty: 13
Dołączył(a): Śr, 27 lip 2011, 15:56

Re: Wartość maksymalna enkodera

Postprzez Mateusz Sikorski » Pt, 5 sie 2011, 08:59

Program taki zawsze tylko raz zapali diodę, ponieważ nigdy nie ustawi bitu MB26. Trzeba wiedzieć, że program najpierw wykonuje wszystkie obliczenia a dopiero na koniec programu ustawia poszczególne bity, rejestry itp. Aby dioda migała należałoby zrobić to tak: http://imageshack.us/f/215/przykladf.jpg
Mateusz Sikorski
Elmark Automatyka S.A.
Mateusz Sikorski
 
Posty: 564
Dołączył(a): Śr, 13 lip 2011, 08:08

Re: Wartość maksymalna enkodera

Postprzez meister » Wt, 9 sie 2011, 10:30

jeśli połączyłbym dwa powyższe programy, tj. plik program2 wraz z trzema liniami kodu znajdującymi się w przykladf.jpg otrzymam program3 załączony poniżej. Po czasie 1s powinien być aktywny bolczek store indirect wraz z inkrementacją MI 4 , wyzerowanie rejestru MI 0 oraz wyzerowanie MB 0 pozwalającego na ponowne odliczanie czasu TD 0, tak się nie dzieje, pomimo, iż logika załączania się układu jest chyba dobra. Ustawienie wszystkich bitów oraz wartości dokonywane jest co jedną pętlę programową, tak?? Trwa ona dużo krócej niż 1s, i jesli tak jest, to w danym programie powinienem uzyskiwć aktualne wartości. Gdzieś jeszcze leży błąd, że nie mogę uzyskać satysfakcjonującego mine rozwiązania??
Załączniki
program3.rar
(172.93 KiB) Pobrane 930 razy
meister
 
Posty: 13
Dołączył(a): Śr, 27 lip 2011, 15:56

Re: Wartość maksymalna enkodera

Postprzez Mateusz Sikorski » Wt, 9 sie 2011, 12:24

Witam,
przesyłam Panu poprawiony program, który teraz zapisuje największą wartość enkodera co 1 sekundę (jeśli enkoder będzie dawał ujemne wartości to komparator nie zadziała) do rejestrów następujących po sobie (od rejestru MI10). Pragnę zauważyć, że program ten został napisany dla trochę innego sterownika V120-22-UN2 (pański to V120-22-UA2). Należy przepisać ten program wraz z HW Configuration (konfiguracja enkodera).
Załączniki
program4.zip
(77.57 KiB) Pobrane 952 razy
Mateusz Sikorski
Elmark Automatyka S.A.
Mateusz Sikorski
 
Posty: 564
Dołączył(a): Śr, 13 lip 2011, 08:08

Re: Wartość maksymalna enkodera

Postprzez meister » Wt, 9 sie 2011, 16:32

dziękuję bardzo, o taki efekt mi chodziło. Miałbym jeszcze jedno pytanie, istnieje blok umożliwiający zaokrąglenie liczby z ułamkiem w celu uzyskania liczby całkowitej? Chciałbym zamienić MF na MI, zaokrąglenie liczby rozwiązałoby sprawę, jednak nie mogę znaleźć tego typu bloku
meister
 
Posty: 13
Dołączył(a): Śr, 27 lip 2011, 15:56

Re: Wartość maksymalna enkodera

Postprzez Mateusz Sikorski » Śr, 10 sie 2011, 06:53

Witam,
Konwersja MF na MI odbywa się za pomocą bloku "INV (A+b/n)". Znajduje się on w Math->Float->Convert. Należy zauważyć, że blok ten posiada dwa wyjścia A i B.
A to liczba przed przecinkiem a B to liczba po przecinku. Blok ten nie zaokrągla liczb w górę.
Mateusz Sikorski
Elmark Automatyka S.A.
Mateusz Sikorski
 
Posty: 564
Dołączył(a): Śr, 13 lip 2011, 08:08

Re: Wartość maksymalna enkodera

Postprzez meister » Pt, 19 sie 2011, 09:49

miałbym pytanie odnośnie modyfikacji zamieszczonego powyżej pliku program4. Konkretnie chodzi o podawanie przez enkoder ujemnych wartości. Zamiana pierwszego komparatora, aby poorównywał wartości mniejsze oraz zamiana wartości w trzeciej linii, z wartości -32768 na 32767 nie rozwiązuje problemu. Logika programu pozostaje taka sama, a jednak nie działa.
meister
 
Posty: 13
Dołączył(a): Śr, 27 lip 2011, 15:56

Re: Wartość maksymalna enkodera

Postprzez Mateusz Sikorski » Pt, 19 sie 2011, 10:30

Witam,
Zamiana komparatora "Greater Than" na "Less Than" (A- MI 0 , B- MI 1) w pierwszej linii programu oraz zamiana wartości A w bloku "Store" z "-32768" na "32767" w 3 linii programu pozwoliło na odczyt najmniejszej wartości z enkodera (MI 0). Dodatkowo warto wpisać do MI 1 wymuszenie wartości przy restarcie "32767". Należy pamiętać, że co 1 sekundę wartość MI 0 jest zerowana, dlatego po pierwszym cyklu po restarcie licznika T0 wartość MI 1 jest ustawiana na 0.
Załączniki
program4checked.zip
(76.46 KiB) Pobrane 929 razy
Mateusz Sikorski
Elmark Automatyka S.A.
Mateusz Sikorski
 
Posty: 564
Dołączył(a): Śr, 13 lip 2011, 08:08


Powrót do Unitronics



Kto przegląda forum

Użytkownicy przeglądający to forum: Google [Bot] i 9 gości

cron