Wpis z mikrobloga

  • 0
@To_ja_moze_pozamiatam Nie chce zatrzymywać sterownika. Myślałem tylko że ta funka TON działa tak jak w mikrokontrolerach funkcja delay. Tak że program czeka przez 3 s w tej linii kodu zanim przejdzie dalej. Zaraz postaram się wrzucić kod programu to jeżeli ktoś byłby tak miły i mi podpowiedział jak to zrobić :)
IF #activestatus=TRUE THEN

IF #firstrun=TRUE THEN
#weightvaluestart := #weightvalue; //Jeśli początek dozowania to ustaw tare wagi
#precipitationpart := #maxweight / 10; //Ustal opad
IF #componenttask < #precipitationpart THEN
#precipitationindex := 1;
ELSIF #componenttask < 2 * #precipitationpart THEN
#precipitationindex := 2;
ELSIF #componenttask < 3 * #precipitationpart THEN
#precipitationindex := 3;
ELSIF #componenttask < 4 * #precipitationpart THEN
#precipitationindex := 4;
ELSIF #componenttask < 5 * #precipitationpart THEN
#
@martinas1324: ja bym wywalił to przypisanie do #stabilityend wyjścia z timera - bo w sumie to już robisz wyżej, przy wywołaniu TON. W tych IEC TIMERS są jakieś hocki-klocki z odpytywaniem - opisane np. tutaj

A poza tym parę rad:
- rób wcięcia w kodzie albo dziel na regiony
- nie musisz w IFach sprawdzać warunku =true
- odróżniaj zmienne statyczne/tymczasowe od wejść / wyjść z bloku funkcji - np. jakimiś
kryzju - @martinas1324: ja bym wywalił to przypisanie do #stabilityEnd wyjścia z time...

źródło: comment_1613414064fbINA8dWmN1lE7F34a0YMU.jpg

Pobierz
@martinas1324: Jeśli używasz FB to nie potrzebujesz DB do timera- możesz go sobie wpisać w static. Wywołujesz go w kodzie jego nazwą. Ale teraz to mniej ważne.
Nie przeanalizuje teraz całego kodu ale generalnie timer startuje (i resetuje się) gdy jest zbocze narastające na jego .IN. Gdy chcesz coś zrobić gdy doliczy do końca to odpytujesz/sprawdzasz jego bit wyjściowy .Q
Więc od tego .Q uzależniasz odczytanie pomiaru i tyle. Delay w
Dziękuję bardzo za pomoc. Postaram się to jakoś ogarnąć ale to już jutro bo w pracy mam fizyczny sterownik a póki co nie mogę pobrać symulatora i sprawdzić teraz :)
@To_ja_moze_pozamiatam: A ja się nie zgadzam, w SCL latwiej zapisac czas do pomocniczej zmiennej, po co IEC Timer?
Co do samego programu @martinas1324 to Nie masz opcji na #componenttask = 9
A poza tym to:
https://support.industry.siemens.com/cs/document/81318674/

Prefixy jak stat czy temp naprawdę Ci pomogą w debugowaniu a innym, ktorzy nie znają kodu w jego szybkim zrozumieniu.
Do tego wszelkie wywołania funkcji rób jako Multi Instance kiedy to tylko mozliwe.
@To_ja_moze_pozamiatam: Pewnie. Przeciez sam IEC_Timer bedzie mial rowniez dwa czasy wiec napewno bardziej optymalny nie bedzie, a tak mam zapisany czas rozpoczęcia operacji i w przypadku jeśli mam kilka interwałów gdzie wszystkie liczone są od startu to porównuje do tego samego czasu startu, zmieniam jedynie oczekiwana róznice.
Dodatkowo ten sam czas moge wykorzystac zeby uzyskac czas wykonania bloku (tak wiem ze jest do tego dodatkowy blok).
Nie mowie ze nie mozna