1. W pierwszym cyklu R1 ma wartość 0, bo taka została przypisana w ostatnim cyklu w linii 9 (wyjątkiem może być pierwsze uruchomienie po wgraniu programu, ale tym gorzej). Wyjście z RANGE_INT = 0, cała ta linia jest zbędna.
2. 15,0 C to u Ciebie 150. Skalujesz czujnik o zakresie od 0 do 1200 C ? Jeśli nie, to skalowanie jest błędne.
3, 5: W jakim celu zastosowałeś TMR_TENTHS na wyjściu LE_INT i GE_INT?
4. Zapis do Q2 powinien być -(S)-
7,8: Jeśli M1 zostanie wyzerowane przez I2 = 1, to M10 = 0 i M20 = 0, więc stan wyjścia Q2 nie będzie się zmieniał przy zmianach temperatury. Wyjście pozostanie w takim stanie, w jakim było. Tak to miało działać?
9. Jeśli już chcesz zerować R1, to lepiej w #FST_SCN.
gruby-11 napisał: ponieważ, najpierw jest First scan jest szybszy niż scalowanie analoga.
Nie rozumiem tego języka
gruby-11 napisał: zamiast flagi pierwszego skanu daj timer 10sek
Bezcelowe. Jeśli już, to zamienić miejscami linie 1 i 2.
Histerezę robi się tak: (używasz bitu stanu, np. %M1, ustaw Initial Value we właściwościach zmiennej)
1. skalowanie wartości z AI do R
2. jeżeli R < min zeruj bit stanu (LT_INT, do bloku wyjścia -(R)- )
3. jeżeli R > max ustaw bit stanu (GT_INT, do wyjścia bloku -(S)- )
4. przepisz bit stanu na wyjście sterownika %Q
Sterownik pamięta bit stanu po wyłączeniu zasilania. Jeśli chcesz, możesz bit stanu ustawić przy starcie przez --|#FST_SCN|------(S)- (analogicznie wyzerować).
Cytat:
załącza się grzejnik przy 15,0 C, a wyłącza w 25 stopniach. W zakresie 15,1 do 24,9 ma grzać oczywiście
A poniżej 15 stopni Celsjusza ma nie grzać ? Dziwny algorytm.