В этом примере показано, как связаться с устройствами EtherCAT с помощью Beckhoff цифровые терминалы EL1004 и EL2004 ввода-вывода.
Чтобы запустить этот пример, вам нужна сеть EtherCAT, которая состоит из целевого компьютера как Ведущее устройство EtherCAT и два аналоговых входа / выходные терминалы EL1004 и EL2004 как Ведомые устройства EtherCAT. Этот пример требует специализированной сетевой платы, которая установлена и доступна на целевом компьютере. Используйте специализированную карту в коммуникации EtherCAT. Специализированная карта в дополнение к карте, используемой в подключении Ethernet между разработкой и целевыми компьютерами.
Протестировать эту модель:
Соедините сетевой порт специализированной карты в целевом компьютере к порту сети IN разветвителя Beckoff® EK1100.
Соберите терминалы EL1004 и EL2004 с разветвителем EK1100.
Цикл поддерживает первые два порта I/O: Соединитесь порты пронумеровали 1, и 5 из Терминала EL2004 к портам пронумеровали 1 и 5 из Терминала EL1004.
Убедитесь, что терминалы предоставляются необходимым источником питания на 24 вольта.
Создайте и загрузите модель на цель.
Для полного примера, который конфигурирует сеть EtherCAT, конфигурирует модель главного узла EtherCAT и создает, затем запускает приложение реального времени, смотрите Simulink Real-Time документация EtherCAT.
Чтобы открыть модель, в Командном окне, введите:
Эта модель управляет импульсным сигналом волны и передает сигнал и его инверсию как булевы значения к терминалу EL2004, и получает входной сигнал, переданный терминалом EL1004.
Блок инициализации EtherCAT требует, чтобы настройка файл ENI присутствовала в текущей папке. Скопируйте конфигурационный файл в качестве примера от папки в качестве примера до текущей папки. Затем откройте модель.
copyfile(fullfile(matlabroot,'toolbox','rtw','targets','xpc','xpcdemos','BeckhoffDIOconfig.xml'), '.', 'f' ); copyfile(fullfile(matlabroot,'toolbox','rtw','targets','xpc','xpcdemos','xpcEthercatBeckhoffDIO.slx'), '.', 'f' ); mdl = 'xpcEthercatBeckhoffDIO'; mdlOpen = 0; systems = find_system('type', 'block_diagram'); if isempty( strcmp(systems, mdl ) ) mdlOpen = 1; open_system(mdl); end
Рисунок 1: модель EtherCAT с помощью Beckhoff® цифровые терминалы EL1004 и EL2004 ввода-вывода.
Откройте маску для EtherCAT Init
блокируйте и введите необходимые значения для номеров шины PCI и номера слота для сетевой платы, используемой в коммуникации EtherCAT. Получить эти значения, в Командном окне, tg.getPCIInfo('ethernet')
типа. Команда в качестве примера, чтобы установить параметры конфигурации на для
EtherCAT Init
блок:
set_param('xpcEthercatBeckhoffDIO/EtherCAT Init ','pci_bus','5','pci_slot','0','pci_function','0')
Используя сторонний конфигуратор EtherCAT, который вы устанавливаете на компьютере разработчика, сгенерируйте конфигурационный файл EtherCAT BeckhoffDIOconfig.xml
. Этот файл описывает сеть ведущему устройству. Обзор процесса для создания конфигурационного файла в конфигураторе EtherCAT:
Соедините сеть (состоящий из терминалов EK1100, EL1004 и EL2004 в этом примере) к компьютеру, где конфигуратор EtherCAT установлен, и отсканируйте сеть, чтобы обнаружить подключенные устройства.
Выберите передачу и получите переменные, к которым получат доступ как сигналы от терминалов IO.
Опишите по крайней мере одну циклическую задачу, выберите уровень выполнения задачи и сопоставьте выбранные переменные к задаче. Только необходимо выбрать одну переменную из каждого PDO, чтобы сделать каждую переменную в этом PDO доступный.
Экспортируйте конфигурационный файл в XML-файл. Убедитесь, что имя XML-файла отличается от имени вашей модели Simulink®.
Каждый конфигурационный файл EtherCAT характерен для точной сетевой настройки, из которой он был создан (например, сеть, обнаруженная на шаге 1 процесса создания конфигурационного файла). Конфигурационный файл предусмотрел этот пример, допустимо, если и только если сеть EtherCAT состоит из Терминалов EK1100, EL1004 и EL2004 от Beckhoff®.
Конфигурационный файл задает набор передачи, и получите переменные. В данном примере четыре получают переменные, заданы для четырех входных каналов Терминала EL1004. Только первые два канала Терминала EL1004 используются в этом примере. Убедитесь получить переменные для канала 1 и канала, 2 из терминала EL1004 выбраны соответственно в двух EtherCAT PDO Receive
блоки. Эти две переменные являются 'Термином 3.Channel 1 (EL1004). Введите', и 'Называют 3.Channel 2 (EL1004). Входной параметр. Таким же образом четыре переменные передачи заданы для четырех выходных каналов терминала EL2004, но только первые два канала тестируются в этом примере. Убедитесь переменные передачи для канала 1 и канала, 2 из терминала EL2004 выбраны соответственно в двух EtherCAT PDO Transmit
блоки. Эти две переменные являются 'Термином 2.Channel 1 (EL2004). Выведите', и 'Называют 2.Channel 2 (EL2004). Вывод .
Создайте модель и загрузите на целевой компьютер. Позвольте запуску модели в течение 10 секунд
set_param(mdl,'RTWVerbose','off'); rtwbuild(mdl); tg = slrt('TargetPC1'); load(tg,mdl); tg.CommunicationTimeOut=20; start(tg); pause(10);
### Starting Simulink Real-Time build procedure for model: xpcEthercatBeckhoffDIO ### Generated code for 'xpcEthercatBeckhoffDIO' is up to date because no structural, parameter or code replacement library changes were found. ### Successful completion of build procedure for: xpcEthercatBeckhoffDIO ### Created MLDATX ..\xpcEthercatBeckhoffDIO.mldatx
Возьмите снимок состояния видеодисплея целевого компьютера. Построенный сигналы, переданные к терминалу EL2004 и полученные от терминала 1004. Как ожидалось переданные и полученные сигналы, отображенные на двух осциллографах, идентичны.
Определите объем 1, отображает выводы Ethercat Init
блок. См. документацию этого блока для значения отображенных значений.
Определите объем 2 отображений импульсная волна и ее инверсия, сгенерированная приложением и отправленная в Терминал EL2004 Ведущим устройством EtherCAT.
Определите объем 3 отображений сигналы, полученные в двух входных портах Терминала EL1004.
Чтобы взять снимок состояния целевых осциллографов, введите:
tg.viewTargetScreen
Когда пример завершит свой запуск, остановите и закройте модель.
stop(tg); if (mdlOpen) save_system(mdl); close_system(mdl); end