Увы, порок схемы при наличии нескольких контуров регулирования. Связан он с особенностями программирования DirectLOGIC. Результаты всех операций сравнения (и не только) выдаются, так называемыми, контактами специальных (внутренних, виртуальных) реле. И беда в том, что для любой функции номера этих реле жестко определены. При циклическом (как в ПЛК принято) исполнении программы она выполняется по "строкам" (rung). В то время как обновление выходов контроллера идет один раз в конце цикла. Получается, что сначала обсчитан первый контур, а потом идет обсчет второго - и часть контаков первого контура, обсчитанного ранее, меняют свое значение в ходе обсчета второго. После этого идет обновление выходов контроллера - но по первому контуру информация уже искажена.
В этом плане я схему уже не успел доработать. Варианта тут два, оба мне не очень нравятся:
- из технологии определить основной контур и оставить его на ПИД+ШИМ, а остальные контура регулировать позиционным регулятором, без ПИДа
- попробовать на триггерах сделать "подхват" контактов специальных реле, исключив их влияние на уже обсчитанные rung'и.