W jaki sposób w języku SCL realizujecie przerwę. Chodzi mi o to żeby po osiągnięciu zadanej wartości wagi program poczekal 3 sekundy na ustabilizowanie wagi i dopiero po tym zapisał wynik. Funkcja TON jakoś mi nie działa. Czy są jakieś inne sposoby zeby nie blokować programu? #automatyka #siemens #s7-120 #tiaportal #programowanie #plc
@martinas1324: Broń Cię Panie Boże zatrzymywać cały sterownik na te 3s. Nie ma opcji robić takiej przerwy. Wybij to sobie z głowy :) Normalnie dajesz timer. Powinieneś bardziej pytać czemu TON nie działa a nie próbować to obchodzić.
@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ć :)
Nie jestem programistą 15k a to jest mój pierwszy program na siemensie więc prosze się nie śmiać. CHętnie posłucham jakiś rad co mogę zmienić a co robię źle
@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ś
@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 :)
@martinas1324: Na początku operacji zapisz czas do zmiennej i sprawdź różnice między aktualnym czasem a zapisanym. Jeśli większa niż żądaną to rób co tam potrzebujesz W ogóle zerknij w programming guidelines bo kod nieczytelny
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.
@kwantowykocyk: Dwa czasy, odejmowanie ich w każdym cyklu i porównywanie? Dobrze Cię rozumiem? To ma być łatwiejsze i optymalne z punktu wykonywanych operacji?
@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
#automatyka #siemens #s7-120 #tiaportal #programowanie #plc
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
#
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ś
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
Komentarz usunięty przez autora
W 1200 masz do tego dedykowane przerwanie.
W ogóle zerknij w programming guidelines bo kod nieczytelny
@i-marszi
@kwantowykocyk
Ale Panowie ale nie mieszajcie mu w głowie. On potrzebuje zwykłego TONa.
@martinas1324 jak coś to wal jutro śmiało
Komentarz usunięty przez autora
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.
Dodatkowo ten sam czas moge wykorzystac zeby uzyskac czas wykonania bloku (tak wiem ze jest do tego dodatkowy blok).
Nie mowie ze nie mozna