PDA

Просмотр полной версии : определение направления движения механизма



alexval2006
14.02.2010, 09:13
Добрый день товарищи такая проблема начал осваивать плк100 и CoDeSys
пока что без плк в режиме эмуляции плк еще в пути:)
Значит к сути есть механизм который может двигаться вперед и назад по прямой по этой прямой есть 10 точек с датчиками положения механизма (концевики) если механизм находиться в данный момент на точке №4 а ему надо попасть на точку №10 как определить направление движения механизма вперед или назад. Я тут подумал что наверно можно сделать сравнение по номеру больше меньше типа что то такое (просьба не пинать я киповец а программирование только осваиваю :o )
если точка А это точка где находиться механизм(определяем по датчикам) в данный момент а точка Б это точка куда нужно попасть(выбираться кнопками) то из этого следует такое условие
Если А<Б то механизм движется в перед
Если А>Б то механизм движется назад
Помогите из этого сделать что то путное на ST.
Буду очень признателен за любую помощь ночевку :)

Добавлено позже

вот что я родил спустя несколько часов после чтения букваря по CoDeSys
А1-А10 положение механизма (сигнал с датчиков)
В1-В10 куда нужно переместить механизм (сигнал с кнопок)
С1-выход движения механизма вперед
С2- выход движения механизма назад
Из этого получаться вот такой код на ST


if B < A ТНЕN
C1:=TRUE;
elseif B > A ТНЕN
C2:=TRUE;
end_if
Это вроде правильно вот теперь как сделать чтобы сигнал с нужной кнопки и нужного датчика принимал числовое значение чтобы эти значения присвоить переменным А и В а потом сравнивать. Голова идет кругом от всей этой информации усвоенной за сегодня помогите плиз

lara197a
14.02.2010, 17:53
Вы посмотрите как это устроено в релейной схеме управления лифтом.
все датчики в исх положении -FALSE
механизм в крайнем положении.
Присвойте состояние 10 датчиков битам какого либо числа размером WORD.
Например:
D1:=pologenie.0;
.
.
D10:=pologenie.9;

При движении исп. мех-ма, по фронту срабатывания датчиков положения, записывайте их состояния в данную переменную и сравнивайте текущее положение с заданным для определения направления движения.
Для того, что бы работало D-должны менять состояние после прохождения исп мех-ма, в зависимости от направления движения. К примеру вверх-TRUE, вниз-False.

alexval2006
14.02.2010, 18:54
я дико извиняюсь но выше я писал что я пока нуб можно по подробней и очень бы желательно с примерами хоть малюсенькими а то я целый день бьюсь пока что результат не в мою пользу :(

присвойте состояние 10 датчиков битам какого либо числа размером Word. я не знаю как это сделать правильно :o но очень хочу узнать.
механизм в крайнем положении и у меня не лифт у меня тележка которая может находиться на любом положение из 10 но про лифт се равно почитаю

я так понял мне нужно изобрести нечто такое
Наиболее сложным и ответственным узлом схемы управления лифтовой установки является позиционно-согласующее устройство (ПСУ), которое служит для определения положения кабины в шахте и выдачи сигналов для движения кабины в нужном направлении и ее остановки. Конструктивно ПСУ выполняют в виде набора электромеханических переключателей, размещенных в шахте или смонтированных в специальных приборах — копираппарате или селекторе, которые находятся в машинном помещении и связаны с кабиной механической или электрической связью.

lara197a
14.02.2010, 19:54
Ну да. Именно. Копираппарат- ваша переменная. Как присвоить я написал. ПСУ - ваши датчики.
Вы по переднему фронту срабатывания датчика при движении вверх или к примеру вправо(определите для себя как удобнее), устанавливайте бит, соответствующий датчику. при движении в противоположном направлении, по заднему фронту, сбрасывайте бит.
Направление определяйте сравниванием<>. Остановка- когда=.
Прочтите внимательно справку CoDeSys. Там все языки описаны.
Прочтите краткий справочник по операторам и компонентам библиотек.

alexval2006
14.02.2010, 22:41
у меня опять неувязочка я планирую испльзовать датчики индуктивные а не концевики на три положения как быть ставить по два датчика на точку или можно по другому? идея вроде есть но там пока доконца неясно я думаю делать как написано во втором посте если дам ладу как

Sergey666
14.02.2010, 23:33
У сигнала датчика (Не важно механический или индуктивный)есть фронт и срез ,надо анализировать фронты ,срезы, кнопку (вверх или вниз)(это для определения заданного направления движения и пошло-ли движение) и номер последующего (по срабатыванию) датчика.
Актуальный датчик показывает позицию.Датчик подключен к дискретному входу.
Пишете.
IF In_1 THEN
Position:=1;
END_IF
.
.
.
IF In_10 THEN
Position:=10;
END_IF
Естественно переменные надо предварительно обьявить и привязать.:)

TouchS
15.02.2010, 09:38
Вы посмотрите как это устроено в релейной схеме управления лифтом.


Где можно взять эту схему?

lara197a
15.02.2010, 11:01
как и все в нете, через поиск. я сам не лифтер. пример привел, для образного понимания принципа работы.

TouchS
15.02.2010, 11:54
такой вопрос, (только начал изучать CoDeSYS) как привязать сигнал с датчика к переменным. Т.е. к 4ем входам подключаются датчики -
фотоэлементы в зависимости от их состояния 0 или 1 и последовательности этих состояний, будет определятся направление движения и размер обьекта, человек или машина например. т.е. как присвоить входу ПЛК переменную и дальше уже использовать ее в программе?

alexval2006
15.02.2010, 12:21
IF In_1 THEN
Position:=1;
END_IF
.
.
.
IF In_10 THEN
Position:=10;
END_IF


а что за что отвечает? In_1 это переменная кнопки? Position:=1;
это датчик или наоборот? Я склоняюсь к второму варианту тогда in_1 переменая от датчика 1 тогда условие
если in_1(вкл)тогда
Position:=1;
end_if
немного недогнал сути либо мысль незакончена?
Я думаю так что это просто опрос сотояния всех датчиков поле опроса если механизм находитса на позиции 2 переменная Position:=2; а нужно переместитса на позицию 5тогда получитса условие
Если нажата bytton_5<Position:=2 тогда
движемся вперед
elseif нажата bytton_5>Position:=2 тогда
Движемся назад
end_if
Если нажата bytton_5=in_5 тогда
механизм стоп
end_if
Ну както так может по другому поравти если нетак и как это окультурить по правильному

схема лифта http://povny.info/main/stanki/obprom/44-jelektricheskaja-skhema-i.html

rovki
15.02.2010, 18:32
Уважаемый TouchS,не могли бы вы мне в личку выслать суть задачи,попробовал бы, для себя ,реализовать на ПР110.Пока вы изучаете CoDeSYS.
Я думаю,что различить машину и человека ,а также направление их движения можно с помошью 2 опт.датчиков.Естественно при последовательном их движении.

alexval2006
15.02.2010, 22:50
ладна через неделю привезут плк а там буду пробовать в железе может за это время ктонибудь поможет моей проблеме набросает код и раскажет как он работает :)

rovki
16.02.2010, 12:36
уважаемый TouchS,Ваш пример реализован в разделе Разработка ,тема области применения ПР110.(датчик движения).хотите используйте, ,поставив на выход счетчики или plc ,тогда задача для вас упростится-она сведется к сбору и обработке информации.если есть неоходимость

alexval2006
16.02.2010, 18:04
Нашол хороший пример на ST от пользователя "Валенок" пример (http://www.owen.ru/forum/attachment.php?attachmentid=1752&d=1262013338) там про переход на резервный насос и разные лини подачи но это неважно там хороший и оригинальный подход к коду буду разбираться особенно нравиться применение массива что уменьшает размер кода очень легко нарастить количество датчиков и тп не дописывая кучу кода вобщем пример хороший спасибо ему. :)

alexval2006
08.03.2010, 18:08
я почти добился чего хотел своими силами хоть и потерял достаточно много времени но то что добился этого сам греет душу


Program Plc_prg
Var
A: Word; (*текущее положение механизма*)
B: Word; (*адрес назначения механизма*)
C: Bool; (*движение механизма в сторону с большими номерами датчиков + *)
D: Bool; (*движение механизма в сторону с меньшими номерами датчиков - *)
End_var
--------------------------------------------------------------------------

If B=a Then
C:=false; D:=false;
End_if;
If B>a And B>0 Then
D:=true;
Else
D:=false;
End_if;
If B<a And B>0 Then
C:=true;
Else
C:=false;
End_if;
If B=a Then
C:=false; D:=false;
End_if;

меняю значение переменных A и B всё работает как мне теперь это все правильно выделить в функциональный блок помогите пожалуйста что то не пойму а потом как к этому обращаться из программы мне нужно кнопкам присваивать значения word переменой B а в переменную A писать значения по положению датчиков как это правильно сделать

Николаев Андрей
08.03.2010, 19:14
Создаете в своем проекте еще один POU - FB на языке ST.
Копируете туда листинг Вашей программы.
ВАЖНО: надо создавать переменные типа var_input и var_output в области определения переменных Вашего блока.
Например
var_input
a : word;
b:word;
end_var

var_output
с : bool;
d : bool;
end_var;

А в основной программе делаете вызов ЭКЗЕМПЛЯРА данного блока.
Отдельно рекомендую почитать про вызов ФБ..

alexval2006
08.03.2010, 21:27
спасибо буду читать

alexval2006
09.03.2010, 12:45
Такой вопрос есть 5кнопок в визуализации как им присвоить номера и при нажатии какойто из них записывать ее номер в переменную b типа word

alexval2006
10.03.2010, 19:54
поделитесь примером работы с функциональными блоками на St интересует как к нему обратиться из основной программы и в обще как с ним работать помогите пожал уста голова уже пухнет

Gosha
11.03.2010, 08:10
я бы в тупую создал 2 массива:
пред идущее и текущее состояние датчиков.
если массивы не равны, сравнивал бы какой больше.
подавление дребезга (момент заезда на датчик), как я понимаю, выполняют программно- аппаратные средства плк? только определиться, фнч на сколько гц нужно.

Николаев Андрей
11.03.2010, 10:51
К примеру:
perem_word : word;
kn1, kn2, kn3, kn4, kn5 : bool;

perem_word.1:=kn1;
perem_word.2:=kn5;
...

Ну или почитать документацию... например узнать, что есть библиотека Util.lib в которой есть блоки Pack и Unpack

alexval2006
11.03.2010, 11:19
большое спасибо я обошол это другим методом но так будет лучше в библиотеках я пока дальше стандартной недошол но про эту обезательно почитаю