PDA

Просмотр полной версии : Адресация выходов в ПЛК110-60



Andrey Tishakov
15.09.2012, 08:12
Возникла проблема. Написал в языке LD преобразователь кода двоичный в десятичный залил в плк подсоединил сам кодировщик при вводе в плк кода я вижу как перемаргиваются лампочки входов а на выходе тишина. Пытался а конфигураторе заменить название выхода как рекомендуют в руководстве все равно толку ноль. Подскажите как поименовать правильно. Или как в программе задать правильно номер выхода.
Пытался так задать
M1: BOOL;%QX3.0.0:BOOL;
при компиляции пишет укажите тип, так тип же указан "BOOL" или я чего то не понимаю.

Малышев Олег
15.09.2012, 08:57
Возникла проблема. Написал в языке LD преобразователь кода двоичный в десятичный залил в плк подсоединил сам кодировщик при вводе в плк кода я вижу как перемаргиваются лампочки входов а на выходе тишина. Пытался а конфигураторе заменить название выхода как рекомендуют в руководстве все равно толку ноль. Подскажите как поименовать правильно. Или как в программе задать правильно номер выхода.
Пытался так задать
M1: BOOL;%QX3.0.0:BOOL;
при компиляции пишет укажите тип, так тип же указан "BOOL" или я чего то не понимаю.

m1 at %qx3.0.0:bool;

Andrey Tishakov
15.09.2012, 14:18
спасибо Олег я не доглядел.

Andrey Tishakov
17.09.2012, 20:42
подскажите еще. У меня такая проблема по вашей подсказке сделал адресацию залил прогу , все заработало но после выключения и включения контроллера у меня нет проги в нем. Может надо как то явно указывать что лить надо в энергонезависимую память. Или я что то не так делаю.

lara197a
17.09.2012, 22:55
Онлайн-создать загрузочный проект

Andrey Tishakov
18.09.2012, 06:33
в смысле. а я как делаю. Подключаю в онлайн записываю программу отключаю проверяю работает. Выключаю питание ПЛК включаю все прроги нема.

SBER
18.09.2012, 09:13
Подключаетесь, записываете программу, жмете - создать загрузочный проект.
Инструкции читать не пробовали? Настоятельно рекомендую.

Andrey Tishakov
22.09.2012, 09:47
SBER смотреть пробовал. Проблема оказалась в том что я работал из под виндовс 7. Вчера поставил XP настроил все записал точно так как делал до этого и опа, все заработало. С чего бы это.

Andrey Tishakov
22.09.2012, 09:51
Вопрос возник в другом подскажите как организовать счетчик в CFC который будет плюсовать на выходе по одному шагу в двоичном коде. Ну к примеру у меня на выходе стоит код 00001 я включаю счетчик в плюс и у меня пошло 00010, 00011 ну и так далее пока не совпадет с заданным кодом. А то мозгов чего то не хватает.

Николаев Андрей
23.09.2012, 00:28
add для сложения.
sel для сравнения.

Andrey Tishakov
06.11.2012, 12:47
есть еще один вопрос. У меня 3 зоны разгона. Работает следующим способом. Все скорости а их 18 включаются не посредственно. но если я набрал к примеру 12 скорость и сделал пуск то сначала включится 11 скорость которая является первой ступенью разгона а потом с выдержкой 1 секунда 12. при торможении наоборот сначала 11 потом после выдержки 1 секунда стоп. Таких ступеней у меня 3, скорость 11, 14, 17. Не получается написать работу этого переключателя. Мож кто че подскажет.

Andrey Tishakov
06.11.2012, 12:49
вообще это переделка станка 1516 с логикой Т на плк

Гарчев Евгений
07.11.2012, 16:27
Посмотрите по справке CoDeSys описание таймеров TON, TOF, TP.

Andrey Tishakov
08.11.2012, 12:57
и каким способом мне это поможет. я имею в виду таймера. это вроде бы как логическая операция.

Terrano1992
08.11.2012, 14:42
Решение "в лоб" - у вас в программе наверняка есть некий логический сигнал "пуск", разрешающий/запрещающий работу привода. С помощью R_TRIG и F_TRIG выделяете его фронты и подаете их на вход двух таймеров TP (один таймер на "разгон", второй на "торможение"). Если выход любого из этих таймеров активен, то "действующая скорость := выбранная скорость минус 1", иначе "действующая скорость := выбранная скорость".

Andrey Tishakov
08.11.2012, 23:11
Не в лоб не покатит. Там приводов то нема. Только электромагнитные муфты.

Terrano1992
09.11.2012, 09:01
Не в лоб не покатит. Там приводов то нема. Только электромагнитные муфты.

Ну и что из того? Мне, вообще-то, "станок 1516 с логикой Т" ни о чем не говорит. Поясните тогда физическую сущность, как там этими муфтами скорость регулируется.
В любом случае, ваша программа откуда-то берет информацию о выборе необходимой рабочей скорости и как-то ее преобразует в сигналы управления муфтами. Вот там и вставляйте собственную проверку условий для формирования сигнала "пуск/стоп".

Andrey Tishakov
09.11.2012, 12:58
Электромагнитными муфтами включаются шестерни в коробке. То же самое что делают ручкой скоростей в автомобиле. Только в коробке станка муфтами, при подаче напряжения на катушку муфты. То есть моя программа формирует набор муфт для переключения скоростей. А задаю я скорость переключателем на пульте, переключатель формирует двоичный код скорости, который поступает в ПЛК.

Terrano1992
09.11.2012, 14:23
Ну и замечательно... Значит, за эквивалент команды "пуск" можно принять условие, что заданная переключателем скорость не равна нулю? При необходимости скомбинировав его через обычные логические операции (AND, OR, NOT, XOR) с какими-то другими условиями, чтобы выходной сигнал отражал реальную передачу крутящего момента в коробке.

Andrey Tishakov
09.11.2012, 21:26
еще раз повторяю обратной связи нет. В этом то и вся проблема.

Andrey Tishakov
09.11.2012, 21:34
а есть такое состояние что токарь может переключить скорость когда ему вздумается и на сколько вздумается , как вверх так и вниз. то есть нужно проверять где его черти носят в реальном времени. Я сначала сделал программу в которой у меня происходило сравнение с заданной скоростью и потом счетчик в зависимости от условия считал скорость вверх или вниз, но были задействованы все скоростя и ступеней разгона и торможения не было. В итого очень долгий набор и очень медленное торможение плюс рычание при переключении муфт в коробке. Эту прогу забраковали. Хотел как то по другому но че то торможу. Прямой фукциональный блок декодера скоростей я сделал даже задержки на каждую муфту поставил. То есть теперь при переключении все работает но если токарь с дури крутанет переключатель на 18 скорость с 1 то будет большой бада бум. Так же и торможение если при 200 оборотах нажать стоп то удар будет еще тот.

capzap
09.11.2012, 22:38
а есть такое состояние что токарь может переключить скорость когда ему вздумается и на сколько вздумается , как вверх так и вниз. то есть нужно проверять где его черти носят в реальном времени. Я сначала сделал программу в которой у меня происходило сравнение с заданной скоростью и потом счетчик в зависимости от условия считал скорость вверх или вниз, но были задействованы все скоростя и ступеней разгона и торможения не было. В итого очень долгий набор и очень медленное торможение плюс рычание при переключении муфт в коробке. Эту прогу забраковали. Хотел как то по другому но че то торможу. Прямой фукциональный блок декодера скоростей я сделал даже задержки на каждую муфту поставил. То есть теперь при переключении все работает но если токарь с дури крутанет переключатель на 18 скорость с 1 то будет большой бада бум. Так же и торможение если при 200 оборотах нажать стоп то удар будет еще тот.

Может легче адекватных токарей найти чем программу сделать с абсолютной защитой от дурака

Terrano1992
10.11.2012, 09:13
а есть такое состояние что токарь может переключить скорость когда ему вздумается и на сколько вздумается , как вверх так и вниз. то есть нужно проверять где его черти носят в реальном времени.
Ну так это совсем не те условия задачи, которые Вы поначалу обозначили... Тут у вас получается другая задача - сравнивать разницу между выбранной скоростью и текущей и формировать такую рампу разгона/торможения (временную последовательность переключения муфт), чтобы обеспечить минимум временных затрат на изменение скорости, но не превысить предельно допустимую нагрузку на привод и трансмиссию.
"Обратная связь" у вас уже есть: положение переключателя и действующая на данный момент скорость (комбинация включенных муфт). При условии, что коробка механически исправна, никакой другой обратной связи не требуется. Остается выяснить, при каком ускорении еще не возникает опасных перегрузок (через какое количество ступеней можно перепрыгивать на каждом шаге разгона).
Ну а дальше все очевидно. От действующей скорости (в том числе и нулевой) к заказанной движемся шагами этого размера. Если на очередном шаге обнаруживаем, что следующая скорость будет больше заказанной - урезаем значение ровно до заказанной (укорачиваем последний шаг).

Terrano1992
10.11.2012, 09:15
Может легче адекватных токарей найти чем программу сделать с абсолютной защитой от дурака
Абсолютной защиты от дурака не бывает, и абсолютно адекватных операторов оборудования - тоже. Человеку, как известно, свойственно ошибаться (хотя бы иногда).

Александр Ушаков
10.11.2012, 12:37
Может легче адекватных токарей найти чем программу сделать с абсолютной защитой от дурака

Позволю с Вами не согласится, я сам начинал свой рабочий путь токарем на 1К62 замечательный станок.
Нарезать резьбу, на нем, одно удовольствие, с помощью рукоятки управления меняется не только направление но и разгон с торможением,красота.
Но если на эту рукоятку упадёт, с бабки, какой нибудь предмет или токарь неловко зацепит её крем одежды, то может случится и несчастье.

capzap
10.11.2012, 13:07
и в чем Ваше не согласие? У кого чаще случаются неожиданности, у профи или человека знакомого с "белочкой". Я же написал про адекватность и защиту от "дурака" а не от случайностей

Александр Ушаков
12.11.2012, 05:40
Да в общем то я о безаварийной работе, если аварийная ситуация происходит при простом нажатии кнопок или повороте переключателя, то это не есть хорошо.
И где взять идеальных токарей клонировать что-ли, людям свойственно ошибаться извините.

Andrey Tishakov
13.11.2012, 21:47
Да вариантов проблемы много только вот решение как то не вытанцовуется.
пробовал решить через счетчик используя сравнение скорости но че то затупил. Скоростей всего 18 а зоны обозначаются граничными скоростями 11, 14, 17. Вот таким макаром. То есть plc должен помнит где мы находимся и в то же время опредилить через сколько ступеней ему прыгать вниз или вверх. Нет не у кого случаем примера решения подобного алгоритма.

petera
14.11.2012, 01:20
пробовал решить через счетчик используя сравнение скорости но че то затупил. Скоростей всего 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 страниц кода):confused:

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] с комбинацией времени задержки включения/отключения муфт. Эти задержки и сформируют шаги движения к заданной скорости, если все таймеры, управляющие вкл./откл. муфт будут запускаться одновременно по факту переключения скорости. (на каждую муфту нужны индивидуальные таймеры). Получится нечто похожее на циклограмму включения/отключения муфт в заданной последовательности с заданными задержками переключения???

Yegor
14.11.2012, 07:39
есть еще один вопрос. У меня 3 зоны разгона. Работает следующим способом. Все скорости а их 18 включаются не посредственно. но если я набрал к примеру 12 скорость и сделал пуск то сначала включится 11 скорость которая является первой ступенью разгона а потом с выдержкой 1 секунда 12. при торможении наоборот сначала 11 потом после выдержки 1 секунда стоп. Таких ступеней у меня 3, скорость 11, 14, 17. Не получается написать работу этого переключателя. Мож кто че подскажет.А если с 10 на 12 скорость переключают, тоже должна быть задержка на 11?

Yegor
14.11.2012, 08:39
Вот простейший код, который тормозит на определённых шагах:
PROGRAM PLC_PRG
VAR
targetSpeed, tmpSpeed, resultSpeed: INT (1..18);
isAccStep: BOOL;
delay: TON;
END_VAR

IF targetSpeed <> tmpSpeed THEN
delay(IN := isAccStep, PT := T#1s);
tmpSpeed := tmpSpeed + LIMIT(-1, targetSpeed - tmpSpeed, 1) * (BOOL_TO_INT(delay.Q) + BOOL_TO_INT(NOT isAccStep));
END_IF

isAccStep := tmpSpeed = 11 OR tmpSpeed = 14 OR tmpSpeed = 17;

IF targetSpeed = tmpSpeed OR isAccStep THEN
resultSpeed := tmpSpeed;
END_IF

Andrey Tishakov
19.11.2012, 10:45
Спасибо за алгоритм будем пробовать. Судя по всему придется изучать язык ST. Я рисовал все в FBD но видно он мне не поможет все решить.:(
Я щас застрял на такой проблеме мало того что по ступеням нужно разгонятся так еще и возник вопрос если переключились к примеру с 10 на 11 то как отработать ее как разгонную ступень или просто как скорость рабочую.

Andrey Tishakov
22.11.2012, 10:02
Помогите разобраться. Хочу вставить действие или подпрограмму в проект, вставляю а у меня при компилировании не видится эта подпрограмма. Подскажите как правильно сделать.

Yegor
26.11.2012, 09:24
Вот вам ответ примерно того же качества, что и вопрос: у меня всё работает. Требуется помощь — описывайте проблему целиком. Выложите проект. Если нельзя — воспроизведите проблему в пустом проекте и выложите его.