S7-1200 jak zapisać aktualną wartość wejścia analogowego do DB po odpowiednim sygnale

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 :smiley:

Użyj zbocza dla sygnału z czujnika .

Pozdrawiam

1lajk

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.

Być może gdzieś w dalszej części kodu ta zmienna w DB jest nawpisywana ??

Chyba to ja źle wytłumaczyłem więc wklejam screena

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 :smiley:

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,
  • używać markerów (tagów utworzonych w “PLC tags”),
  • wpisywać wartość bezpośrednio do DB.

Oznacz w bloku danych retain i będzie pamiętać nawet po zaniku zasilania i jak kolega pisał zmienna musi mieć inną postać

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.

Wartości że zmiennych temp są pobierane ze stosu pamięci sterownika i bez odświeżania mogą tam być bzdury ale niekoniecznie wartości początkowe.