PDA

Просмотр полной версии : ПР200 Modbus RTU exception request



Евгений Ш
10.08.2022, 13:36
Добрый день.

Появилась необходимость при записи сетевых переменных в контроллер или частотник (стороннего производителя) контролировать вариант получения кода ошибки - значение может быть вне диапазона вводимых значений, устройство в работе, время регистрации пользователя истекло и т.д. Например, отправив запрос 01 06 00 01 00 04 CRC16, могу получить ответ 01 86 12 CRC16, где 12 - это код ошибки. Возможно функционала ПР200 недостаточно и необходимо применить ПЛК, но сейчас выполнить замену не представляется возможным. Есть ли какой-либо способ получать exception request? Вариант с контролем вводимых/отправляемых команд в теле программы слишком громоздок и присутствует возможность упустить одно из некорректных значений.

Евгений Ш
10.08.2022, 15:23
Судя по всему мне нужно анализировать переменную выбранную в поле "Статус". По-быстрому подключил контроллер Comap к ИП120 (что было на руках) и получил следующее: запись регистра выполняю с галкой "по изменению" - запись идет нормально, при выходе за диапазон сетевого параметра в статусе получаю значение "4". Вроде как это я и искал. При попытке записи уже нормального значения (всю запись делаю через ввод с дисплея) статус не сбрасывается. Допустимый диапазон параметра от 0 до 500 - я в него попадаю. Использование флага принудительной записи не помогает.

kondor3000
10.08.2022, 15:47
Не понятно, откуда у вас берётся эта ошибка?
Можно применить макрос Limit (fLimit) и в ПР ограничить пределы вводимого значения или например макрос Scale. Всё, что не попало в предел, обрабатывать как ошибку.
Если используете макросы преобразования сопротивлений в температуру, то в макросе есть ошибка выхода за пределы.

Евгений Ш
10.08.2022, 15:58
Есть ограничения на ввод значений параметров при работающем устройстве или при необходимости повторного ввода пароля пользователя. Ограничение ввода значений удобно реализовано инструментами Овен - это бесспорно, но хотелось бы применить контроль исключительных ситуаций для 100% контроля записываемых значений.

Евгений Ш
10.08.2022, 16:53
Похоже, что рабочим вариантом является снятие галочки "запись по изменению значения" и попеременные команды чтения и записи (через ФБ генератора импульсов). Приложил проект. Может есть менее изощренный вариант? Родился еще один вопрос: как можно остановить цикл попытки записи конкретного регистра? Подозреваю, что при записи большого числа сетевых переменных будут возникать большие паузы, т.к.
"Запуск записи — назначается командная переменная булевского типа (командная переменная) для принудительной записи настраиваемой переменной: если значение командной переменной меняется с 0 на 1, мастер инициирует запрос на запись, после успешного выполнения запроса значение командной переменной автоматически меняется с 1 на 0;".

kondor3000
10.08.2022, 19:13
Похоже, что рабочим вариантом является снятие галочки "запись по изменению значения" и попеременные команды чтения и записи (через ФБ генератора импульсов). Приложил проект. Может есть менее изощренный вариант? Родился еще один вопрос: как можно остановить цикл попытки записи конкретного регистра? Подозреваю, что при записи большого числа сетевых переменных будут возникать большие паузы, т.к.
"Запуск записи — назначается командная переменная булевского типа (командная переменная) для принудительной записи настраиваемой переменной: если значение командной переменной меняется с 0 на 1, мастер инициирует запрос на запись, после успешного выполнения запроса значение командной переменной автоматически меняется с 1 на 0;".

По моему вы в дебри полезли, у людей сотни переменных читаются, пишутся без проблем, в вашем случае возможны проблемы, если запись начнётся и отключится.
Записывать переменные по изменению, это нормально.
Упаковывайте булевые переменные в маски по 16 шт, если очень критично, можно передавать Float, не через 2, а через один регистр, умножая на 10 и конвертируя в целочисленное, при получении конвертируете обратно и делите на 10 ( в панелях типа СП3ХХ, ИП320, просто ставите 1 знак после запятой). Так можно сократить кол-во передаваемых регистров в десятки раз.

melky
10.08.2022, 20:43
kondor3000 человек при помощи ИПП120 или ПР200 пишет и читает в ДРУГОЕ. А не наоборот... а они не умеют групповые запросы так что на счет сотен + запись постоянно тут не про них...

Евгений Ш
10.08.2022, 20:46
Я Вас прекрасно понял, спасибо. Знаком с этими макросами и часто использую. Проблема не в количестве данных и упаковке, а обработке исключений при записи регистров от мастера (ПР200) в контроллер, в котором, например, есть уровни доступа - в случае, если таймаут истек - я должен ввести пароль. Есть ситуации, когда запись регистра будет временно заблокирована контроллером, чтобы не нарушать технологический процесс.