1. Строку START_ANR1:=TRUE; надо убрать. START_ANR1 запускает автонастройку. Это делается не так часто, поэтому можно эту переменную менять вручную.
2. Если верить документации к этой функции, на выходе вы получаете сигнал от -100 до +100. Что вы делаете: просто делите это значение на 100, т.е. на выходе от -1 до +1.
А потом преобразуете все это дело в WORD. Округление всегда идет вниз. Поясню: когда сигнал с ПИД-регулятора равен 100, на выход (heater) вы подаете 1, т.е. включаете его. Как только сигнал становится меньше 100, на heater всегда подается 0, и он выключается.
Что надо сделать: перевести аналоговый сигнал с ПИД-регулятора в ШИМ, то бишь чем больше сигнал, тем длиннее импульс на включение нагревателя.
Например:
period: TIME:=t#5s; (*Период ШИМ*)
blinker: BLINK; (это в объявлениях)
IF PID.OUT_VAL>0 THEN
imp_on:= PID.OUT_VAL*period/100; (*Длина импульса на включение*)
ELSE imp_on:=0;
END_IF
imp_off:= period - imp_on; (*Длина импульса на отключение*)
blinker(ENABLE:=TRUE, TIMELOW:=imp_off, TIMEHIGH:=imp_on, OUT=> heater);
Кажется так. Проверить времени нет. И обязательно включите в проект UTIL.lib