Вход

Просмотр полной версии : ПР-103 Master запись в слейв по Флагу и по порядку взведенных флагов.



geotime
15.03.2024, 13:26
Добрый день.
Использую ПР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), записали новое значение в регистр "фильтра", после чего автоматом активировалась защита от записи) каждая попытка записи заканчивается успешно. Т.е. датчик расхода работает как и написано в даташите.

С уважением Юрий.

Dimensy
15.03.2024, 13:56
А попробуйте так
74382

geotime
15.03.2024, 14:29
Попробовал. Ничего не изменилось. И тут становится интересно почему не срабатывает. Я ставил разную задержку от 0,5 с до 2. Сработал один раз на задержке в 1 сек и всё. Хотя попыток было 15.
Нужно сниффер искать и смотреть, я не понимаю почему не срабатывает как задумывалось.
Услышать бы разработчиков OL (как этим правильно пользоваться и как это устроено), в справке это не очень понятно описано.

Dimensy
15.03.2024, 15:48
Попробовал. Ничего не изменилось. И тут становится интересно почему не срабатывает. Я ставил разную задержку от 0,5 с до 2. Сработал один раз на задержке в 1 сек и всё. Хотя попыток было 15.
Нужно сниффер искать и смотреть, я не понимаю почему не срабатывает как задумывалось.
Услышать бы разработчиков OL (как этим правильно пользоваться и как это устроено), в справке это не очень понятно описано.

А вы когда через OPC пробовали - у вас только эти два регистра были или сервер и другие регистры опрашивал?

geotime
15.03.2024, 16:49
А вы когда через OPC пробовали - у вас только эти два регистра были или сервер и другие регистры опрашивал?

Сервер и другие регистры опрашивал и другие устройства на шине. Но там я же вручную сначала в один регистр записывал, потом в другой. Промежуток между записью был где-то 3-5 сек.

geotime
15.03.2024, 18:48
+контроль связи
+всегда 1 попытка (для контроля связи)
+ST
+автомат*



*
включил разрешение для "один регистр"
дождался связи
выключил разрешение
[возможно дождался "несвязи"]
где-то 3-5 сек.
включил разрешение для "в другой"
дождался связи
выключил разрешение

Как понять что дождался связи? При записи числа в регистр "Write Protect" негде посмотреть оно записалось или нет, так как регистр объявлен Write Only.
Единственное что я могу посмотреть изменилось ли значение в том регистре куда я пишу, и повторить запись.
Я так пробовал, но результат такой же.
Вижу в OL что команда записи равна 1 (счетчик увеличился) теоретически команда защиты от записи должна сработать . Далее взвожу другой флаг на запись значения в сам регистр , если при чтении значения из прибора и значение которое я пытался записать в него не равны, то повторяю (пробовал использовать Blink с разными периодами). Иногда срабатывает (редко), а в основном получаю не прекращающиеся попытки записи. Был бы флаг что запись в регистр прошла успешно- но его вроде нет. И еще по поводу связи - я же из расходомера постоянно считываю значения из других регистров. Собственно и хотел сделать запись только по изменению, а в остальное время только чтение т.к. есть и другие устройства (3 шт.) для чтения на шине.

geotime
15.03.2024, 19:06
смотрите внимательно все окно настроек связи

Если Вы имеете ввиду отслеживать "Статус" прибора - то он у меня тоже заведен на счетчик через триггер - но он не увеличивается. Могу предположить что устройство не отваливается. Или Вы имеете что -то другое? Подскажите74414

geotime
15.03.2024, 19:19
зачем счетчик?
Да так то он не нужен просто уже не знаю куда копать (решил завести статус на счетчик) если был ли бы отвалы датчика то счетчик увеличивался. А что еще полезное я могу увидеть в настройках связи? Таймаут стоит 100 мс. Пробовал увеличивать но это ничего не дает. Да и счетчик (см. выше не растет). Я не отрицаю что может датчик какой то хитро сделанный и команды нужно как то по другому посылать или может нужно еще раз попробовать из OWEN OPC опрашивать ( возможно предыдущий результат был не корректен - "ПОВЕЗЛО" и нужно слать через определенный интервал). Заодно там можно посмотреть и обмен и тайминги.

melky
16.03.2024, 13:44
Записав в регистр разрешение записи вы можете читать этот же регистр?

geotime
18.03.2024, 08:04
Записав в регистр разрешение записи вы можете читать этот же регистр?

Он помечен как Write Only, но даже если читать из него там всегда 0. P.S. Даже если запись в него прошла.

geotime
18.03.2024, 08:27
что поднимает bConnect?
Это переменная Статуса поднимает Мастер если устройство не доступно, а использую его так (это только при отладке)
74454
Светодиод я могу не увидеть. А счетчик при онлайн отладке не должен увеличивается.
вот фото где в переменную записывается https://owen.ru/forum/showthread.php?t=39320&p=432256&viewfull=1#post432256

geotime
18.03.2024, 10:21
?
.................

Из справки "Статус — указание булевской переменной, в которую записывается статус прибора: 1 — устройство функционирует нормально, 0 — связь с устройством потеряна. Переменная выбирается в таблице переменных, которая вызывается нажатием кнопки «...»; и там же
"ПРИМЕЧАНИЕ
Параметры Статус и Опрос служат для отображения и управления связи прибора с опрашиваемыми устройствами. Привязанные переменные можно использовать для визуализации или устранения обрыва связи в логике работы программы."

Но в данном случае проблема не в этом.

melky
18.03.2024, 10:34
Что плохо, это то, что в ПР наверное нет ответов от прибора на запись и возможность их обработки. Допустим регистр только для записи, если запись идет по адресу прибора, то должен быть и ответ на запись (по OPC и сниферу есть/нет?)
И как ловить такие вещи ПР-кой? да никак блин, потому что прибор мягко выражаясь такого не умеет.

geotime
18.03.2024, 11:20
Что плохо, это то, что в ПР наверное нет ответов от прибора на запись и возможность их обработки. Допустим регистр только для записи, если запись идет по адресу прибора, то должен быть и ответ на запись (по OPC и сниферу есть/нет?)
И как ловить такие вещи ПР-кой? да никак блин, потому что прибор мягко выражаясь такого не умеет.
Да в OPC такое есть, и я вижу что запись в регистр Write Protect прошла, а потом прошла запись и в регистр назначения. А в ПР даже если я включу (отложенную на 0.1...2 от команды записи по флагу в регистр WriteProtect) через БЛИНК периодическую запись в регистр назначения ResponseTime это в большинстве случаев ничего не дает. Получается мультивибратор потому что я не знаю, а запись в регистр разрешения записи (Write protect) прошла или нет?

Завтра притащу из дома Логический Анализатор сяду на шину и посмотрю. Да и еще сегодня посмотрел осциллографом на форму сигнала (напомню на шине 4 устройства, длинна всей линии связи 1,5 метра, скорость 38400,1,8,N - сигнал напоминал пики Уральских гор. Подключил терминирующий резистор - все стало как в учебниках и горы сменились равниной. То есть еще одна потенциальная причина минус. Но даже до подключения резистора с ОРС все записывалось. А с ПР и после приведения линии в порядок все также. запись проходит но на 1...20 раз. Причем если отключить периодическую отправку (через БЛИНК) а отправлять вручную с экрана HMI ( он на другом интерфейсе) то значения иногда меняются при меньшем количестве попыток записи.

Скрины из OPC
Запись в регистр разрешения записи
74460

Запись в регистр назначения
74461

melky
18.03.2024, 11:30
Предположу, что так как ПР в режиме мастера еще что-то читает, и при этом читает он всего по одному регистру и есть вся проблема..
Вообще его сделали так, что он живет своей жизнью. Ну почему нельзя было сделать запись и чтение по импульсу переменной лично я не догоняю?...

Дали импульс, дождались флага "я прочитал" ответ ОК, запускаем чтение следующей переменной. Нет, все смешали в кучу, период поставь на все и никакой толком слежки кроме отсутствия связи.

В общем как мастер ПР гавно, простите за мой французский.

geotime
18.03.2024, 12:20
Предположу, что так как ПР в режиме мастера еще что-то читает, и при этом читает он всего по одному регистру и есть вся проблема..
Вообще его сделали так, что он живет своей жизнью. Ну почему нельзя было сделать запись и чтение по импульсу переменной лично я не догоняю?...

Дали импульс, дождались флага "я прочитал" ответ ОК, запускаем чтение следующей переменной. Нет, все смешали в кучу, период поставь на все и никакой толком слежки кроме отсутствия связи.

В общем как мастер ПР гавно, простите за мой французский.

Ну не соглашусь. У меня ПР 103 и у него есть и запись по булевой переменной и чтение (это всё можно настроить ) Да и групповую запись и чтение он поддерживает вот пример чтения 5 регистров
74464

Да и функция записи у него групповая есть. Там конкретно у этого расходомера разрывы в 20 единиц между регистрами. А вот это в ПР по-моему не настраивается.

geotime
18.03.2024, 13:07
Что такое?

Остановите всех
Дождитесь потери связи
Разрешите одному
Дождитесь связи. Которая является (чем) ?
Ну это же из справки на OL, зачем мне что-то останавливать если обрыва связи нет? Это просто переменная есть связь с устройством или нет (если я физически отключу линию 485 от расходомера она станет в 0). Еще раз у меня нет потерь связи - это просто была проверка теории что может он не отвечает некоторое время после записи переменной WriteProtect? Она оказалось ложной, устройство не отваливается так как счетчик не растет. И еще можно у Вас спросить как вообще отлаживать ФБ на ST в ПР? Я не нашел такого функционала. Или ставить Codesys и отлаживать ФБ на ST в нем, а потом переносить в OL?

geotime
07.04.2024, 22:35
Вообще его сделали так, что он живет своей жизнью. Ну почему нельзя было сделать запись и чтение по импульсу переменной лично я не догоняю?...

Дали импульс, дождались флага "я прочитал" ответ ОК, запускаем чтение следующей переменной. Нет, все смешали в кучу, период поставь на все и никакой толком слежки кроме отсутствия связи.

В общем товарищ melky был прав. В моем случае остро не хватает флага что запись в регистр прошла успешно. Мастер ставит команду на запись не сразу, а по какому то ему известному алгоритму. В снифере видно что она записывается когда как. Для себя победил следующим образом - удерживаю флаг снятия защиты 100 мс, после чего через 500 мс поднимаю на 100 мс флаг записи в сам регистр. (тайминги подбирал экспериментально).