Всё работает, при подключении любой из переменных Вложение 85308
И это не макрос, а ФБ на ST
А у вас просто вторая переменная не энергонезависимая (не сетевая и не экранная).
Вид для печати
Всё работает, при подключении любой из переменных Вложение 85308
И это не макрос, а ФБ на ST
А у вас просто вторая переменная не энергонезависимая (не сетевая и не экранная).
Спасибо. Действительно если сделать переменную энергонезависимой то всё работает.
А насчёт макроса и ФБ - это я перепутал термины:)
Здравствуйте.
Прошу помощи.
Связка СП307-Б и ПР100-24.1203.03.1 (М02).
Пытаюсь отобразить на панели индикаторами состояние дискретных входов. Делаю это, присваивая индикаторам адреса 0х4096...4103. Всё работает.
Я использую также один аналоговый вход в качестве дискретного - в программе на ПРку соответствующие настройки сделал - он работает.
Теперь, как только на панели я добавляю индикатор с адресом 0х4112 (AI1 в дискретном режиме) этот индикатор не отображается и все остальные (0х4096...4103) тоже перестают.
При этом индикаторы, привязанные к дискретным выходам (0х0..9) продолжают отображаться.
Подскажите как быть?
Попробуйте прочитать из панели 4х4112 бит 0, но есть большие сомнения, битовых сетевых в ПР слейве нет, а целое может не пройти.
Правильней будет присвоить бит из AI1, после конвертации в целое, в сетевую переменную, например регистр 512
и читать как 0 бит 512 регистра (4х512 бит 0).
Можно упаковать биты в маску и передать до 16 бит одним регистром.
Возможно что панель запрашивает сразу 17 (или ?) бит (4096...4112, протокол это не запрещает) а ПР это не вывозит или есть пропуски на которые не может положить болт. Часто встречается оборудование которое с какого-то считает что модбасные битовые должны быть с какой-то кратностью в адресации и кол-ве, хотя штатно модбасу на это класть. Точно можно сказать снифернув посылку от панели и ответ ПР.
Обходите маской как сделали и забудьте.
Валенок прав. Т.к панель делает групповые запросы по 16 регистров или по 16 бит в однм запросе и если в группу попадает адрес не существующего бита или регистра, то происходит ошиббка связи. А ОВЕН выкинул из шаблона проектов вызов системного окна о потери связи, по этому Вы просто наблюдаете, что все индикаторы из группы как бы перестают отображаться.
Обмануть панель не сложно.
Запретить включать бит 0х4112 в групповой запрос можно если для этого индикатора включить динамическую адресацию
Вложение 85433
Индексный регистр можно указать ЛЮБОЙ !
Вложение 85434
Главное коэффициент сделать равным 0
Вложение 85435
Доброго вечера всем.
У меня такая ситуация. Есть панель СП315 (мастер) и по модбасу к ней подключены 2 ПР 200 (слейвы). В каждом своя программа. Нужно сделать так, что бы ПР 200 могли обмениваться между собой булевскими переменными и желательно помимо панели. Т.К. предполагается, что панель будет отключаться и ПР-ы работать автономно.
Это же проще пареной репы, в смысле ПР200 может иметь до двух(включительно) сетевых интерфейса, короче, второй интерфейс на каждом ПР используйте для связи ПР между собой, всё!
Если сразу купите ПР200 с двумя сетевыми интерфейсами ещё и денег сэкономите, в смысле, чем потом их докупать, короче, счастье Вам привалит!
Проблема в том, что на работе есть только пр-ки с одним интерфесом. На них и надо делать.
Можно переставить сетевой интерфейс с незадействованных в текущем проекте ПР200, если правду говорите, в смысле, у вас много ПР с одним сетевым интерфейсом.
Может и докупать ничего не придётся не только для текущего проекта, но и для последующих, в смысле, если для последующих проектов сетевой интерфейс будет не нужен!
Ну не так уж и много, но с пары можно снять.
Прошу помощи у знающих товарищей.
В продолжении предыдущего вопроса ситуация следующая:
Есть ПР200 cam 2 - основной, в котором будет исполняться программа управления и есть ПР200 сам 3 (с двумя модулями расширения по 8 дискретных входов и выходов) который будет исполнять функции модуля расширения на 24 входа_выхода.
(Собственно говоря можно было бы купить модули расширения на 16 входов-выходов и не страдать, но говорят нет возможности.:(
Сетевой интерфейс я сниму с другого ПР200 и установлю в ПР сам 2. Его как понимаю надо будет сделать мастером (перемычками).
Почитав справку овенлоджика принцип понял. Не уверен, что смогу всё настроить без ошибок. И на работе, что бы заняться экспериментами буду только через 2 дня....
Прошу помочь с настройкой.
Во вложении 2 проекта .owle, Проверьте все ли настройки правильно сделаны.
Заранее благодарен:)
Предусмотрите обработку состояний обрыва связи.
В Slave это проверяется получением из мастера постоянно изменяющегося числа, например, секунд из часов реального времени.
В Master - есть отдельная привязываемая переменная состояния связи, но и её можно дополнить аналогичной переменной, принимаемой от Slave.
Чтобы эти переменные меньше мешали обмену, их период опроса в Master можно сделать больше, чем у других - 600-900 мс.
Обработку таких переменных можно сделать как показано у Сергей0308
https://owen.ru/forum/showthread.php...l=1#post470544
Ну и сетевые Slave переменные - в Овен ПР200 общие для всех интерфейсов, т.е. дублировать их не требуется.
А вот здесь (см вложение) всё правильно настроено?
Насчёт дублирования - т.е . можно не указывать переменный в ПР слейв в настройках а просто вытащить макрос на поле проекта?
Не использовал ни запись по разрешению ни по изменению - чтобы избежать неоднозначности из-за периодических обрывов связи из-за помех.
Про дублирование - у Вас в описаниях одноимённых переменных для Slave и Master видны красные кружочки диагностированных ошибок. Имена должны быть разными.
Переменные Slave - общие для всех интерфейсов, т.е. к одной переменной может обратиться Master (не из Вашей ПР, а какой-то другой, посторонний - например, панель оператора) по RS1 и по RS2 и по Ethernet - это будет обращение к одной и той же переменной.
А у Master из ПР интерфейс жёстко определён и это конкретный порт.
Но у каждой переменной должно быть уникальное имя, т.к. иначе невозможно предсказать к какой именно переменной обращение.
И ещё - нет нужды какие-то переменные и читать и записывать - достаточно определиться, что команды только пишутся, а состояния только читаются.
Понял только половину.
Насчёт дублирования вроде разобрался. А вот как сделать проверку на обрыв связи и перезапуск - не понимаю.
Может кто то помочь и в моём проекте настроить как правильно. А я по образцу уже буду знать как надо делать
Мне проще показать на чистом проекте с минимумом всего
Спасибо. Буду разбираться.
И о модулях расширения не забудьте - их тоже нужно проверять на исправность - ПРМ можно привязать переменные контроля исправности.
В справке или в руководстве на ПР или ПРМ это должно быть.
Добрый день всем.
Прошу помочь с решением такой задачи:
Делаю управление дозированием кислоты в бак с эмульсией.
Суть работы ФБ следующая:
Есть дозатор который выдаёт порции кислоты.
И есть объём эмульсии при достижении которого срабатывает дозатор и т.д. повторяется.
500л эмульсии - 2,77л кислоты
Алгоритм:
1 Старт
2 Наполнение ёмкости до минимального зонда
3 После п.2 включается сигнал управления дозатором, который работает пока не нальёт определённый объём (2,77 литра)
4 По импульсу от дозатора сигнал управления снимается. И так повторяется пока не сдозируется необходимое количество порций кислоты (получается по геометрии ёмкости 2 раза.).
5 Затем при накоплении каждых 500л эмульсии дозатор срабатывает 1 раз.
Это у меня получилось сделать.
Затем возникла необходимость частичного слива готового продукта с ёмкости и повторного начала её заполнения с добавлением кислоты по алгоритму.
Вот тут не могу сообразить как правильно это сделать.
ФБ прилагаю. Может у кого то есть желание помочь. Заранее благодарен.
Попробую перевести на человеческий: :rolleyes:
1. Наполняем эмульсией некую ёмкость по расходомеру (вес импульса 500л) до срабатывания "минимального зонда".
2. Выдаем импульсы на дозатор кислоты (вес импульса может меняться) из расчета 2.77л кислоты на 500л налитой по расходомеру эмульсии.
3. Разрешаем частичный слив раствора и ждем сигнала.
4. По сигналу возвращаемся к шагу 1.
Если всё правильно, попробуйте ещё раз самостоятельно составить программу.
У Вас должно получиться! Только не спешите.
Подсказка:
- Считайте накопительно объем эмульсии и кислоты в литрах.
- Когда текущий объём кислоты превысит расчетный от объема эмульсии, процесс завершайте.
- Накопленные объёмы можно не сбрасывать каждый раз при старте. Сбрасывайте в конце смены.
Будет виден общий итог (расход химикатов за смену).
Не совсем так. На дозатор выдаётся не импульс а постоянный сигнал по которому срабатывает его насос. От расходомера в дозаторе приходит импульс, что налито 2.77л (фиксированное количество, не меняется), по нему происходит останов двигателя. Если за один цикл, концентрация не достигнута - цикл повторяется. Далее по одному циклу при наполнении на следующие 500 литров.
Частичный слив - это как потребуется (в это время наполнение остановлено).
ПРоблема у меня, еси обобщить в том, что бы сделать расчёт не от нулевого уровня а от произвольного.
Буду пробовать что то сделать в очередной раз.
И мешалки никакой нет? Ну тогда будет работать если залили до минимума (ну например 50 литров), потом кислоты, потом основной объем (остаток 450 литров). Тогда перемешивание будет. Но при неполном опустошении уже работать не будет, так как тут уже хорошего смешивания основным потоком не произойдет...
нормальный насос-дозатор имеет калиброванный вес импульса подачи и регулируемую частоту впрыска. А хорошие насосы - регулируемые и то и другое через настройки.Цитата:
при достижении которого срабатывает дозатор
Что у вас за насос, которому надо снаружи самостоятельно "делать мозги"?
ну это костыли, нормальная дозация реагента в нормальном химическом процессе так не делается, ктото скроил видимоЦитата:
винтовые насосы дозаторы
ладно не буду душнить :D
Вот пример от произвольного уровня:
Код:function_block grout
var_input
Start, Stop : bool; // Старт/Стоп приготовления
Probe : bool; // Зонд
inEmulsion, inAcid : bool; // Импульсы с расходомеров
end_var
var_output
BatcherEmulsion : bool; // Дозатор эмульсии
BatcherAcid : bool; // Дозатор кислоты
Done : bool; // Раствор готов
end_var
var
OnOff : SYS.RS; // Сотстояние Работа/Ожидание
rtEmulsion, rtAcid : SYS.RTRIG; // Фиксация импульсов
TotalEmulsion, TotalAcid : real; // Накопленные дозы
CalcAcid : real; // Расчетное кол-во кислоты
end_var
rtEmulsion(I := inEmulsion); rtAcid(I := inAcid); // Фиксация импульсов
OnOff(S := Start, R := not Stop); // Пуск/Стоп наведения
if rtEmulsion.Q then
TotalEmulsion := TotalEmulsion + 500; // + доза эмульсии
Done := false; // Новая доза снимает готовность раствора
end_if
if rtAcid.Q then
TotalAcid := TotalAcid + 2.77; // + доза кислоты
Done := false; // Новая доза снимает готовность раствора
end_if
CalcAcid := TotalEmulsion / 500 * 2.77; // Требуемый объем кислоты
if OnOff.Q then // Если наведение включено, ..
BatcherEmulsion := not Probe; // Наполняем эмульсией до зонда
BatcherAcid := Probe and TotalAcid < CalcAcid; // или наполняем кислотой до расчетного объема
Done := not BatcherEmulsion and not BatcherAcid; // Если дозировать больше не надо, сообщим о готовности раствора
else // Если наведение выключено, ..
BatcherEmulsion := false; // то всё выключаем
BatcherAcid := false;
end_if
end_function_block
Насчёт дозатора - это не ко мне. В задании было указано сделать так как я выше написал. Вот и делаю.
Мешалка есть. Включается по срабатыванию минимального зонда.
Спасибо за пример. Изучаю.