Hafizov G, по второму вопросу мало информации. Нужно видеть проект.
Вид для печати
Hafizov G, по второму вопросу мало информации. Нужно видеть проект.
запросто,Вложение 9051,суть такова почти в каждом теле программы есть счетчик СТУ, он и приводит в действие тело ШАГА, первый цикл программа проходит, тоесть init - step 6, то по идее в инните дожен произойти сброс всех счетчиков, как я думал, но это не прокатывает, пробовал ставить генератор изменения reseta перед тоже на 2 цикле не замечает.
или есть возможность предложите код счетчика как в CTU, илискажите можно ли обнулить значение CV? - прога говорит он недоступен для записи, можно ли его сделать доступным?
Хорошо, а как сравнивать значения с модуля в моменты, когда поочерёдно включаются 1 и 2 входы контроллера. Т.е., мне нужно получить разницу значения модуля ввода при включённых 1 и 2 входах, в зависимости от которой будут включаться два других выхода контроллера. Что-то типа U1 - это необходимое значение модуля ввода при 1 включённом входе, U2 - это при 2 входе. И всё, что мне нужно, это получить разницу значений U1-U2.Цитата:
Что-то Вы мудрите. Зачем объединять? Почему нельзя просто сравнить значения с модуля? Приведите пример, чего хотите добиться в результате. А то не понятно, что дано, с чем сравнивать, и что в итоге должно получиться?
"по идее в инните дожен произойти сброс всех счетчиков" :confused:
Это по какой-такой идее, а где код, который сбрасывает счетчики?
По крайней мере код действия шага Init должен быть вот так
И что это за код (встречается в во всех шагах)Код:A5:=1;
i:=0;
WHILE i<5 DO
NA:=1;
i:=i+1;
END_WHILE
NA:=0;
i:=0;
(*----------- Сброс счетчиков*)
CTUInst(RESET:= TRUE);
CTUInst1(RESET:=TRUE);
T1(RESET:= TRUE);
T3(RESET:= TRUE);
(*------------*)
Это код паразит, он ни чего не делает, может это типа задержки(он просто считает число циклов ПЛК).Код:i:=0;
WHILE i<5 DO
NA:=1;
i:=i+1;
END_WHILE
NA:=0;
i:=0;
А вот здесь
http://toolson.net/ImageData/GifAnimation/915868.gif
Состояние элементов Т1, Т2, Т3, вообще не будут иметь значение.
Что это за выражение
http://s017.radikal.ru/i420/1306/4c/6e9aebe6b64bt.jpg
Ведь переменная имеет тип BOOL, интересно когда она станет отрицательной.:rolleyes:
И еще. Почему нельзя просто прямо возле черточки само условие написать. Ведь простейшие условия
http://i058.radikal.ru/1306/d8/0498eacd56ddt.jpg
Дальше программу не смотрел, наверняка есть и другие ляпсусы.
Вообщем этому человеку нужно устройство выборки и хранения измеренного значения
Если нужно запоминать измеренные значения в момент включения входов, то нужно в условия IF добавить R_TRIG.Код:IF in1 THEN (*Пока вход 1 включен*)
U1:=izm; (*эта переменная повторяет измеренное значение*)
END_IF
(*после выключения входа 1 в переменной U1 запомнится значение в момент отключения входа in1*)
IF in2 THEN (*Пока вход 2 включен*)
U2:=izm; (*эта переменная повторяет измеренное значение*)
END_IF
(*после выключения входа 2 в переменной U2 запомнится значение в момент отключения входа in1*)
У тебя в глобальных перменных CTUInst: CTU и эта же переменная в локальных PLC_PRG, так и должно быть?
Вообще старайся как можно меньше использовать глобальные переменные. Это избавит тебя от ошибок, которые очень трудно найти. Для этого используй в функциональных блоках переменные var_input.
Действие Init.
Смотри, что у тебя тут происходит:
A5:=1;
i:=0;
Далее зачем-то цикл
WHILE i<5 DO
NA:=1;
i:=i+1;
END_WHILE
после цикла имеем: NA=1, i=5;
далее эти же переменные меняются:
NA:=0;
i:=0;
В результате работы действия Init у тебя всегда будут одни и те же значения: A5=1, NA=0, i=0. То есть цикл никак не повлиял на результат.
Имей в виду, что цикл надо использовать осторожно, так как он увеличивает время работы программы в целом, и если цикл будет большим, то контроллер зависнет и перезагрузится. Контроллер сам работает в цикле. И этим надо пользоваться.
По поводу счетчика. Почитай описание работы в документации CoDeSys_V23_RU.pdf стр.347. Обрати внимание, что счетчик будет считать тогда, когда будет меняться сигнал на входе CU, а обнуляться будет тогда, когда на вход RESET подается TRUE.
Для для Hafizov G
Если Вы хотели сбрасывать счетчики, которые используются в шагах, просто изменив в шаге Init переменную NA из 0 в 1 и затем опять в 0, то эти манипуляции ни как не отразятся на состоянии счетчиков, нужно именно вызывать сами экземпляры счетчиков с нужным значением входа RESET, потому как любая подпрограмма сохраняет свою внутренние переменные до следующего к ней обращения.
Счетчик это тоже подпрограмма.
Исходя из ранее не замеченной мной переменной NA предлагаю, такой код для шага Init
Код:A5:=1;
(*----------- Сброс счетчиков*)
CTUInst(RESET:=1); CTUInst(RESET:=0);
CTUInst1(RESET:=1);CTUInst1(RESET:=0);
T1(RESET:=1);T1(RESET:=0);
T3(RESET:=1);T3(RESET:=0);
(*------------*)
Блин, ребята спасибо! Все учту, буду учиться пользоваться, есть еще один вопрос- о LD. возможно ли на LD строить циклы? и есть ли литература с примерами (как по LD так и по остальным для новичков)? а то на мануале конечно здорово, но увидеть в одной книжке пару десятков примеров было бы круто, я инет чуть чуть порыл, только статьи, а книг хороших не заметил, наверное плохо искал.
есть хорошее средство, как конвертация. Найдите пример с циклом, откройте его в КДС, правой кнопкой по нужному ФБ и выбрать конвертацию, так сможете разобраться как в LD выглядят циклы, если конечно это принципиально. Не могу понять только зачем, когда есть другие языки
просто видимо человек более-менее понимает только LD, а задачу надо решать уже сейчас.
Есть такая книга И.Г. Минаев, В.В.Самойленко "Программируемые логические контроллеры. Практическое руководство для начинающего инженера". "АРГУС" 2009г.
Как раз вся книга про LD и контроллеры ОВЕН.
Можно найти в интернете и скачать.
Вложение 9080 Вложение 9081
отличная книга)))с нее фактически я начинал освоение ПЛК))) Книга написана великолепным языком.
Написал первую программу в кодесис. Прошу посмотреть что не так, где можно улучшить? Программа управления прессом для склейки фанеры. Есть визуализация с вводом данных. Логика работы пресса такова:
1 При пуске включаются насос высокого давления(НВД) и насосы смыкания плит.
2 При смыкании плит кратковременно замыкается микропереключатель(в визуализации кнопка DUP) на реле давления-насосы смыкания останавливаются, НВД продолжает нагнетать давление.
3 По достижении первой ступени давления склейки(обычно около 300кг/см)запускается выдержка времени, в это время давление поддерживается НВД и клапаном сброса высокого давления в пределах +-10кг.
4 Клапан сбрасывает давление до второй ступени(обычно 100кг/см), запускается выдержка времени.
5 После выдержки открывается клапан сброса высокого давления, давление сбрасывается до 30кг
6 Открывается клапан размыкания плит.
В визуализации сигнал с датчика давления я эмулировал ползунком.
http://yadi.sk/d/-cOaIPtA68lmC
под ПЛК150
не пойму в чем вопрос... Заливайте вашу программу в контроллер и тестируйте работоспособность, потом на объект. Там и выяснится что не так и что где и как можно улучшить. Здесь за вас врядли кто-то будет делать вашу работу. Если есть конкретная проблема, то множество людей с радостью вам постараются помочь.
Ребята, я снова в недоумении, внимание вопрос - Как настроить ПЛК 110 -32 так чтобы при нажатии кнопки СТОП (на лицевой панели) все выходы отключались (а то устройство так в разнос идет) и программа начиналась с начала, (в мануале смотрел, но так и не нашел) Программа на упрощенном SFC, LD, ST))
если я правильно понял то это вам не кнопка стоп нужна, а кнопка "сброс" Она там рядом)
Хороший вариант, но не пойдет)), хотя бы чтоб выходы отключались, (а то кнопку стоп нажал, а рейка с манипулятором дальше бежит))
В конфигурации добавляете подмодуль Button и работаете с кнопкой старт\стоп как с простым входом.
я понимаю что вы имеете в виду, но проблема в том что я понятие не имею как плк останавливает программу, и воспроизвести такой механизм пока не могу ((
Hafizov G тоже думал над этим. Поэтому как Николаев Андрей написал, использовать кнопку button и заводить данный вход на элементы И перед выходами или интегрировать в схеме раньше по ситуации и логике.
Может есть еще варианты ?
Кстати в каких ситуациях срабатывает "безопасное состояние" выходов ?
В ПЛК нет понятия остановить программу...
Кнопка старт\стоп на самом деле скорее пауза.
Вот как раз речь об этой паузе. Не важно как ее обозвать, главное, чтобы можно было в данном режиме указывать состояния выходов.
Нажал на паузу и согласно настройкам выход ставишь либо в отключенное состояние, либо во включенное состояние, либо в состояние предшествующее нажатию кнопки, то есть не менять.
Очень плохо, что данного понятия нет в ПЛК от ОВЕН.
Я думаю тут недопонимание. У ПЛК НЕ МОЖЕТ БЫТЬ РЕЖИМА СТОП. Это противоречит самой логике ПЛК...
Все остановки\паузы и остальная логика прописывается в программе. Где Вы в зависимости от состояния переменной\входов и выходов переводите программные блоки в определенные состояния. Ну и точно так же Вы или Ваши программные блоки управляют выходами.
А безопасные состояния и пр. - это милые, но не всегда полезные опции безопасности. Но никак не управления.
Перевод ПЛК в "паузу" как и резет - СЕРВИСНОЕ СОСТОЯНИЕ ПЛК.
Ну Вы даете.
А чем так плохо. Вставьте в начало программы проверку нажатия кнопки ПАУЗА.
Код:IF bt_PAUSA THEN (* Если нажата кнопка пауза)
out1:=1; (*заданное состояние "для паузы" *)
out2:=0; (*заданное состояние "для паузы" *)
out3:=0; (*заданное состояние "для паузы" *)
(*И т.д
------------------
------------------*)
ELSE
(*Здесь тело программы
...................
...................
*)
;
END_IF
petera то, что это можно реализовать программно понятно. речь немного о другом.
Николаев Андрей угу, это камень в огород например Сименса, там в легкую ПЛК переводится в СТОП с настройкой безопасного состояния выходов или с форсированием. например при грубых ошибках в ПО, оборудовании и т.д.
Именно подобное хотелось бы видеть и в ОВЕНе. частично там что-то есть даже, просто необходимо разобраться с реализацией. Единственное непонятна вообще кнопка прибора "старт/стоп" как-то через место сделана, что приходится предусматривать все в программе вместо того, чтобы просто прописать в настройках прибора.
СТОП он и в Африке стоп, даже если его паузой назови, остановка цикла программы - для данного режима на аппаратном уровне необходимо контролировать состояния выходов, а не на программном. Но это ИМХО.
capzap все встречалось, но как написал выше, логичнее это организовывать на аппаратном уровне ПЛК, а не на программном в программе пользователя..
capzap хорошо, поправлюсь, на уровне фирмваре (прошивки) :)
имелось ввиду не на уровне пользовательской программы.
Давайте таки разделять.
1. И с этим никто не поспорит, надеюсь: все обдуманные действия, в том числе переход из состояния системы в состояние делается программно, в цикле ПЛК. Тут можно спорить\не спорить\ и приводить любые примеры. Так работает ПЛК и с этим не поспоришь.
2. У некоторых производителей ПЛК действительно есть набор сервисных функций, таких как управление выходами в состоянии сервисного прерывания работы контроллера, путем искусственного останова цикла ПЛК (режим стоп\пауза).
НО: этот сервисный режим сделан не для того, чтобы закладывать его в работу установки (объекта). Он для того, чтобы наладчик мог не запуская программу проверить работают ли у контроллера выходы.
И это не ИМХО.
Сервисный режим "безопасные выходы" при перезагрузке реализован и на наших ПЛК. Режим пауза сервисный и используется только до запуска объекта.
Ну да, ну да - коллега у меня поф(х)....ст, не сделал отключение питания выходов контроллера релюхой при неработающей программе, нонсенс конечно, но на всех других платформах так работает нормально, на Вашей при подаче питания на контроллер, перед тем как все запустилось в работу все выходы делают кратковременный щелк, что не есть хорошо (пневматика дрыгается, моторы тоже)!:mad: Может поправите? Проблема, похоже аппаратная.:cool:
Ох, черт дернул спросить, спасибо за подсказки, так и сделал))
Замечательно, просто мы давно ничего не делали на ваших контроллерах, тут почитал - вспомнилось. Поскольку напрягает не сильно, то и ....
Тогда отключили таки питание контактом реле подачи напряжения, все стало хорошо. Впрочем, так делаем всегда и на всех платформах, просто в тот раз как-то коллега накосячил, я не проконтролировал.
Вопрос по поводу ШИМ управления на МУ110-8К
Указано, что при групповом управлении выходами (так понимаю запись в регистр 50 битовой маски) ШИМ отключается.
Получается если мне один выход необходим с ШИМ а остальные просто включать выключать, я должен всеми выходами управлять как будто они с ШИМ ? то есть для простых выходов записывать BOOL_TO_WORD 1*1000 и передавать в регистр 0...7 при использовании Modbus ?
Или можно как-то проще поступить, если мне нужен всего один выход с ШИМ ?
Использовать софтовый ШИМ с выходом типа BOOL.
Здравствуйте товарищи. Решил обратиться за помощью после 3-х дневного сидения над проблемой. Задача стоит следующая. Имею 5 приборов трм 101 с rs 485 и плк 100 для их опроса. Плк выступает в роли мастера. Один прибор подключил и сконфигурировал при помощи модуля плк конфиг. Далее мне эти данные необходимо шлюзануть на контроллер другого производителя по модбас Вложение 9183. Использую для этого модуль modbus (slave). Вложение 9181 и для испытаний порт rs232 с конфигурацией Вложение 9182. Адреса регистров беру из схемы выложенной кем-то ранее Вложение 9184, соответственно это 0x00(чтение), 0x01(чтение), 0x02(запись). Адресс моего плк-10. Запросы отправляются, а ответа ни одного бита. Если бы хоть один бит шёл бы в ответ, то уже можно было бы думать о таймаутах, о разрывах, помехах и т.д. А так как будто бы порт мёртвый на плк. Причём пробовал и дебаг 232. Картина такая же. Конечно в дальнейшем я буду юзать ethernet для передачи переменных по модбас, мне на данном этапе важно увидеть хоть какой-то результат работы модуля modbus(slave). Может какие-нибудь перемычки нужно переключать? Забыл упомянуть что контроллер выступающий мастером в сети(опрашивающий модуль modbus(slave)) рабочий и установлен в линии. Так же пробовал другой контроллер и ещё компьютер со скадой. ПЛК 100 с адрессом 10 на запросы мастера по rs 232 не отвечает.
Нет. Или все через ШИМ или вариант Алексея Дмитриева.Цитата:
Или можно как-то проще поступить, если мне нужен всего один выход с ШИМ ?