Регистрация | Последние сообщения | Персональный список | Поиск | Настройка конференции | Личные данные | Правила конференции | Список участников | Top 64 | Статистика раздела | faq | Что нового v.2.3 | Чат
Skunk Forum - Техника, Наука, Общество » АСУТП »
помогите с алгоритмом определения направления вращения катушки.

Версия для печати (настроить)

Новая тема | Написать ответ

Подписаться

Автор Тема:   помогите с алгоритмом определения направления вращения катушки.
начинающий
unregistered
написано 21 Декабря 2006 15:56  ПравкаОтветитьIP

помогите в реализации алгоритма на любом МЭК-языке следующего процесса:
требуется распознать куда мотается намоточная катушка - по часовой стрелке или против. Имеется 2 фотоимпульсных датчика с разницей в расположении 45 градусов т.е. если первым срабатывает датчик 1 -то по часовой стрелке, если датчик 2 -то против. Естеетсвенно, что во время вращения работают оба - следовательно нужно привязываться именно к тому ,какой срабатывает первым.
на языке ФБД я уже кое-что сделал- завел каждый сигнал на отдельный rs-триггер...но какими сигналами мне сбрасывать эти триггеры?
Заранее прошу прощения за некотрую сумбурность вопроса....

Builder
Junior Member

Сообщений: 8
Откуда: Минск
Регистрация: Июль 2006

написано 21 Декабря 2006 16:36ИнфоПравкаОтветитьIP

Без привязки к МЭК: по моему правильнее анализировать не первый (откуда я знаю кто первым сработал), а время между срабатываниями датчиков. Например, если t1>t2, вращаемся в одну сторону, иначе в другую.

kohausen
Junior Member

Сообщений: 1
Регистрация: Декабрь 2006

написано 21 Декабря 2006 17:31ИнфоПравкаОтветитьIP

Builder
Интересно..однако я немного подумал... и скорее всего так не получится т.к. скорость вращения катушки может менятся. Также возможен вариант когда катушка (а точнее "флажок" установленный на ней ) может оказаться в так называемой "мертвой зоне" чтоли т.е. между дпосредине м\у датчиками...т.е. привязываться надо полюбому к тому что я описал в первом посте.

Avsha
Member

Сообщений: 109
Регистрация: Июль 2005

написано 23 Декабря 2006 02:18ИнфоПравкаОтветитьIP

Я бы написал блочок на ST, что-то типа этого...
входы:
D1
D2
выходы:
N1 (направление - по часовой)
N2 (направление - против часовой)

-----------------------
if фронт(D1) then
v_D1 = 1

if v_D2 = 1 then
N1 = false
N2 = true
v_D2 = 0
end if

end if
-----------------------
if фронт(D2) then
v_D2 = 1

if v_D1 = 1 then
N1 = true
N2 = false
v_D1 = 0
end if

end if
-----------------------

далее можно развивать диагностику,
считать время:
- между последовательными фронтами D1 и D2
- между последовательными фронтами D2 и D1
- между последовательными фронтами D1 и D1
- между последовательными фронтами D2 и D2
и генерировать сигналы нарушений, когда это время превышает допускаемые значения.
В любом случае время знать понадобится для отслеживания реальной работы катушки.

Мы давно сделали блочок расчета отсечки времени (входы D1, D2, RESET выходы - время текущее, время предыдущее)
Удачи!


Arslan
Member

Сообщений: 5671
Откуда: Башкирия
Регистрация: Июнь 2003

написано 25 Декабря 2006 06:59ИнфоПравкаОтветитьIP

начинающий
помогите в реализации алгоритма на любом МЭК-языке следующего процесса:
требуется распознать куда мотается намоточная катушка - по часовой стрелке или против. Имеется 2 фотоимпульсных датчика с разницей в расположении 45 градусов т.е. если первым срабатывает датчик 1 -то по часовой стрелке, если датчик 2 -то против. Естеетсвенно, что во время вращения работают оба - следовательно нужно привязываться именно к тому ,какой срабатывает первым.
на языке ФБД я уже кое-что сделал- завел каждый сигнал на отдельный rs-триггер...но какими сигналами мне сбрасывать эти триггеры?

Сдвиг по фазе срабатывания должен быть не 45, а 90 градусов.
А алгоритм весьма прост. Можете поподробнее почитать тут:
ссылка

kohausen
Junior Member

Сообщений: 2
Регистрация: Декабрь 2006

написано 25 Декабря 2006 12:21ИнфоПравкаОтветитьIP

Avsha
Добрый день! Заранее благодарен,что откликнулись на мой вопрос...
меня интересует следуещее (привожу ваш листинг) и циклогамму моего процесса:
при вращении по часовой стрелке:
(сигнал с D1 приходит раньше, с D2 позже....в какой то момент времени они перекрываются - т.к. металлический флажок достаточно широкий)

____| D1 |____| D1 |_____

______| D2 |____| D2 |____

при вращении против часовой стрелки:
(сигнал с D2 приходит раньше, с D1 позже....)

____| D2 |____| D2 |_____

______| D2 |____| D2 |____


Я бы написал блочок на ST, что-то типа этого...
входы:
D1
D2
выходы:
N1 (направление - по часовой)
N2 (направление - против часовой)
-----------------------
if фронт(D1) then
v_D1 = 1 (* не могу понять, зачем нужна эта переменная :-(- по идее она хранит в "памяти" значение полученно по фронту D1 для последующих операций - верно?)

if v_D2 = 1 then (* а это откуда берется? ведь при первой итерации v_D2 равен false, следовательно
N1 = false ----эти строчки не выполнятся.....так?*)
N2 = true (*ПОЧЕМУ? Ведь по идее, если первым срабытывает 1-ый датчик, то следовательно

направление по часовой стрелке*)

v_D2 = 0
end if

end if
-----------------------
if фронт(D2) then
v_D2 = 1

if v_D1 = 1 then
N1 = true
N2 = false
v_D1 = 0
end if

end if


Заранее прошу извинить за "ламерство" вопросов...опыта в этих делах пока маловато...

[Это сообщение изменил kohausen (изменение 25 Декабря 2006 13:40).]

Avsha
Member

Сообщений: 110
Регистрация: Июль 2005

написано 26 Декабря 2006 22:06ИнфоПравкаОтветитьIP

Мой предыдущий вариант был похоже не верен и не позволял
определить направление...

Вот еще мысль...
Это хорошо, что сигналы перекрываются.
Дадим разный вес сигналам D1 и D2 и будем отслеживать
изменение суммы S=D1*1 + D2*2.
При движении по часовой стрелке (N1=1)
S должно меняться: 0-1-3-2-0

____| D1 |____| D1 |_____

______| D2 |____| D2 |____

D1 0 1 1 0 0 х1
D2 0 0 1 1 0 х2
----------------------------------------------------
S 0 1 3 2 0

При движении против часовой стрелки (N2=1)
S должно меняться: 0-2-3-1-0

программа:
----------------------
S=D1+D2*2

if S<>vS then
if vS=0 and S=1 then N1_01=N1_01+1 'признак перехода N1 из 0-->1
if vS=1 and S=3 then N1_13=N1_13+1 'признак перехода N1 из 1-->3
if vS=3 and S=2 then N1_32=N1_32+1 'признак перехода N1 из 3-->2
if vS=2 and S=0 then N1_20=N1_20+1 'признак перехода N1 из 2-->0

if vS=0 and S=2 then N2_02=N2_02+1 'признак перехода N2 из 0-->2
if vS=2 and S=3 then N2_23=N2_23+1 'признак перехода N2 из 2-->3
if vS=3 and S=1 then N2_31=N2_31+1 'признак перехода N2 из 3-->1
if vS=1 and S=0 then N2_10=N2_10+1 'признак перехода N2 из 1-->0

if vS=0 and S=1 then N1=1 'признак определения направления N1
if vS=0 and S=2 then N2=1 'признак определения направления N2

end if

vS=S
------------------------

kohausen
Junior Member

Сообщений: 3
Регистрация: Декабрь 2006

написано 27 Декабря 2006 15:05ИнфоПравкаОтветитьIP

Avsha
а как вам вариант, предложенный Arslan? я посмотрел...вроде к моему случаю подходит....да и реализация проста: отслеживать либо переднйи либо задний фронт...

Интересно было бы услышать ваше мкенеие....

kohausen
Junior Member

Сообщений: 6
Регистрация: Декабрь 2006

написано 29 Декабря 2006 11:23ИнфоПравкаОтветитьIP

2 Avsha согласно,алгоритму от Arslan,накидал следущее:
VAR_INPUT
bSensor_1: BOOL; (*сигнал с датчика 1*)
bsensor_2: BOOL; (*сигнал с датчика 2*)
END_VAR
VAR_OUTPUT
bQ1: BOOL; (*вращение по часовой стрелке*)
bQ2: BOOL; (*вращение против часовой стрелки*)
END_VAR
VAR

F_TRIG_Sensor_1: F_TRIG;(*ловит задний фронт сигнала датчика_1*)
R_TRIG_Sensor_1: R_TRIG (*ловит передний фронт сигнала с датчика_1*)


bRise_edge: BOOL; (*передний фронт импульса с датчика_1 *)
bFall_edge: BOOL; (*задний фронт импульса с датчика_1*)
END_VAR
=================================
R_TRIG_Sensor_1(CLK:=bSensor_1);
bRise_edge:=R_TRIG_Sensor_1.Q;

F_TRIG_Sensor_1(CLK:=bSensor_1);
bFall_edge:=F_TRIG_Sensor_1.Q;

IF ((bRise_edge=TRUE) AND (bsensor_2=FALSE))
THEN
bQ1:=TRUE;
bQ2:=FALSE;

ELSIF ((bFall_edge=TRUE) AND (bsensor_2=TRUE))

THEN
bQ1:=FALSE;
bQ2:=TRUE;

END_IF;

Что думаете по этому поводу?

Efiop
Junior Member

Сообщений: 21
Откуда: РК
Регистрация: Апрель 2006

написано 07 Января 2007 12:42ИнфоПравкаОтветитьIP

начинающий, а что сам процесс выбора направления вращения не контролируется? Что изменяет направление вращения намоточной катушки, какой механизм? Может пойти по пути наименьшего сопротивления?

Если уж писать как есть, при наличи датчиков, то на мой взгляд лучше их расположить как можно ближе, лучше вплотную.
Сделать флажок побольше, чтобы он покрывал сразу два датчика. А дальше уже дело техники. Какой из датчиков отключиться (разомкнется) последним по нему и определять направление.

Реализация на RLL:

..D1
--||----------------------(SET C0) <<Реле Датчика 1>>
..D2
--||----------------------(SET C1) <<Реле Датчика 2>>

..D1 D2 C0
--|/|-||-||---------------(SET C2) <<Напрвление по часовой>>
.....| | |
.....| D2 C1 C0 | -(RST C3) <<Напрвление против часовой>> Сброс
..... -|/|-||-|/|- |
..................| -(RST C0)
..................|
..................| D2
..................--|/|---(RST C1)

..D2 D1 C1
--|/|-||-||--------------(SET C3) <<Напрвление против часовой>>
.....| | |
.....| D1 C0 C1 | -(RST C2)<<Напрвление по часовой>> Сброс
..... -|/|-||-|/|- |
..................| -(RST C1)
..................|
..................| D1
..................--|/|---(RST C0)

_Xttp://slil.ru/23697333 - адресок картинки кода на RLL.

Ваш ответ:

Коды форума
Смайлики


Ник:    Пароль       
Отключить смайлики

Все время MSK

Склеить | Разбить | Закрыть | Переместить | Удалить

Новая тема | Написать ответ
Последние сообщения         
Перейти к:

Свяжитесь с нами | skunksworks.net

Copyright © skunksworks.net, 2000-2018

Разработка и техническая поддержка: skunksworks.net


Рейтинг@Mail.ru Яндекс.Метрика