PDA

Просмотр полной версии : Работа с энкодером в ПЛК110



Velldio
11.11.2015, 13:53
Здравствуйте.
Для начала хочу сказать что в программировании ПЛК я не большой специалист, и поэтому прошу прощения за возможно глупые вопросы....
В общем есть обновлённый ПЛК110 и нужно реализовать на нём решение нескольких задач. Одна из них меня ставит в тупик....
Подключил энкодер, он работает у меня в диапазоне от 0 до 65535 дискрет.
Нужно определять направление хода вала, и крайние его значения, и подсчитывать исходя из этих значений всякие величины....

Первое о чём хочу спросить: как нужно решать такую задачу...? И можно ли решить её на языках LD и CFC?

Второе о чём хочу спросить: как установить стартовое значение энкодера не равное нулю при запуске ПЛК. для меня это важно потому, что у меня есть кое какая идея, но она рушиться в том случае когда в одном проходе значения энкодера переваливаются за ноль... ну например старт движения вала начался при 1000...значения начали уменьшаться...и перед сменой направления движения значения энкодера вывалились за ноль и стали 65533...все расчёты просто рушатся.... то есть нужна установка стартового значения энкодера где то в середине диапазона, например 35000 дискрет.... можно ли это сделать....?

Спасибо...

Дмитрий Артюховский
11.11.2015, 16:04
при использовании переменной типа int 65535 эквивалентно -1 65534 - -2 итд в чем проблема вычислений? а энкодер можно инициализировать значением при помощи указателя

lara197a
11.11.2015, 20:59
запись константы 110 в энкодер z
VAR
xc: WORD;
pt:POINTER TO WORD;
END_VAR

xc:=110;
pt:=ADR(z);
pt^:=xc;

Но есть способ проще:
Суммирование значения счетчика из регистра счета:
C:dword;
оттуда, M:word;

C:=C + ((оттуда - M) and 65535);
M:=оттуда;

Расширяем диапазон счета до 4 байт и делаем с С все что угодно,без всяких указателей.
Мне в свое время уважаемый И.Петров, очень не рекомендовал указатели вообще использовать при обращении к областям ввод-вывода.

Velldio
12.11.2015, 09:42
Спасибо за ответы...
Решил вопрос с первоначальной установкой энкодера(в момент старта это 0) путём присвоения его значения другой переменной, а потом другую переменную сложил с третьей равной 35000 и тем самым поучил переменную которая в момент установки равна 35000 и меняет своё значение в зависимости от изменения значения энкодера... и с этой переменной уже и работал....

petera
12.11.2015, 09:45
Спасибо за ответы...
Решил вопрос с первоначальной установкой энкодера(в момент старта это 0) путём присвоения его значения другой переменной, а потом другую переменную сложил с третьей равной 35000 и тем самым поучил переменную которая в момент установки равна 35000 и меняет своё значение в зависимости от изменения значения энкодера... и с этой переменной уже и работал....
ИМХО "Трений лишний...":)