Конвейер обслуживает 15 каналов и должен останавливаться автоматически на каждом из них энкодером. Я использую регистры с D301 по D315 для окончательного значения энкодера, при котором конвейер должен остановиться на заданном канале. Они задаются панелью:

Есть макрос, который запускается после нажатия кнопки:

$M1 = 60
Сначале значения D301 по D315 устанавливаются панелью в ручном режиме. Что-то вроде начального режима обучения, чтобы узнать программу затем в автоматическом режиме в ПЛК, где остановить конвейер на каждом канале. Для етого конвейер перемещается в ручном режиме в первый канал. Значение энкодера копируется в D301 при нажатии кнопки «Задай 1». Это повторяется для всех остальных каналов. Однако есть проблема.
Как видно из программы, инструкция DHSCR должна отключать выход Y2 (который управляет быстрым ходом двигателя конвейера) при достижении значения в D202 и выход Y0 при достижении D302, который управляет медленным ходом двигателя. Это все для второго канала, поэтому используется регистр D202 / D302. Для остальных каналов все аналогично (D204, D304 и D404 для четвертого канала и т. Д.)
Оказывается, установленное значение в D302 (для второго канала) не 863 (как и показания енкодера, кoгда конвейер находится на втором канале во время обучения), а намного больше:

По этой причине конвейер обходит все каналы и останавливается в конце пути по сигналу от концевого выключателя.
Почему D302 (и D202 и 402 соответственно) такие большие? Вчера в течение 3 часов пытался понять, почему это происходит, но у меня ничего не вышло ....
Спасибо!