PDA

Просмотр полной версии : ПЛК73 - программное чтение настроек портов RS485



kantv
15.09.2016, 12:16
Добрый день всем.

У нас имеется контроллер ПЛК73 с установленным интерфейсным модулем ПИ73-5 (два порта RS485). Потребовалось для удобства оператора считывать в программу настройки портов RS485 (конкретно нужно определить скорость передачи данных) из дерева конфигурации. Для этих параметров нельзя задать символьное имя, как например для входов или выходов. Насколько мне известно в этом случае можно воспользоваться библиотекой Arm7_Specific в которой есть функция Read_By_Hash. Эта функция позволяет считать параметр по его ХЭШ коду.
Проблема в том, что у обоих портов (RS-1 и RS-2) хэш коды параметра "Скорость" совпадают и равны 16#B760. Пробовал считать параметр по данному хэш коду и получал скорость для порта RS-2.
Пример кода на ST:


tmp: POINTER TO PARAMETER_DESCRIPTOR;
str: STRING;

tmp := READ_BY_HASH(16#B760,1);
str := tmp^.name;

Вопросы:
1. А вот как считать значение параметра "Скорость" для порта RS-1?
2. Нормально ли это, что у параметров совпадают хэш-коды?

lara197a
15.09.2016, 12:31
зачем вам так?
Чтение значений доступно с экрана ПЛК в соответствующей ветке
и по сети . Регистры фиксированные. см. в настройках RS-1 в конфигураторе
(рег 330....336)
Обращайтесь к ним на прямую.

kantv
15.09.2016, 17:44
Спасибо за ответ, только я не совсем понял о чем Вы...

Во первых - нужно это для того, чтобы оператор мог из меню контроллера изменить настройки скорости порта 1, а программа могла бы это увидеть и открыть порт с новыми настройками. Порт открывается программно, поскольку реализован программный Modbus Master на этом порту для опроса периферии, а периферия может быть разной.

По поводу того, что параметр скорости порта RS1 можно получить по сети modbus я в курсе (некоторые другие параметры конфигурации получаю с подчиненных контроллеров), но как и зачем мне обращаться по сети Modbus к тому же контроллеру на котором исполняется программа? Вообще возможно ли прочитать контроллеру у самого себя значения регистров Modbus?

А вот про чтение с экрана - это я что-то не совсем понял... могли бы Вы пояснить подробнее как это можно реализовать?

lara197a
15.09.2016, 20:39
У меня сейчас нет ПЛК под рукой,
только если завтра.
и лучше пишите в личку, т.к. я могу не найти этой темы. если будет много др. сообщений.
По поводу открытия порта, вы можете задавать любые данные, для мастера создав к примеру переменные в ветке,
которые потом используете как уставки параметров.
Fix- это подчиненный модуль. Он вам зачем
вы хотите плк сразу и мастером и слейвом сделать?
не хорошее решение.

kantv
16.09.2016, 00:08
Еще раз спасибо за Ваши ответы.

По поводу создания отдельного параметра в ветке пользовательского меню я тоже уже думал, но просто раз уж есть готовые меню в разделе "Конфигурация" в которых представлены все параметры последовательных портов, то хотелось бы использовать их (как то не по людски когда вроде бы одни и те же настройки представлены в различных разделах меню), при этом настройки порта RS2 уже нормально используются операторами (порт RS2 работает в режиме modbus slave, поэтому его настройки применяются "операционной системой" контроллера), то есть оператор уже привык, что настройки последовательных портов как раз в разделе "конфигурация". Но если никаких способов определить программно значения настройки скорость для порта RS1 не получится, то видимо придется делать еще одну отдельную настройку в другой ветку пользовательского меню. Надеюсь все же найдется какой-то вариант получить значение настройки скорости порта RS1 в программе.

По поводу использования контроллера одновременно в качестве мастера и слэйва - Вы правы, именно так и хочу, и уже использую контроллеры ПЛК73 с модулями ПИ73-5. Как раз именно возможность такого использования и была ключевым фактором при выборе контроллера. Сейчас идет тестовая эксплуатация уже в течении 3х месяцев и в целом система работает хорошо, из доработок остаются только всякие удобности в интерфейсе к которым и относится вопрос про изменение скорости порта RS1 из меню контроллера. Система как раз и использует порт RS1 контроллера в режиме программного modbus мастера для обмена данными с периферией в "своем шкафу", то есть в шкафу которым управляет, а на порту RS2 этот же контроллер уже является слэйвом для вышестоящего контроллера (из центрального шкафа управления), который читает из него данные о состоянии подчиненного шкафа. Получается, что центральный шкаф может опрашивать несколько однотипных шкафов по modbus, выдавать им команды в зависимости от состояния всех шкафов в целом (как бы осматривая всю систему сверху и видя все шкафы одновременно). Для опроса подчиненных шкафом на центральном также используется программный режим modbus master на порту RS1, а порт RS2, в свою очередь, опять работает как modbus slave, но уже для вышестоящей SCADA системы. В целом получается очень функционально, унифицированно по компонентам, блокам программного кода и интерфейсу, а также недорого (поскольку в одном недорогом контроллере есть все необходимые компоненты - порты ввода/вывода, экран для отображения текущих значений, последовательные порты RS485 для организации связи на значительном расстоянии), получается, что мы решили все задачи одним контроллером при этом использовав его потенциал где-то на 80-90%, то есть "отбили каждый вложенный в него рубль" :)

lara197a
16.09.2016, 00:56
Так на разных портах без проблеи.