Сообщение от
Andrey Tishakov
пробовал решить через счетчик используя сравнение скорости но че то затупил. Скоростей всего 18 а зоны обозначаются граничными скоростями 11, 14, 17. Вот таким макаром. То есть plc должен помнит где мы находимся и в то же время опредилить через сколько ступеней ему прыгать вниз или вверх.
"Обратная связь" у вас уже есть: положение переключателя и действующая на данный момент скорость (комбинация включенных муфт). При условии, что коробка механически исправна, никакой другой обратной связи не требуется. Остается выяснить, при каком ускорении еще не возникает опасных перегрузок (через какое количество ступеней можно перепрыгивать на каждом шаге разгона).
Ну а дальше все очевидно. От действующей скорости (в том числе и нулевой) к заказанной движемся шагами этого размера.
но если токарь с дури крутанет переключатель на 18 скорость с 1
Если скоростей 18, а токарь может включать любую скорость от от текущей, очевидно то, что общая комбинация возможных состояний
1-2, 1-3,...1-18
2-1, 2-3,...2-18
3-1, 3-2,...3-18
---------------
18-1,18-2,...18-17
будет равна 17х18=306
И для каждого состояния придется описывать какими шагами нужно двигаться.
Это IF и CASE минимум на 360 строк (где-то 8 страниц кода)
Код:
VAR
current_speed: USINT; (*текущая скорость*)
new_speed: USINT; (*новая (требуемая) скорость*)
END_VAR
----------------------------------------------------------------------
IF current_speed=1 THEN
CASE new_speed OF
2: (*здесь набор шагов, муфт? для перехода от 1 скорости к 2*);
3: (*здесь набор шагов, муфт? для перехода от 1 скорости к 3*);
4: (*здесь набор шагов, муфт? для перехода от 1 скорости к 4*);
(* и т.д. до 18, всего 17 условий *)
END_CASE;
ELSIF current_speed=2 THEN
CASE new_speed OF
1: (*здесь набор шагов, муфт? для перехода от 2 скорости к 1*);
3: (*здесь набор шагов, муфт? для перехода от 2 скорости к 3*);
4: (*здесь набор шагов, муфт? для перехода от 2 скорости к 4*);
(* и т.д. до 18, всего 17 условий *)
END_CASE;
ELSIF current_speed=3 THEN
CASE new_speed OF
1: (*здесь набор шагов, муфт? для перехода от 3 скорости к 1*);
2: (*здесь набор шагов, муфт? для перехода от 3 скорости к 2*);
4: (*здесь набор шагов, муфт? для перехода от 3 скорости к 4*);
(* и т.д. до 18, всего 17 условий *)
END_CASE;
(* конструкция повторяется до current_speed=18, всего 18 раз*)
END_IF;
(* теперь имеем нужную комбинацию шагов, муфт? для перехода от текущей скорости к новой*)
??? Может нужен массив структур [1..306] с комбинацией времени задержки включения/отключения муфт. Эти задержки и сформируют шаги движения к заданной скорости, если все таймеры, управляющие вкл./откл. муфт будут запускаться одновременно по факту переключения скорости. (на каждую муфту нужны индивидуальные таймеры). Получится нечто похожее на циклограмму включения/отключения муфт в заданной последовательности с заданными задержками переключения???