Witam,
ten program wykona się w następujący sposób: po podaniu wysokiego stanu ("1") na I0 załączą się dwa timery - jeden będzie do MI0 dodawał wartość 31, a drugi
jednocześnie będzie odejmował 33 (w bloku SUB jest jeszcze dodatkowo błąd ponieważ funkcja, jaką wykonuje to A-B=C, więc u Ciebie to 33-MI0=MI0). Program w 12,5 sekundy odejmowałby wartość 2 od MI0 a potem do 13,2 sekundy dodawał 31.
Niepotrzebna jest tutaj jakakolwiek cewka, jedyne co musisz zrobić to ustawić w Hardware Configuration - Analog Output na 0-10V i wpisać tam rejestr MI0.
Poniżej propozycja jak bym to ja wykonał.
Opis:
1) I0 załącza algorytm, czyli uruchamia TE0, który odlicza 13,2 sekundy
2) Przez 13,2 sekundy co 100ms dodawana jest wartość 31 do rejestru MI0 (wyjście analogowe)
3) Po odliczeniu 13,2 sekund załącza się kolejny TE1, który odlicza 2 sekundy
4) Przez te 2 sekundy wartość jest stała, maksymalna, czyli 4095.
5) Po odliczeniu 2 sekund załącza się kolejny TE2, który odlicza 12,5 sekundy
6) Przez 12,5 sekundy co 100ms odejmuje się wartość 33 od rejestru MI0
Można by było udoskonalić przeliczenia (zamiast 31 oraz 33, które wprowadzają jakiś minimalny błąd). Zamiast MI0 można by było użyć pomocniczego MI1 (które później byśmy linearyzowali), który miałby zakres od 0 do 16500 (bo NWW liczb 132 oraz 125 to 16500). Wtedy w moim opisie zamiast dodawania 31 byłoby 125 a zamiast odejmowania 33 byłoby odejmowanie 132, a przez te 2 sekundy na stałe wpisywałbym wartość 16500 zamiast 4095.
Na końcu wstawiłoby się blok linearyzacji (wykonywałby się cały czas), w którym:
X1=0
Y1=0
X2=16500
Y2=4095
X=MI1
Y=MI0
Dodatkowo można jeszcze założyć warunki, że gdyby wartość MI0<0 to wpisywać mu cały czas 0, a w przypadku, gdy MI0>4095 to wpisywać mu wartość 4095 (w celu ochrony przed wyjściem poza zakres).