Всем привет. Проблемы с программированием сименса на языке релейной логики (Lad).
Вопрос №1
Скоростной счетчик. Устройство - источник импульсных сигналов, подключено к входу I0.0. Не могу подобрать управляющий байт SMB37. Все делаю строго по системному руководству к этому ПЛК. Пробовал брать значения из примеров ( 16#90, 16#C0, 16#F8 ) и сам подбирал (16#9F, 16#F5, 16#B5). Каждый раз одно и то же: счетчик либо считает, не обращая внимания на новое текущее значение СV (в каждом новом вызове подпрограммы счет продолжается со значения НС0, на котором закончился предыдущий вызов ), либо записывает новое текущее значение, но не считает. Подскажите, что я не так делаю?? (см. рисунки)
Вопрос №2
Каким образом обработка прерываний может воздействовать на катушки и контакты (см. системное руководство гл.6 стр157) ??? у меня есть готовая программа, которая худо-бедно справляется со своей задачей, но как только пытаюсь внедрять туда скоростной счетчик - сразу срабатывает группа контактов Ix.x, как будто на них поступают сигналы с устройств, хотя этого в принципе не может быть.
Вопрос №3
Исполнительный механизм (назовем его так) имеет 4 положения. Каждое положение фиксируется датчиком (есть сигнал/нет сигнала). Сигналам соответствуют биты в области памяти переменных VB:
байт VB0 (FLR) используется для контроля положения.
сигнал с I1.3 считывается в бит V0.0 (FLR1)
сигнал с I1.6 считывается в бит V0.1 (FLR2)
сигнал с I2.1 считывается в бит V0.2 (FLR3)
сигнал с I2.4 считывается в бит V0.3 (FLR4)
каждый бит соответствует одному из 4х положений исп. мех.
Так же есть байты для регистрации управляющих сигналов, которые все вместе считываются в байт VP (VB6) (куда механизм должен переместиться)
Сравнивая FLR и VP можно контролировать где механизм находится в данный момент времени и перемещать или останавливать его.
А теперь сам вопрос:
Есть среднее количество импульсов, которое поступает с устройства при перемещении исп. мех. от одного положения к соседнему.
Сделал подпрограммку, где ведется РАСЧЕТ количества импульсов, которое должно поступить с устройства при перемещении от одного положения в ЛЮБОЕ другое.
Расчет происходит при каждом изменении VP (т.е. есть приказ преместиться в положение "3", механизм находится в положении "1". Сравнить VP и FLR, рассчитать количество импульсов, которое должно поступить с устройства пока механизм перемещается из "1" в "3", сделать это количество предустановкой счетчика, запустить двигатель и вести отсчет в обратном порядке. Когда значение HC0 будет равно 0, выключить двигатель.
Но вместо предустановки в подпрограмму со счетчиком передается какая-то ерунда. Помогите разобраться в чем дело, пожалуйста. Картинки прикрепляю.