Просмотр полной версии : ПР-103 Master запись в слейв по Флагу и по порядку взведенных флагов.
Добрый день.
Использую ПР103 (Master) и датчик расхода (Slave). Из даташита на датчик расхода - "Для изменения значения "Глубина фильтра" в датчике требуется сначала записать число (НЕХ 0хAA55) или (Int16 -21931) или Udin 43605 в OWEN LOGIC в так называемый регистр защиты от записи (WRITE PROTECT), после чего произвести запись в регистр "Глубина фильтра" нового значения.
"Функция WRITE PROTECT отключает регистр с защитой от записи и дает возможность изменять значение соответствующего регистра.
Например, для изменения коэффициента преобразования пользователю необходимо отправить значение 0xAA55 в регистр 0x0016, и только после этого включается функция
записи (функция защиты от записи соответственно отключается). После выполнения записи ПО автоматически активирует функцию защиты от записи".
Создал макрос74376
Но попытки изменения значения в регистре проходят случайным образом.
74377
74378
На 5-10 попыток записи бывает проходит одна-две. Как я понимаю команды на запись идут не последовательно как я взвожу флаги.
Но как это поправить ума не приложу.
Настройки регистров в мастере такие
74379
74380
как правильно пользоваться этим.
74381
Разве они не противоречат друг другу? Как можно периодически писать по таймеру, по изменению и флагу(вернее можно, но как это работает в действительности). Как ставится запись в очередь по флагу? Соблюдается ли порядок добавления в очередь записи по флагу (допустим в этом цикле поступил запрос на запись 1 регистра, а следующем 2-го регистра, как они встанут в очередь записи?) ?
P.S. >Если делать вручную из OPC сервера OWEN ( сняли защиту от записи (43605), записали новое значение в регистр "фильтра", после чего автоматом активировалась защита от записи) каждая попытка записи заканчивается успешно. Т.е. датчик расхода работает как и написано в даташите.
С уважением Юрий.
Попробовал. Ничего не изменилось. И тут становится интересно почему не срабатывает. Я ставил разную задержку от 0,5 с до 2. Сработал один раз на задержке в 1 сек и всё. Хотя попыток было 15.
Нужно сниффер искать и смотреть, я не понимаю почему не срабатывает как задумывалось.
Услышать бы разработчиков OL (как этим правильно пользоваться и как это устроено), в справке это не очень понятно описано.
Попробовал. Ничего не изменилось. И тут становится интересно почему не срабатывает. Я ставил разную задержку от 0,5 с до 2. Сработал один раз на задержке в 1 сек и всё. Хотя попыток было 15.
Нужно сниффер искать и смотреть, я не понимаю почему не срабатывает как задумывалось.
Услышать бы разработчиков OL (как этим правильно пользоваться и как это устроено), в справке это не очень понятно описано.
А вы когда через OPC пробовали - у вас только эти два регистра были или сервер и другие регистры опрашивал?
А вы когда через OPC пробовали - у вас только эти два регистра были или сервер и другие регистры опрашивал?
Сервер и другие регистры опрашивал и другие устройства на шине. Но там я же вручную сначала в один регистр записывал, потом в другой. Промежуток между записью был где-то 3-5 сек.
+контроль связи
+всегда 1 попытка (для контроля связи)
+ST
+автомат*
*
включил разрешение для "один регистр"
дождался связи
выключил разрешение
[возможно дождался "несвязи"]
где-то 3-5 сек.
включил разрешение для "в другой"
дождался связи
выключил разрешение
Как понять что дождался связи? При записи числа в регистр "Write Protect" негде посмотреть оно записалось или нет, так как регистр объявлен Write Only.
Единственное что я могу посмотреть изменилось ли значение в том регистре куда я пишу, и повторить запись.
Я так пробовал, но результат такой же.
Вижу в OL что команда записи равна 1 (счетчик увеличился) теоретически команда защиты от записи должна сработать . Далее взвожу другой флаг на запись значения в сам регистр , если при чтении значения из прибора и значение которое я пытался записать в него не равны, то повторяю (пробовал использовать Blink с разными периодами). Иногда срабатывает (редко), а в основном получаю не прекращающиеся попытки записи. Был бы флаг что запись в регистр прошла успешно- но его вроде нет. И еще по поводу связи - я же из расходомера постоянно считываю значения из других регистров. Собственно и хотел сделать запись только по изменению, а в остальное время только чтение т.к. есть и другие устройства (3 шт.) для чтения на шине.
смотрите внимательно все окно настроек связи
Если Вы имеете ввиду отслеживать "Статус" прибора - то он у меня тоже заведен на счетчик через триггер - но он не увеличивается. Могу предположить что устройство не отваливается. Или Вы имеете что -то другое? Подскажите74414
зачем счетчик?
Да так то он не нужен просто уже не знаю куда копать (решил завести статус на счетчик) если был ли бы отвалы датчика то счетчик увеличивался. А что еще полезное я могу увидеть в настройках связи? Таймаут стоит 100 мс. Пробовал увеличивать но это ничего не дает. Да и счетчик (см. выше не растет). Я не отрицаю что может датчик какой то хитро сделанный и команды нужно как то по другому посылать или может нужно еще раз попробовать из OWEN OPC опрашивать ( возможно предыдущий результат был не корректен - "ПОВЕЗЛО" и нужно слать через определенный интервал). Заодно там можно посмотреть и обмен и тайминги.
Записав в регистр разрешение записи вы можете читать этот же регистр?
Записав в регистр разрешение записи вы можете читать этот же регистр?
Он помечен как Write Only, но даже если читать из него там всегда 0. P.S. Даже если запись в него прошла.
что поднимает bConnect?
Это переменная Статуса поднимает Мастер если устройство не доступно, а использую его так (это только при отладке)
74454
Светодиод я могу не увидеть. А счетчик при онлайн отладке не должен увеличивается.
вот фото где в переменную записывается https://owen.ru/forum/showthread.php?t=39320&p=432256&viewfull=1#post432256
?
.................
Из справки "Статус — указание булевской переменной, в которую записывается статус прибора: 1 — устройство функционирует нормально, 0 — связь с устройством потеряна. Переменная выбирается в таблице переменных, которая вызывается нажатием кнопки «...»; и там же
"ПРИМЕЧАНИЕ
Параметры Статус и Опрос служат для отображения и управления связи прибора с опрашиваемыми устройствами. Привязанные переменные можно использовать для визуализации или устранения обрыва связи в логике работы программы."
Но в данном случае проблема не в этом.
Что плохо, это то, что в ПР наверное нет ответов от прибора на запись и возможность их обработки. Допустим регистр только для записи, если запись идет по адресу прибора, то должен быть и ответ на запись (по OPC и сниферу есть/нет?)
И как ловить такие вещи ПР-кой? да никак блин, потому что прибор мягко выражаясь такого не умеет.
Что плохо, это то, что в ПР наверное нет ответов от прибора на запись и возможность их обработки. Допустим регистр только для записи, если запись идет по адресу прибора, то должен быть и ответ на запись (по OPC и сниферу есть/нет?)
И как ловить такие вещи ПР-кой? да никак блин, потому что прибор мягко выражаясь такого не умеет.
Да в OPC такое есть, и я вижу что запись в регистр Write Protect прошла, а потом прошла запись и в регистр назначения. А в ПР даже если я включу (отложенную на 0.1...2 от команды записи по флагу в регистр WriteProtect) через БЛИНК периодическую запись в регистр назначения ResponseTime это в большинстве случаев ничего не дает. Получается мультивибратор потому что я не знаю, а запись в регистр разрешения записи (Write protect) прошла или нет?
Завтра притащу из дома Логический Анализатор сяду на шину и посмотрю. Да и еще сегодня посмотрел осциллографом на форму сигнала (напомню на шине 4 устройства, длинна всей линии связи 1,5 метра, скорость 38400,1,8,N - сигнал напоминал пики Уральских гор. Подключил терминирующий резистор - все стало как в учебниках и горы сменились равниной. То есть еще одна потенциальная причина минус. Но даже до подключения резистора с ОРС все записывалось. А с ПР и после приведения линии в порядок все также. запись проходит но на 1...20 раз. Причем если отключить периодическую отправку (через БЛИНК) а отправлять вручную с экрана HMI ( он на другом интерфейсе) то значения иногда меняются при меньшем количестве попыток записи.
Скрины из OPC
Запись в регистр разрешения записи
74460
Запись в регистр назначения
74461
Предположу, что так как ПР в режиме мастера еще что-то читает, и при этом читает он всего по одному регистру и есть вся проблема..
Вообще его сделали так, что он живет своей жизнью. Ну почему нельзя было сделать запись и чтение по импульсу переменной лично я не догоняю?...
Дали импульс, дождались флага "я прочитал" ответ ОК, запускаем чтение следующей переменной. Нет, все смешали в кучу, период поставь на все и никакой толком слежки кроме отсутствия связи.
В общем как мастер ПР гавно, простите за мой французский.
Предположу, что так как ПР в режиме мастера еще что-то читает, и при этом читает он всего по одному регистру и есть вся проблема..
Вообще его сделали так, что он живет своей жизнью. Ну почему нельзя было сделать запись и чтение по импульсу переменной лично я не догоняю?...
Дали импульс, дождались флага "я прочитал" ответ ОК, запускаем чтение следующей переменной. Нет, все смешали в кучу, период поставь на все и никакой толком слежки кроме отсутствия связи.
В общем как мастер ПР гавно, простите за мой французский.
Ну не соглашусь. У меня ПР 103 и у него есть и запись по булевой переменной и чтение (это всё можно настроить ) Да и групповую запись и чтение он поддерживает вот пример чтения 5 регистров
74464
Да и функция записи у него групповая есть. Там конкретно у этого расходомера разрывы в 20 единиц между регистрами. А вот это в ПР по-моему не настраивается.
Что такое?
Остановите всех
Дождитесь потери связи
Разрешите одному
Дождитесь связи. Которая является (чем) ?
Ну это же из справки на OL, зачем мне что-то останавливать если обрыва связи нет? Это просто переменная есть связь с устройством или нет (если я физически отключу линию 485 от расходомера она станет в 0). Еще раз у меня нет потерь связи - это просто была проверка теории что может он не отвечает некоторое время после записи переменной WriteProtect? Она оказалось ложной, устройство не отваливается так как счетчик не растет. И еще можно у Вас спросить как вообще отлаживать ФБ на ST в ПР? Я не нашел такого функционала. Или ставить Codesys и отлаживать ФБ на ST в нем, а потом переносить в OL?
Вообще его сделали так, что он живет своей жизнью. Ну почему нельзя было сделать запись и чтение по импульсу переменной лично я не догоняю?...
Дали импульс, дождались флага "я прочитал" ответ ОК, запускаем чтение следующей переменной. Нет, все смешали в кучу, период поставь на все и никакой толком слежки кроме отсутствия связи.
В общем товарищ melky был прав. В моем случае остро не хватает флага что запись в регистр прошла успешно. Мастер ставит команду на запись не сразу, а по какому то ему известному алгоритму. В снифере видно что она записывается когда как. Для себя победил следующим образом - удерживаю флаг снятия защиты 100 мс, после чего через 500 мс поднимаю на 100 мс флаг записи в сам регистр. (тайминги подбирал экспериментально).
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot