Индустриальный футбол
ROB-56488Введение
- Теоретическая часть
1.1. Какие есть прикладные языки программирования
1.2.На каком языке программирования будет писаться программа и почему именно на нём.
1.3. изучение PyQt5
1.3.1. Установка PyQt5
1.3.2. Виджеты и каркас приложения
1.3.3. Кнопка
1.3.4. Выпадающий список
1.4. Какие виджеты и библиотеки используются в приложении
1.5. Джойстик для приложения
1.6. Функции для программы
1.7.COM и Serial. Отправка данных на Arduino
1.7.1. Про COM
1.7.1.1.1. История COM
1.7.1.1.2. Путаница в названиях
1.7.1.2. Поддержка в ОС Windows
1.7.1.3. Принципы работы COM
1.7.2. Про Serial
1.7.2.1 Serial в Python
- Практическая часть
2.1.Джойстик для приложения
2.2. Функции программы
2.2.1 Функция отправки данных
2.2.2. Функция открытия/закрытия порта
2.2.3. Функция обновления списка портов
2.2.4. Функция проверки цвета
2.2.5. Функция смены режима
2.3. Интерфейс и виджета приложения
2.3.1. Добавление виджетов в интерфейс
Заключение
Список литературы
Введение
Для практической деятельности человека в технической отрасли использование специального оборудования имеет очень важное значение.
К спец оборудованию относят станки, испытательное оборудование, оснастку, измерительные машины и многое другое. Для спец. оборудования есть программы, которые показывают какую-либо информацию в зависимости от устройства, но нет программы с помощью которой можно было бы управлять оборудованием с ПК пли с телефона.
Актуальность проекта заключается в том, что сейчас работать вблизи спец. оборудования может быть опасно и чтобы сократить риски получения травм на рабочем месте я написал программу для управления.
Новизна заключается в том, что я самостоятельно написал программу, которая позволяет управлять оборудованием с ПК.
Цель:
- Написать программу для управления.
Задачи:
- Узнать про прикладные языки программирования
- Выбрать язык на котором будет писаться программа и объяснить почему.
- Изучение PyQt5
- Выписать каике виджеты будут использоваться для программы
- Создание джойстика для программы
- Написание функций программы
- Вызов и работа функций программы
- Узнать про связь Arduino и программы с помощью COM портов и Serial.
- Теоретическая часть
1.1. Какие есть прикладные языки программирования
К прикладным языкам программирования относится довольно большое количество языков.
Одни из самый популярных: Python, Java, C, C#, C++, Kotlin, PHP
Компилируемые: С, С++, Pascal
Интерпретируемые: Visual Basic Script (VBScript), JavaScript, Python, PHP
Условно компилируемые: C# и остальные языки .Net, Java для Java-машины
Для разных областей приложений создаются свои языки или скрипты. Особенно это относится к компьютерным играм, в которых переплетаются сразу несколько видов искусства, науки и технологии. Но системы разработки игр также используют и уже известные языки, например, Python в системе нарративных игр Ren’Py или язык Swift для устройств Apple.
Универсальные: семейство Pascal/Delphi, C/C++, C#, Java
Специализированные:
Математические вычисления: Fortran, F#
Математическое моделирование: MatLab, Wolfram
Искусственный интеллект: LISP,
На основе передачи сообщений: SmallTalk,
Многопоточные приложения Cw,
Веб-разработка: Perl, PHP, JavaScript
Базы данных: SQL
Компьютерные игры: Lua, Unity, Godot, Twine
Компьютерная графика: MEL (Maya), MAX Script (3ds Max)
Бухгалтерия: 1С
Алгоритмические: Pascal, C++, Java, C#
Языки описания данных: XML, XAML, JSON, HTML, DDL SQL
Алгоритмические языки, конечно, тоже умеют описывать данные, но в основном предназначены для создания больших и сложных программ, которые описывают действия, то есть алгоритмы.
1.2. На каком языке программирования будет писаться программа и почему именно на нём.
Писать я буду на Python.
Во-первых, Python - это универсальный язык программирования высокого уровня, широко используемый для различных проектов разработки.
Во-вторых, писать на Python легко и быстро.
В-третьих, Python я уже знаю, а учить другой язык параллельно создавая программу будет затруднительно.
1.3. изучение PyQt5
1.3.1. Установка PyQt5
Установка на Windows
Для установки PyQt5 на Windows, выполните следующую команду в терминале: pipinstallPyQt5
Установка PyQt5 из исходников на Linux
Для установки PyQt5 из исходника, вам нужно сделать следующее:
- Установить SIP
- Скачать исходник PyQt5
- Настроить и установить.
Для установки SIP, выполните следующую команду: sudo pip3installpyqt5-sip
Скачать исходник PyQt5 можно отсюда: https://www.riverbankcomputing.com/software/pyqt/download5
Мы распаковали сжатый исходник, теперь запустите следующие команды внутри корня папки:
sudo python3configure.py
sudo make
sudo make install
1.3.2. Виджеты и каркас приложения
Всё что мы видим в программах это виджеты. Кнопки, тексты, ползунки и прочее. При взаимодействии пользователя с виджетом вызывается функция.
Можно менять параметры виджетов. Например, у текста это размер, цвет, шрифт. Текст в PyQt5 связан с XHTML .
Пример:
Label= QLabel('<i>Hello</i>, <b>world</b>!!!')
QLabel это функций PyQt5 для создания текста в приложении. Так же в примере можно увидеть, что все виджеты сохраняются в переменные.
Мы создали виджет, текст, который должен отображаться в программе. Теперь его нужно добавить в саму программу. Добавить в программу виджеты можно двумя способами.
Первый это разделить приложение на линии. Линии есть вертикальные и горизонтальные. Сначала создаётся линия, которая будет располагаться посередине. Потом линии находятся на равном от друг друга расстоянии. Если честно, мне такой способ неудобен. Нужно создавать переменные в которых будут храниться эти линии и импортировать 2 команды.
Второй способ это добавлять виджеты по координатам, главное помнить, что нет отрицательных координат, только положительные.
ml.addWidget(Label, 0, 0)
Окей,с виджетами разобрались, но нужно создать само приложение.
app = QApplication([])
mw = QMainWindow()
cw = QWidget()
ml = QGridLayout()
Сверху перечислены команды, которые нужны для создания программы, точнее его каркаса.
Чтобы изменить размер виджета используется название_переменной.resize(x,y), где x и y размеры
1.3.3. Кнопка
Для создания кнопки используется командаQPushButton(), в скобках указывается текст, который будет находиться на кнопке. Эту команду мы заключаем в переменную, как и другие виджеты.
Пример:
Button=QPushButton()
Чтобы отслеживать нажатие кнопки используется Button.clicked.connect(), то есть название_переменной_с_кнопкой.clicked.connect(). В скобках указывается функция, которая будет вызываться при нажатии на кнопку.
1.3.4. Выпадающий список
Чтобы создать выпадающий список используется команда QComboBox().
Для того чтобы добавить в этот список элемент используется команда addItem(a), a-строка, которая будет добавлена в список
comboBox.currentText()-вывод данной команды будет текст, который выбран в данный момент
1.4. Какие виджеты и библиотеки используются в приложении
Из библиотек я использовал Serial, PyQt5, sys.
Для приложения использовались кнопки, выпадающий список и библиотек Serial для связи между приложением и Arduino.
Кнопки использовались для подачи сигналов на Arduino, чтобы та выполняла команды, для открытия, закрытия и перезагрузки спискаCOM портов. Также использовался выпадающий список для отображения доступных COM портов.
1.6. Функции для программы
Я создал функции открытия/закрытия, перезагрузки списка COM портов, отправки данных на Arduino для выполнения команд, проверки цвета и смены режима.
1.7.COM и Serial. Отправка данных на Arduino
1.7.1. Про COM
COM расшифровывается как Component Object Model, а перевод объектная модель компонентов
COM - это технологический стандарт от компании Microsoft, предназначенный для создания программного обеспечения на основе взаимодействующих компонентов, каждый из которых может использоваться во многих программах одновременно. Стандарт воплощает в себе идеи полиморфизма и инкапсуляцииобъектно-ориентированного программирования. Стандарт COM мог бы быть универсальным и
кроссплатформенным, но закрепился в основном на операционных системах семейства Microsoft Windows. В современных версиях Windows COM используется очень широко. На основе COM были реализованы технологии: Microsoft OLE Automation, ActiveX, DCOM, COM+, DirectX, а также XPCOM.
Полиморфизм в языках программирования и теории типов — способность функции обрабатывать данные разных типов.
Инкапсуляция — в информатике, процесс разделения элементов абстракций, определяющих ее структуру (данные) и поведение (методы); инкапсуляция предназначена для изоляции контрактных обязательств абстракции (протокол/интерфейс) от их реализации. На практике это означает, что класс должен состоять из двух частей: интерфейса и реализации. В реализации большинства языков программирования (C++, C#, Java и другие) обеспечивается механизм сокрытия, позволяющий разграничивать доступ к различным частям компонента.
Объе́ктно-ориенти́рованноепрограмми́рование (ООП) — методология программирования, основанная на представлении программы в виде совокупности взаимодействующих объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархиюнаследования.
Методология разработки программного обеспечения — совокупность методов, применяемых на различных стадиях жизненного циклапрограммного обеспечения и имеющих общий философский подход.
1.7.1.1.1. История COM
Стандарт COM был разработан в 1993 году корпорацией Microsoft как основа для развития технологии OLE. Технология OLE 1.0 уже позволяла создавать т. н. «составные документы» : например, в пакете Microsoft Office эта технология позволяла включать диаграммы Microsoft Excel в документы Microsoft Word.
OLE (Object Linking and Embedding)— технология связывания и внедрения объектов в другие документы и объекты, разработанная корпорацией Майкрософт.
В 1996 году Microsoft переименовала технологию в ActiveX.
OLE позволяет передавать часть работы от одной программы редактирования к другой и возвращать результаты назад. Например, установленная на персональном компьютере издательская система может послать некий текст на обработку в текстовый редактор, либо некоторое изображение в редактор изображений с помощью OLE-технологии.
Основное преимущество использования OLE (кроме уменьшения размера файла) — в том, что она позволяет создать главный файл, картотеку функций, к которой обращается программа. Этот файл может оперировать данными из исходной программы, которые после обработки возвращаются в исходный документ.
1.7.1.1.2. Путаница в названиях
В 1996 году Microsoft попыталась переименовать технологию OLE в ActiveX, но это удалось лишь частично. Например, технология OLE позволяла создавать так называемые элементы управления OLE — повторно используемые элементы пользовательского интерфейса, которые были построены на стандарте COM. Эти элементы управления OLE были переименованы в элементы управления ActiveX,хотя расширение файлов «.ocx» за ними осталось. Затем Microsoft стала активно продвигать ActiveX в Интернет, включив поддержку элементов ActiveX в свой браузерInternet Explorer. В результате название OLE осталось только за технологией составных документов и локальных внедряемых объектов, а сетевые OLE-объекты стали называть ActiveX.
Некоторая путаница между понятиями OLE и ActiveX сохраняется и до сих пор, но речь идёт об одних и тех же COM-технологиях. Причём иногда даже путают понятия OLE и COM. Так, внедряемые OLE-объекты иногда называют COM-объектами, а OLE-контейнеры — COM-контейнерами, и т. П.
1.7.1.2. Поддержка в ОС Windows
- Windows 7, Windows 8, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 поддерживают COM+.
- Для Windows Server 2012 R2 роль сервера приложений, которая реализует COM+, объявлена устаревшей и подлежащей удалению в будущих версиях.1.7.1.3. Принципы работы COM
Основным понятием, которым оперирует стандарт COM, является COM-компонент. Программы, построенные на стандарте COM, фактически не являются автономными программами, а представляют собой набор взаимодействующих между собой COM-компонентов. Каждый компонент имеет уникальный идентификатор (GUID) и может одновременно использоваться многими программами. Компонент взаимодействует с другими программами через COM-интерфейсы — наборы абстрактных функций и свойств. Каждый COM-компонент должен, как минимум, реализовывать стандартный интерфейс «IUnknown», который предоставляет базовые средства для работы с компонентом. Интерфейс «IUnknown» включает в себя три метода: QueryInterface, AddRef, Release.
Windows API предоставляет базовые функции, позволяющие использовать COM-компоненты. Библиотеки MFC и, особенно, ATL/WTL предоставляют более гибкие и удобные средства для работы с COM. Библиотека ATL от Microsoft до сих пор остаётся самым популярным средством создания COM-компонентов. Но зачастую COM-разработка остаётся ещё довольно сложным делом, программистам приходится вручную выполнять многие рутинные задачи, связанные с COM (особенно это заметно в случае разработки на C++). Впоследствии (в технологиях COM+ и особенно .NET) Microsoft попыталась упростить задачу разработки COM-компонентов.
1.7.2. Про Serial
Для связи ПКс Arduino мы используем Serial.
Если простыми словами, то Serial - это способ связи между устройствами, то есть, между ПК и Arduino в нашем случае.
Для связи ПК с Arduino мы используем последовательный кабель(USB кабель), последовательный порт(USB порт) и последовательную связь(Serial).
Когда мы соединяем Arduino и ПК создаётся виртуальный COM порт, который используется для общения между устройствами при помощи Serial.
Когда мы создаём объект Serial в приложении и в скетче Arduino, мы указываем скорость передачи данных в бодах. Эта скорость должна совпадать на Arduino и в приложении.
Бод - единица скорости передачи сигнала, измеряемая числом дискретных переходов или событий в секунду.
1.7.2.1 Serial в Python
Библиотека Serial в Python предоставляет множество методов для работы с последовательными портами. Например, можно настроить скорость передачи данных, количество бит данных, бит четности и другие параметры с помощью метода Serial(). Также можно использовать методы read() и write() для чтения и записи данных в порт. Библиотека serial поддерживает работу с различными операционными системами, включая Windows, Linux и macOS. Она также поддерживает работу с USB-портами и виртуальными COM-портами. Для удобства работы с библиотекой serial можно использовать различные фреймворки и библиотеки, например, PyQT или Tkinter. Это позволяет создавать графические интерфейсы для управления устройствами, подключенными к последовательным портам. В целом, библиотека Serial в Python предоставляет широкие возможности для работы с последовательными портами и устройствами, подключенными к ним. Она является надежным инструментом для разработки приложений, связанных с контроллерами и электроникой.
- Практическая часть
2.1.Джойстик для приложения
Этот код определяет пользовательский виджет под названием "Джойстик", который можно использовать в графическом пользовательском интерфейсе. Виджет напоминает джойстик и позволяет пользователю перемещать маленький круг внутри большего круга, перетаскивая его с помощью мыши. Направление движения определяется углом между центром большего круга и положением малого круга.
Метод __init__ инициализирует виджет размером по умолчанию 100x100 пикселей и устанавливает некоторые переменные, такие как movingOffset и __maxDistance. Метод paintEvent вызывается всякий раз, когда виджет необходимо перерисовать, и он рисует больший круг и маленький круг в их текущих положениях. Метод _centerEllipse возвращает ограничивающий прямоугольник малого круга, который либо центрирован в текущей позиции, либо смещен на movingOffset, если он перетаскивается. Метод _center возвращает центральную точку большего круга. Метод _boundJoystick ограничивает положение малого круга в пределах большего круга, при необходимости корректируя его координаты. Метод joystickDirection вычисляет направление движения на основе угла между центром большего круга и положением малого круга. Методы mousePressEvent, mouseReleaseEvent и mouseMoveEvent обрабатывают события мыши, такие как щелчок, отпускание и перетаскивание маленького круга.
В целом, этот код предоставляет базовую реализацию виджета джойстика, который можно дополнительно настроить в соответствии с конкретными потребностями графического пользовательского интерфейса.
2.2. Функции программы
2.2.1 Функция отправки данных
Этот код определяет функцию SerialSend, которая принимает аргумент Command. Если переменная Flag равна 1, то функция выводит значение Command в консоль и пытается отправить соответствующее сообщение на COM-порт. Если отправка происходит успешно, то на COM-порт отправляется байтовая строка, соответствующая значению Command. Если возникает ошибка при отправке сообщения на COM-порт, то выводится сообщение об ошибке с помощью диалогового окна ErrorMsg.
2.2.2. Функция открытия/закрытия порта
Этот код определяет функцию OpenClose, которая отвечает за открытие и закрытие COM-порта. Сначала функция пытается открыть COM-порт с помощью модуля pyserial. Если это не удается, то программа продолжает работу без COM-порта. Затем функция запускает бесконечный цикл, который проверяет значение переменной Flag. Если Flag равен 1, то функция пытается закрыть COM-порт. Если закрытие происходит успешно, то кнопка на графическом интерфейсе меняется на "Open COM", и переменная Flag устанавливается в 0. Если возникает ошибка при закрытии COM-порта, то выводится сообщение об ошибке с помощью диалогового окна ErrorMsg. Если Flag равен 0, то функция пытается открыть COM-порт. Если открытие происходит успешно, то кнопка на графическом интерфейсе меняется на "Close COM", и переменная Flag устанавливается в 1. Если возникает ошибка при открытии COM-порта, то выводится сообщение об ошибке с помощью диалогового окна ErrorMsg.
2.2.3. Функция обновления списка портов
Этот код определяет функцию refresh, которая обновляет список доступных COM-портов. Сначала функция очищает список COM и SerialPorts. Затем она использует модуль QtSerialPort для получения списка доступных портов и добавляет каждый порт в список SerialPorts. Для каждого элемента в SerialPorts функция добавляет его в выпадающий список COM на графическом интерфейсе.
2.2.4. Функция проверки цвета
Этот код определяет функцию с именем CheckColor(), которая выводит строку "CHECK" в консоль. Затем она отправляет число 6 через последовательный порт (SerialSend), получает цвет из порта и выводит его в консоль. Наконец, функция устанавливает цвет фона для объекта square с использованием полученного цвета.
2.2.5. Функция смены режима
Функция SwitchMode() определяет, как приложение будет работать в зависимости от значения глобальной переменной Flag. Если Flag равен 1, то приложение переходит в бесконечный цикл, который проверяет значение глобальной переменной FlagTwo. Если FlagTwo равен 1, то скрываются объекты ButtonCheck и square, а также появляется объект joystick. После этого число 4 отправляется через последовательный порт (SerialSend), и FlagTwo устанавливается в 0. Если же FlagTwo равен 0, то отображаются объекты square и ButtonCheck, а также появляется joystick. После этого число 4 отправляется через последовательный порт (SerialSend), вызывается функция CheckColor(). Она получает цвет из порта и устанавливает его для объекта square. Затем цикл прерывается с помощью команды break.
2.3. Интерфейс и виджета приложения
Код создает графический интерфейс приложения, который состоит из главного окна (QMainWindow) и виджетов, размещенных на нем с помощью сетки (QGridLayout). Виджеты включают в себя: - Joystick - объект для управления манипулятором - Кнопки для переключения режима работы, открытия/закрытия COM-порта, обновления списка доступных портов, проверки цвета и захвата управления манипулятором - ComboBox для выбора COM-порта - Квадрат (QPushButton), который отображает цвет, полученный из порта
Функции SwitchMode(), OpenClose(), CheckColor(), refresh() и Seizure() зависят от пользователя.
2.3.1. Добавление виджетов в интерфейс
Используется метод addWidget() объекта QGridLayout для добавления виджетов на сетку. Первый аргумент метода - это указатель на добавляемый виджет, а второй и третий аргументы - это координаты ячейки на сетке, в которую будет добавлен виджет. Например, строка ml.addWidget(ButtonSwitch, 17, 0) добавляет кнопку ButtonSwitch в ячейку с координатами (17,0) на сетке. Аналогично, остальные виджеты добавляются на сетку с помощью метода addWidget(). После того, как все виджеты добавлены на сетку, она устанавливается в качестве основного виджета главного окна с помощью метода setCentralWidget(). Наконец, метод show() вызывается для отображения главного окна на экране.
Заключение
Приложение для манипулятора представляет собой графический интерфейс, который позволяет управлять манипулятором с помощью кнопок и джойстика. Оно включает в себя такие элементы, как кнопки для открытия/закрытия порта, обновления данных о цвете, захвата, выбора COM-порта, а также джойстик и квадрат для управления манипулятором. Все элементы расположены на центральном виджете главного окна, который устанавливается с помощью метода setCentralWidget(). Приложение обладает простым и интуитивно понятным интерфейсом, что делает его удобным в использовании для управления манипулятором.
Если доработать, то такое приложение можно использовать на предприятиях.
Файлы
Добавлен 10.12.2024
Добавлен 10.12.2024
Добавлен 10.12.2024