
УТС 7 семестр / МПС3доп
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра АПУ
отчет
по лабораторным работам №3 (факультативно)
по дисциплине «Микропроцессорные системы»
Тема: ИСПОЛЬЗОВАНИЕ РОБОТА-РУКИ В SCENE VIEWER B&R И ПРИМЕНЕНИЕ ТЕХНОЛОГИИ OPC UA
Студенты гр. 8391 |
|
Орещенко Н.В. |
|
|
Перевертайло Д.А. |
|
|
Петрухина М.С. |
Преподаватель |
|
Немудрук М.Л. |
Санкт-Петербург
2021
Задание.
Требуется создать платформу, на которой цилиндр анимировано будет выталкивать куб. При касании куба цилиндр окрашивается в цвета.
Как только куб полностью выходит за черту рабочей поверхности, он исчезает, а цилиндр после паузы возвращается в исходное положение.
Создание объектов в Scene Viewer.
Создадим объекты, необходимые для работы в Scene Viewer (рис. 1-3).
Рис. 1. Блок и основание.
Рис. 2. Толкающий цилиндр.
Рис. 3. Рабочая поверхность и сталкиваемый куб (оранжевый).
Переменные и библиотеки.
Ниже представлен перечень переменных и используемых библиотек.
Рис. 4. Переменные.
Рис. 5. Библиотеки.
Анимация.
Анимация представлена на рисунках 6-10.
Рис. 6.
Рис. 7.
Рис. 8.
Рис. 9.
Приложение А. С++
#include <bur/plctypes.h> #ifdef _DEFAULT_INCLUDES #include <AsDefault.h> #endif void _INIT ProgramInit(void) { Visual.posY_Cylinder = 190; Visual.posY_Cube = 320; Visual.reversed = false; Visual.materialCylinder = 3; // Grey mate Visual.visibleCube = true; }
// amount of memory to be allocated for heap storage must be specified for every ANSI C++ program with the bur_heap_size variable unsigned long bur_heap_size = 0xFFFF; void _CYCLIC ProgramCyclic(void) { Visual.materialCylinder = 3; if(cmd_return){ LCRRamp_0.enable = 1; LCRRamp_0.x = 190; LCRRamp_0.dy_up = 10; LCRRamp_0.dy_down = 10; LCRRamp(&LCRRamp_0); Visual.posY_Cylinder = LCRRamp_0.y; } else { LCRRamp_0.enable = 1; LCRRamp_0.x = 420; LCRRamp_0.dy_up = 10; LCRRamp_0.dy_down = 10; LCRRamp_0.y_max = 420; LCRRamp_0.y_min = 190; LCRRamp(&LCRRamp_0); Visual.posY_Cylinder = LCRRamp_0.y; //LCRRamp_0.y; }//if // Как только цилиндр касается куба, они перемещаются вместе if (Visual.posY_Cylinder >= CONNECT_CUBE_CYLINDER){ Visual.posY_Cube = Visual.posY_Cylinder + 100; Visual.materialCylinder = 4; }//if // куб вышел за рабочую поверзность и исчез if(Visual.posY_Cylinder == CUB_FALL){ Visual.visibleCube = false; Visual.materialCylinder = 5; cmd_return = true; TON_info.IN = 1; TON_info.PT = 5; TON(&TON_info); }//if }