Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Промышленные технологии

Освоение простых и сложных типов данных в C++ с PLCnext Engineer

Привет всем!

В этом блоге рассмотрим простые и сложные типы данных в C++ и PLCnext Engineer. Две части: простая и сложная.

Предполагается опыт с C++ и PLCnext Engineer.

Инструменты

Я выбрал Visual Studio, но можно Eclipse. Туториалы: Visual Studio, Eclipse. PLCnext Engineer — на сайте.

Простое упражнение

Создадим приложение, проверяющее число от PLC. Новый C++ проект. В заголовочном файле [NameOfTheProject].hpp (не component.hpp) определяем порты для простых типов:

//#port
//#attributes(Input)
//#name(InputTest)
int64 InputTest = 0;

//#port
//#attributes(Output)
//#name(OutputTest)
int64 OutputTest = 0;

В файле [NameOfTheProject].cpp добавим логику (if или switch):

void PLMProjectReadInputProgram::Execute() {
  if (InputTest == 1) { OutputTest = 15; }
  if (InputTest == 2) { OutputTest = 150; }
  if (InputTest == 3) { OutputTest = 1500; }
  if (InputTest == 4) { OutputTest = 15000; }
}

Соберите проект (Build) — получится библиотека для PLC. Если неясно — смотрите туториалы выше.

Освоение простых и сложных типов данных в C++ с PLCnext Engineer

В PLCnext Engineer: главная программа → Components → Programming → Local → Variables. Создайте переменные с теми же типами данных (соответствие типов здесь). Usage определяет, локальные они или для обмена данными.

Освоение простых и сложных типов данных в C++ с PLCnext Engineer

Скопируйте библиотеку из bin проекта в C:\Users\Public\Documents\PLCnext Engineer\Libraries. В Engineer: Components → Libraries → правый клик → Add user library → выберите библиотеку.

Освоение простых и сложных типов данных в C++ с PLCnext Engineer

Добавьте программу в задачи: Plant → двойной клик на PLCnext → Tasks and Events → новая программа после MainInstance (выбор типа или drag&drop из Components).

Освоение простых и сложных типов данных в C++ с PLCnext Engineer

Вкладка Port List покажет переменные из C++ и PLCnext. Соедините OUT порты PLC с IN портом C++ (и наоборот). Если не работает — проверьте типы данных.

Освоение простых и сложных типов данных в C++ с PLCnext Engineer Освоение простых и сложных типов данных в C++ с PLCnext Engineer

Добавьте тестовое значение: Main Program → Code → установите выходную переменную в 1.

Освоение простых и сложных типов данных в C++ с PLCnext Engineer

Деплой на PLC — ответ должен быть 15. Проверьте в Port List.

Сложное упражнение

Передача массива структур между PLC и C++. Новый C++ проект. В хедере создадим структуру автомобиля:

public: // typedefs
  struct StrCar {
    StaticString<80> sbrand;
    int16 iHorsepower;
    int16 iYear;
    boolean xInsured;
  };

ВАЖНО! Имена и типы в C++ и PLCnext Engineer должны совпадать! Типы данных здесь.

Определим порты как списки структур:

//#port
//#attributes(Input)
//#name(CarIn)
StrCar CarToC[2];

//#port
//#attributes(Output)
//#name(CarOut)
StrCar CarFromC[2];

В .cpp меняем значения элементов массива:

// Первый элемент выходного массива = второй элемент входного
CarFromC[0].sbrand = CarToC[1].sbrand;
CarFromC[0].iHorsepower = CarToC[1].iHorsepower;
CarFromC[0].iYear = CarToC[1].iYear;
CarFromC[0].xInsured = CarToC[1].xInsured;

// Второй элемент выходного = первый входного (с дамми значениями)
CarFromC[1].sbrand = CarToC[0].sbrand;
CarFromC[1].iHorsepower = CarToC[0].iHorsepower;
CarFromC[1].iYear = CarToC[0].iYear;
CarFromC[1].xInsured = CarToC[0].xInsured;

Соберите (Build) — библиотека готова.

Освоение простых и сложных типов данных в C++ с PLCnext Engineer

В PLCnext Engineer создадим свой тип данных: Datatypes файл (создание здесь).

Освоение простых и сложных типов данных в C++ с PLCnext Engineer

Опишем структуру и массив:

TYPE
  StrCar:
  STRUCT
    sBrand: STRING;
    iHorsepower: INT;
    iYear: INT;
    xInsured: BOOL;
  END_STRUCT
END_TYPE

TYPE
  carList: ARRAY[0..1] OF StrCar;
END_TYPE

ВАЖНО! Имена и типы должны совпадать с C++!

Создайте переменную типа carList: Main Program → Components → Programming → Programs → Variables.

Освоение простых и сложных типов данных в C++ с PLCnext Engineer

Подключите библиотеку так же, как в простом упражнении.

Освоение простых и сложных типов данных в C++ с PLCnext Engineer

Добавьте программу в задачи (после MainInstance).

Освоение простых и сложных типов данных в C++ с PLCnext Engineer

Port List покажет переменные. Соедините порты (проверьте типы и имена).

Освоение простых и сложных типов данных в C++ с PLCnext Engineer Освоение простых и сложных типов данных в C++ с PLCnext Engineer

Задайте тестовые значения в коде Main Program:

CarToC[0].sBrand := 'Audi';
CarToC[0].iHorsepower := 200;
CarToC[0].iYear := 2020;
CarToC[0].xInsured := TRUE;

CarToC[1].sBrand := 'Mazda';
CarToC[1].iHorsepower := 120;
CarToC[1].iYear := 2001;
CarToC[1].xInsured := FALSE;

После деплоя выходной массив будет переставлен относительно входного. Проверьте в Port List.

Промышленные технологии

  1. Расширение облачных горизонтов: новые зоны, контейнеры и мультиоблачные стратегии
  2. Продвинутый анализ DC реактивных цепей с ненулевыми начальными условиями
  3. Основы ввода-вывода в C#: Console.WriteLine, ReadLine и форматирование
  4. Классы и объекты в C++: практическое руководство по объектно-ориентированному программированию
  5. Структуры C++ против классов: практическое руководство для разработчиков встроенных систем
  6. Полное руководство по дате и времени в C++
  7. Цифровое написание процедур: простое, эффективное и надежное
  8. Безопасный удаленный gRPC доступ с grpcurl на устройствах PLCnext
  9. Разработка консольного приложения PLCnext на C#: Руководство для начинающих
  10. Установка пакетного менеджера APT на PLCnext Linux: пошаговое руководство