Симуляция контроллера и утилита IO Switchboard

Симуляция контроллера нужна, если самого контроллера в наличие нет, или ещё нет. А писать программу уже надо! Или необходимо проимитировать работу программы существующего объекта.

Сразу возникает вопрос: а как же имитировать входные-выходные сигналы?  А если входной сигнал имеет сложный закон изменения во времени? Именно для этого и создан IO Switchboard.

Итак, попробуем, как оно работает:

Рисунок 1 — Создание проекта

Создаём новый проект в Automation Studio. В примере использована версия AS4.2

Рисунок 2 — Имя проекта

Как обычно, задаём имя проекта

Рисунок 3 — Определить устройства вручную
Рисунок 4 — Добавить контроллер

Добавляем в проект контроллер X20CP1585. Галочки «Use automation runtime simulation» и «Activate simulation» я не ставил.

Рисунок 5 — Активируем симуляцию

Нажав на кнопку с изображением светофора активируем симуляцию.

Рисунок 6 — Статус контроллера

В статусной строке (внизу справа) проверим, запустился ли процесс симуляции. В нашем случае — «RUN» — всё нормально.

Рисунок 7 — Дерево компонентов

Добавим к нашему контроллеру пару модулей: X20AI4622 — модуль аналоговых входов и X20AO2622 — модуль аналоговых выходов

Рисунок 8 — Загрузка проекта в контроллер

Нажав кнопочку «Transfer» загрузим проект в контроллер

Рисунок 9 — Добавление Simulation Device

К интерфейсу ETH добавим специальное устройство SimDevice

Рисунок 10 — Описание глобальных переменных

Для нашей программы определим массив типа INT

Рисунок 11- Конфигурация модуля

Далее, настроим наши модули. Кликнув правой кнопкой мыши по модулю вызовем конфигурацию (Configuration). В поле Simulation device выберем устройство SimDevice (его мы добавили ранее, см рис. 9)

Рисунок 12 — IO mapping

Привяжем к каналам входов-выходов модулей (IO Mapping) переменные. К тем каналам ввода-вывода, которые мы будем симулировать, нужно применить симуляцию — поставить галочку в столбике Simulate.

Рисунок 13 — IO mapping

То же (добавить SimDevice и привязать переменные) нужно сделать и со вторым модулем.

Примечание: можно симулировать каналы ввода-вывода выборочно. И даже на реальном контроллере. Таким образом, даже на работающем оборудовании, не имея, к примеру какого-либо датчика, или для того, чтобы проверить выходные сигналы имитацией, можно пользоваться этим механизмом.

Рисунок 14 — Программа

Теперь добавим и напишем такую нехитрую программу (в примере Automation Basic). Смысл такой: со входа buffer[0] к сигналу прибавляем 5 и кладём на выход buffer[8]

Рисунок 15 — Transfer

Заливаем проект в контроллер

Рисунок 16 — IO Switchboard

Запускаем утилиту имитации ввода-вывода IO Switchboard

Рисунок 17 — Кнопка RUN

Нажав на кнопку Run программа io switchboard свяжется с виртуальным контроллером и считает из него имитируемые вводы-выводы

Рисунок 18 — Считанные каналы ввода-вывода

Перетягиваем канал AnalogInput01 в поле Board1 (к этому каналу в нашем проекте привязана переменная buffer[0])

Рисунок 19 — Настройки поля отображения

Теперь нужно немного настроить поле отображения:

  • минимум-максимум канала
  • добавить graph
  • минимум-максимум graph
  • signal (здесь задаём файл-источник сигнала. Какой файл — см. ниже)
Рисунок 20 — Файл — закон изменения сигнала

В этом файле в виде xml-таблицы описываем закон изменения сигнала. Х — это время, Y — значения сигнала.

Рисунок 21 — Поле отображения канала вывода

Точно так же перетягиваем и настраиваем поле отображения канала вывода AnalogOutput01

Рисунок 22 — Циклическое выполнение

Нажав на кнопку с изображением синей стрелки запускаем циклическое выполнение симуляции

Рисунок 23 — Работа симуляции

Результат! IO Switchboard по закону изменения сигнала из файла имитирует входной сигнал. Этот входной сигнал обрабатывается программой виртуального (симулированного) контроллера и обработанное значение выводится на аналоговый выход модуля (тоже симулированный). Программа IO Switchboard рисует график выходного сигнала.

 

Доступ к переменным контроллера через PVI → DDE server → в Эксель

Привет! Недавно столкнулся с задачей быстро показать результаты работы программы, работающей в контроллере B&R. Причём в виде графиков. Самый простой и быстрый путь — через PVI — DDE — в Excel.

Итак, теперь подробнее. Сразу замечу, что тип контроллера не имеет значения. Лишь бы это был контроллер фирмы B&R и у него на Ethernet-интерфейсе работал PVI. В 95% случаев PVI-таки работает 🙂

Внимание! PVI manager имеет таймаут коннекта в триал режиме! Полчаса оно поработает, а потом надо перезапускать PVI Manager. Ну, или покупать лицензию.

1. Устанавливаем PVI Development из установочного диска AS (раздел Automation Net Kit)
(можно установить всё из раздела PVI)

2. Запускаем PVI DDE Server

3. Настраиваем девайс (их должно быть 2 с одинаковыми настройками):
один с вашим именем,
второй — с именем device
Options→ Device Parameters:

настройки устройств pvi dde server

4. Прописываем переменные. File → Edit Configuration

cpu1301:#cp1301{},ERR=»E#»;
sStep:»CPU{/DAIP=10.1.10.51 /REPO=11159}/tcpServ/sStep», RF=1,DA=cpu1301;
ItemDiag:»CPU{/DAIP=10.1.10.51 /REPO=11159}/errDiag», RF=1;
aiG:»CPU{/DAIP=10.1.10.51 /REPO=11159}/aiG», RF=1;

Эти настройки прописываются в файлах
ProgamFiles/BrAutomation/PVI/V4.2/PVI/Cfg/
PviDDE.ini
PviDDE_Ina2.cfg

Сохраняем. Всё, должно работать.

Если перейти в Display → Variables, то появится список переменных.
Двойной клик по переменной и откроется окошко со значением.

5. При активном соединении PVI DDE Server получить значения в Экселе проще простого.

Просто пишем формулу:
=PVIDDE|cpu1301!sStep

6. Чтобы записать значение, нужно прописать макрос:
(пример под VBA)

ChannelNumber = Application.DDEInitiate(«PVIDDE», «cpu1301»)
Set SendValue = Worksheets(«Лист1»).Range(«D8»)
Application.DDEPoke ChannelNumber, «aiG», SendValue
Application.DDETerminate ChannelNumber

7. Примечание: чтобы корректно отображалась дробная часть необходимы следующие настройки региональных стандартов:
Разделитель дробной части = «.» (точка)
Разделитель групп разрядов = «,» (запятая)

Привет, мир!

Добро пожаловать в блог Микротех.zp.ua. Очень скоро здесь появится много интересного, полезного и даже умного :))))