Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
Ну так преобразуйте 0..65535 в DINT и сместите на те самые 134, т.е.
REAL_POS: DINT;
temp:word;

temp:=enc_value-134;
if (temp>32767) then
REAL_POS:=word_to_dint(enc_value)*(-1);
else
REAL_POS:=word_to_dint(enc_value)
end_if

А мозг студента НАДО взрывать, иначе ничего не получится. Студенты-троечники стране не нужны!

Объём может быть любым - но чем больше подпрограмма и чем чаще она вызывается - тем медленнее всё остальное. Модуль статистики позволит отследить свободные ресурсы.
Если всё просто,прошу предложить вариант решения следующей задачи в виде конкретно-работающего проекта на нынешнем новом контроллере ПЛК110-32 :

1.Требуется отображать значение энкодера (в режиме линейного) от - 2147483647 до 2147483648, т.е. весь диапазон 4294967269(DINT).
2.Стартовое значение энкодера : 0 .
3.При вращении энкодера в одну сторону происходит изменение значения (DINT) 0...-1...-2...-2147483647.
4.При вращении энкодера в другую сторону происходит изменение значения (DINT) 0...1...2...2147483648.
5.Обеспечить в режиме остановленного (и не обязательно) механизма возможность записи нового значения энкодера в любое время,по выбору оператора в диапазоне от - 2147483647 до 2147483648 (DINT).
6.Квадратура пусть остаётся х2,раз такая жёстко задана в ПЛК .

Может в результате получится образцовый,развиваемый пример проекта для работы с энкодером.
Упомяну,что для решения подобной задачи на нормально-оформленном конфигурационном и библиотечном
энкодере в альтернативном ПЛК ушло 0,5...1час.
А сколько потребуется "студенту" или "профессионалу" на ПЛК 110,попробуем оценить трудозатраты и пути улучшения?