Witam, potrzebuje porady jak w TIA Portal v13 na sterowniku S7-1200 w języku LAD zrobić następujący fragment kodu:
Wartość na wejściu analogowym jest zmienna (sygnał z wagi na którą ciągle jest nasypywany materiał) i chciałbym aby po zadziałaniu czujnika/przycisku zapisana została aktualna wartość z wagi i umieszczona w jakimś DB aby później ją wykorzystać.
Próbowałem z funkcją MOVE wstawiając przed EN zestyk NO z sygnałem z czujnika lecz po wyłączeniu czujnika za czym idzie wyłączenie funkcji MOVE to OUT1 wracał do wartości 0. Poza tym jak funkcja MOVE była aktywna a input zmieniał swoją wartość to output także.
Mam nadzieje, że wyraziłem się w miarę jasno i ktoś może ma na to jakieś rozwiązanie.
Pozdrawiam
Dzięki Ryba8383 za szybką odpowiedź jednak problem nie tkwi w stanie czujnika tylko w tym, że wartość dla mnie istotna nie pozostaje zapisana w pamięci.
Kolega Ryba8383 daje dobrą radę.
Informacja czujnik/przycisk nie jest pełna - nie wiemy kiedy czujnik =1, a kiedy wygnał analogowy > 0. Z tego co napisałeś wynika, że przy zmianie stanu czujnika 1->0 stan wejścia analogowego wynosi 0.
Ciężko dobrze doradzić nie znając dokładnie układu ale ja proponowałbym Ci network:
TON (opóźnienie z czasem dobranym doświadczalnie) AND P_TRIG (zbocze narastające) -> Move.
Czyli po czasie potrzebnym na ustabilizowanie wyniku sprawdzasz zbocze, więc jednokrotnie wykonujesz przepisanie do DB.
Jeśli znasz tolerancję wagi - rozsądne wartości które mogą się pojawić na wejściu analogowym to możesz też dołożyć do logiki kontrolę wartości które pojawiają się na wejściu analogowym w momencie pomiaru i gdy wartość jest poza zakresem zwracać błąd na wizualizację.
Tą sytuację z przepisywaniem 0 którą opisałeś mógłbyś fajnie zdiagnozować za pomocą traces w nowszym TIA Portalu.
Pomińmy zmienną “sygnał startu” chciałbym żeby wartość “test AI w kg” była zapisana w “wartosc do zapisu w DB” podejrzewam, że funkcja MOVE nie spełni tego zadania ponieważ ona tylko przenosi aktualną wartość. Chodzi mi o to abym mógł gdzieś zapisać tą wartość (1.6 kg) w pamięci sterownika aby później do niej wrócić i ją wykorzystać do pewnych obliczeń. Jaka funkcja jest w stanie na moje żądanie w określonym momencie zapisać wartość wejścia analogowego do jakiegoś miejsca w pamięci?
Mam nadzieje, że teraz trochę lepiej to wytłumaczyłem
Funkcja Move właśnie do tego służy. W Twojej sytuacji problem tkwi w tym, że użyłeś złego rodzaju zmiennej. Funkcja jest odpowiednia.
Zmienna #“wartosc do zapisu w DB” została utworzona w funkcji - funkcja ma zmienne typu Input, Output, InOut oraz Temp. Twoja zmienna najprawdopodobniej jest typu Temp - to znaczy, że nie pamięta wartości pomiędzy kolejnymi cyklami PLC.
Żeby wartość była zapamiętana pomiędzy kolejnymi cyklami PLC masz kilka opcji:
zamiast funkcji FC używać FB i zmiennej utworzonej w pamięci static,
Tu kolego masz rację jak najbardziej, ale wartość TEMP jest zapamiętywana ale podczas kolejnych cykli może być nadpisana przez inne dane.
Co do przesyłania danych, wykorzystaj markery sterownika i wykrywanie zbocza, ponieważ sam napisałeś że chcesz przesyłać dane w odpowiednim dla Ciebie momencie czyli podczas wystąpienia jakiegoś warunku.
Co masz na myśli pisząc, że “wartość TEMP jest zapamiętywana” ? Zmienne Temp w każdym kolejnym cyklu PLC są przywracane do wartości początkowej. To jest fakt. Moim zdaniem pisanie, że są zapamiętane jest wprowadzaniem w błąd.
A problem z tematu pewnie jest już nieaktualny i myślę, że został wyjaśniony.