PDA

Просмотр полной версии : Master SCADA 3 + МУ 110-32Р: не переключаются выходы



Abr
08.12.2023, 14:20
Здравствуйте, товарищи.
Помогите, пожалуйста, нубу.

Ситуация: есть комп, есть МУ 110-32Р, есть преобразователь USB<->RS-485. Надо с компа этим модулем рулить, "перещёлкивая" выходы.

Соединяю интерфейсы, подаю питание, читаю данные "Конфигуратором М110", всё ОК, связь есть.
Ставлю Owen OPC Server (последний, с сайта owen.ru). Подцепляю туда МУ 110-32Р по протоколу ModBus-RTU. Всё цепляется, всё видится. Успешно "щёлкаю" выходы на вкл/выкл из Owen OPC Server прямой записью значения 1000 в Holding Registers [0] - Holding Registers [13] (я так понял 1000 - это параметр ШИМ на выходе: от 0 до 100% с дискретностью 0,1%, т.е. 0 - "всегда выкл", 1000 - "всегда вкл"). Столь же успешно "щёлкаю" выходы битовой маской (Holding Regsters [97]). Всё ОК, всё работает, МУ 110-32Р отрабатывает ровно то, что должен.

Далее - ставлю Master SCADA 3 (тоже последнюю, с их сайта). Подцепляю в неё Owen OPC Server, оттуда делаю импорт переменных "Значение выхода №N" и "Битовая маска значений выходов". Сперва надо подёргать выходы "руками". Т.е. запускаю проект, встаю на "Значение выхода №6" (как пример), открываю вкладку "Данные выхода", жму кнопку "Установить значение", ввожу "1000", и - болт. Ну, т.е. значение-то в поле меняется, но вход не включается. С битовой маской - аналогично. Эксперимент повторяется многократно с одинаковым результатом.

ОК, думаю, мож где-то между Master SCADA и Owen OPC Server есть какие-то проблемы совместимости или конфликты версий. Ставлю MasterOPC Universal ModBus Server Demo 32 (Build .0.33, если это важно). Добавляю туда устройство с заведомо правильными параметрами порта и сетевого адреса. Добавляю устройству два тега с адресами 0 и 97 (0х0061). Пишу в них руками значения 1000 и 1 соответственно - первый вход включается. И сбрасывается при записи значения 0. Т.е. этот OPC тоже отрабатывает корректно.

Создаю новый проект в Master SCADA. Подцепляю туда MasterOPC Universal ModBus Server, импортирую оба тега. Запускаю проект. Пишу в теги те же значения. Результат - болт.

Причём в процессе экспериментов было такое, что Master SCADA смогла включить/выключить вход, но во-первых - с большооооой задержкой, а во-вторых - абсолютно стохастически. Т.е. несколько раз получилось вкл/выкл, а потом - всё, никак.

Что я делаю не так, или о чём мне надо знать?
Спасибо заранее.

Abr
11.12.2023, 09:39
Кажется: понял, в чём было дело: надо данные менять на вкладке "данные входа", а не "данные выхода". Тогда из MasterSCADA выходы "перещёлкиваются":
72277722787227972280

SCADAMaster
11.12.2023, 10:07
Сделайте команду в дереве объектов, и ее свяжите с ОРС тегом. И пишите соответственно в команду.

Abr
11.12.2023, 11:32
Эм... Не совсем понял (я пока - очень нуб в SCADA и смежных темах). Это как? Связал команду с тегом drag-n-drop'ом - а дальше?
В идеале - мне надо, чтоб по кнопке на мнемосхеме выход модуля перещёлкивался на вкл/выкл.
Если расскажете, как сделать, или ткнёте в толковый мануал - буду крайне признателен.

SCADAMaster
11.12.2023, 11:54
Посмотрите наш онлайн-курс - там все это показано:
https://stepik.org/course/104810/info?auth=login

Abr
12.12.2023, 10:34
Благодарю, курс стОящий, многие вопросы автоматически отпали по мере освоения.

В общем - по плану-минимуму я победил.

Опишу здесь, что и как. Может быть: кому-то поможет, у кого аналогичная задача стоит.
Сразу только условимся, что я - нуб, и задача решена "в лоб" и совершенно неэлегантно. Вероятно: я сам над её решением буду истово ржать, спустя какое-то время, когда в материале лучше разберусь.

Вводная:
1. То ли лыжи не едут, то ли какой-то конфликт версий, но с Owen OPC Server работает нестабильно: иногда выход остаётся "висеть" включенным, несмотря на отжатую кнопку и значение "0" на выходе переменной, и наоборот - не включается, хотя кнопка нажата, и в переменную записалось значение "1000" (допускаю, что где-то накосячил и недоразобрался с обратными связями). В то же время при работе через MasterOPC Universal ModBus Server - всё ОК, всё переключается стабильно. Поэтому работать будем через MasterOPC Universal ModBus Server;
2. Будем полагать, что к решению задачи мы подходим, уже зная, на каком порту, с какими параметрами связи и с каким сетевым номером висит наша исполнительная железяка (просто оставим необходимость с этим разбираться за рамками темы, т.к. ответ будет слишком "раздут"). Поясним только, что в нашем случае это RS-485, COM20, 9600/8/N/1, сетевой номер 16;
3. Будем полагать, что к решению задачи мы подходим с уже созданным описанием исполнительного устройства в MasterOPC Universal ModBus Server, и знаем, что в какие регистры надо писать, почему это именно так, и какова разрядность данных. Поясним, что в случае с МУ 110-32Р значения всех 32 выходов лежат в регистрах ModBus с адресами с 0 по 31 [0x1F]. Это описано на 38й странице мануала. Соответственно - в MasterOPC Universal ModBus Server теги у нас будут с соответствующими адресами и разрядностью;
4. Будем полагать, что решающий задачу прошёл первый раздел вышеприведённых курсов, и уже ориентируется в интерфейсе MasterSCADA и базовых элементах. Если нет, то - надо это устранить.

Решение:
1. Запускаем MasterOPC Universal ModBus Server и MasterSCADA, делаем новый проект.
2. Подцепляем в Систему MasterSCADA MasterOPC Universal ModBus Server, создаём объект, назначаем объекту компьютер, и импортируем в компьютер три тега с нашего устройства (если надо "дёргать" больше, чем тремя выходами - тегов в OPC надо создавать больше, и импортировать, соответственно, тоже не три, а столько, сколько надо):
72320
3. Добавляем в Объект три команды и три расчёта, даём осмысленные имена, тип команд меняем на "дискретный":
72322.
4. Связываем теги Системы с соответствующими расчётами Объекта (тащим drag-n-drop'ом теги на расчёты):
72323
5. Задаём формулы для расчётов. На вход расчёта подаём наши команды (на вход первого расчёта - первую команду, на вход второго - вторую, и т.д.), с выхода расчёта будем снимать значение вычисления по формуле, где вход умножается на 1000 (т.к. 0 в регистре - это значение ШИМ на соответствующем выходе "всегда выключено", а 1000 в регистре - это значение ШИМ на соответствующем выходе "всегда включено"). Убеждаемся, что у входа формулы тип данных подтянулся "логический":
72324
6. Создаём объекту мнемосхему. На мнемосхему тащим наши команды drag-n-drop'ом правой кнопкой мыши и назначаем им отображение "кнопка". Меняем кнопкам на мнемосхеме надписи на осмысленные. Меняем кнопкам флаг "Кнопка с фиксацией" на "Истина":
72325
7. Сохраняем проект. Запускаем. Переходим на мнемосхему. Тыкаем в кнопки, смотрим на МУ 110-32Р. Наблюдаем соответствие. Приходим в состояние глубокого удовлетворения :)
7232672327723287232972330

Если что-то не так - идём проверять типы данных, соответствие выходов расчётам, формулы.

SCADAMaster
12.12.2023, 11:36
Сделайте проще.
В ОРС сервере поставьте у тегов тип данных в сервере - BOOL. Включите пересчет и задайте коэффициент А=0.001. Это избавит вас от необходимости делать умножение на 1000 в скаде.
В скаде удалите сервер и добавьте теги заново.
Создайте команду, установите тип дискретный. Затем используйте команду с обратной связью. Для этого у*команды, на вкладке "Опрос выхода" есть поле "Обратная*связь" - перетащите в это поле ОРС переменную или выход ФБ "Повторитель" (что лучше), а выход команды заведите на вход ОРС переменной. В этом случае команда будет отображать значения приходящие по обратной связи, а вводимые оператором значения будут поступать на выход команды. Также на вкладке "Опрос" можно снять галочку "Не передавать данные обратной связи" в этом случае поступающие по обратной связи значения будут идти на выход команды.
Команду перетащите на мнемосхему - она станет кнопкой. В свойствах кнопки включите фиксацию.

Подробнее описано на нашем онлайн курсе (ссылка в подписи), раздел 2.5 шаг 6.