Построение автоматной модели управления пневмоцилиндрами по заданной управляющей последовательности. КР. Курсовая работа по дисциплине Автоматное программирование систем управления
Скачать 0.93 Mb.
|
по дисциплине «Автоматное программирование систем управления» Тема курсовой работы: «Построение автоматной модели управления пневмоцилиндрами по заданной управляющей последовательности» Студент группы ИВБО-10-18 Нигматов Самсон Сергеевич _____________________ (подпись студента) Руководитель курсовой работы: ___________________________ ________________ (должность, звание, ученая степень) (подпись руководителя) Работа представлена к защите «___» _______________ 2020 г. Допущен к защите «___» _______________ 2020 г. Москва 2020 г.
Студент Нигматов Самсон Сергеевич Группа ИВБО-10-18 Тема «Построение автоматной модели управления пневмоцилиндрами по заданной управляющей последовательности» Исходные данные: 8 пневмоцилиндров, модель пневмоцилиндра в SimInTech, управляющая последовательность описывающая работу пневмоцилиндров Перечень вопросов, подлежащих разработке, и обязательного графического материала: Построение автоматной модели процесса управления пневмоцилиндра, моделирование пневмоцилиндра в среде SimInTech, описание взаимодействия автоматной модели реализованной на языке Си и среды динамического моделирования SimInTech
«___» _______________ 2020 г. Задание на курсовую работу получил __________________ (Нигматов С.С.) подпись обучающегося Ф.И.О. исполнителя СОДЕРЖАНИЕ ВВЕДЕНИЕ 5 ВВЕДЕНИЕ Целью курсовой работы является построение автоматной модели процесса управления пневмоцилиндра, моделирование пневмоцилиндра в среде SimInTech, описание взаимодействия автоматной модели реализованной на языке Си и среды динамического моделирования SimInTech 1 ТЕОРЕТИЧЕСКАЯ ЧАСТЬ 1.1 Описание пневмоцилиндра Пневматический цилиндр — это один из элементов пневмосистемы. Он предназначен для преобразования энергии сжатого воздуха в механическое линейное перемещение в целях подъема или сдвига с силой, пропорциональной диаметру рабочего цилиндра и давлению подведенного сжатого воздуха. Можно сказать, что пневмоцилиндры — основной элемент всех устройств пневмоавтоматики. В основе работы пневматического цилиндра лежит воздействие силы сжатого воздуха на поршень пневмоцилиндра. Здесь следует отметить, что это воздействие может иметь как одностороннее, так и двустороннее направления. В зависимости от этого цилиндры делят на пневматические цилиндры одностороннего действия и двустороннего действия. При одностороннем действии воздух оказывает давление на поршень только в одной из рабочих полостей цилиндра, поэтому движение под воздействием силы сжатого воздуха происходит только в одном направлении. Движение в обратном направлении происходит под воздействием пружины, установленной на шток цилиндра внутри его второй рабочей полости. Пневмоцилиндры двустороннего действия, осуществляют перемещение штока в обе стороны за счёт воздействия силы сжатого воздуха, подаваемого в одну из рабочих полостей цилиндра. Распределение воздуха между рабочими полостями пневматического цилиндра осуществляется пневмораспределителями. Пневмоцилиндры – конструктивные особенности: Основными деталями пневмоцилиндров являются гильза, шток, поршень штока и флянцы. Каждый из этих элементов имеет свои конструктивные особенности, влияющие на работу пневмоцилиндра. При изготовлении пневмоцилиндров применяется гладкая труба (пневмоцилиндры серии AF) и профилированная труба из алюминиевых сплавов (серия CF,DF). Отличие заключается в наличии специальных пазов в профилированной трубе, предназначенных для установки герконовых датчиков. Для воздействия на герконовые датчики на поршни пневматических цилиндров устанавливается магнитное кольцо. Особенностью конструкции флянцев пневматических цилиндров является регулируемый демпфер. Для предотвращения возможных ударов поршня и поверхности флянца в конце рабочего хода пневмоцилиндры оборудованы тормозным механизмом – демпфером. Регулировка скорости торможения осуществляется дросселем, вмонтированным во флянцы цилиндра. Обычно при выборе пневматического цилиндра пользуются расчетным методом. Существуют для этой цели и специализированные компьютерные программы, а также графические методы и таблицы. В основе расчетного метода стоит определение усилия, которое развивается на штоке. Данное усилие напрямую зависит от диаметра поршня, рабочего давления или сил трения. Когда определяют теоретическое усилие, то рассматривают осевое усилие на неподвижном штоке, а силы трения не учитывают. Различают усилие на штоке для цилиндра двустороннего действия при прямом ходе штока (выдвижении) и обратном (втягивание) и для цилиндра одностороннего действия (с пружинным возвратом). Можно решить и обратную задачу, и при заданной нагрузке на штоке определить диаметр цилиндра. При определении размеров цилиндров часто используют и табличный метод. Графы таблицы размещённые на нашем сайте содержат следующие характеристики: диаметр поршня, диаметр штока, направление действия, полезная площадь поршня, давление. 1.2 Описание модели пневмоцилиндра в среде SimInTech Общий вид модели пневмоцилиндра представлен на Рисунке 1.1 З Рисунок 1.1 ‒ Общий вид модели пневмоцилиндра аходим в субмодель и описываем следующую модель (Рисунок 1.2). Рисунок 1.2 ‒ Описание модели пневмоцилиндра При этом, на модели используются следующие элементы: ГПС – Пневмомеханический преобразователь поступательного типа, ГПС – Пневматическая полость переменного объема (изотерма или адиобата), ГПС – Давление и температура газа, ГПС - Пневматический турбулентный дроссель с регулированием по произвольному параметру, ГПС - Механический элемент поступательного движения. Параметры элементов представлены на Рисунках 1.3-1.8. Рисунок 1.3 ‒ Параметры пневматического преобразователя поступательного типа Рисунок 1.4 ‒ Параметры пневматической полости переменного объема Рисунок 1.5 ‒ Параметры давления и температуры газа в верхнем положении Рисунок 1.6 ‒ Параметры пневматического турбулентного дросселя с регулированием по произвольному параметру Рисунок 1.7 ‒ Параметры пневматического турбулентного дросселя с регулированием по произвольному параметру Рисунок 1.8 ‒ Параметры механического элемента поступательного движения Для пневмоцилиндра, опишем дополнительно три выходных параметра: датчик положения поршня, концевой датчик положения поршня в крайнем верхнем положении и концевой датчик положения поршня в крайнем нижнем положении. «ГПС - Механический элемент поступательного движения», в базовой поставке, не имеет подобных выходных датчиков поэтому придется их сделать самостоятельно. SimInTech позволяет, при определенных условиях, модифицировать интересующие в процессе моделирования базовые элементы. Для изменения элемента необходимо поставить его в проект и вызвав правой кнопкой мыши выпадающее меню элемента выбрать пункт «Действия» далее «Войти в субмодель». Войдя в субмодель необходимо добавить выходные сигналы (Рисунок 1.9). Рисунок 1.9 ‒ Внутренняя модель механического элемента поступательного движения При этом формулы констант должны соответствовать параметрам субмодели X_min и X_max (Рисунок 1.10, Рисунок 1.11). Рисунок 1.10 ‒ Параметры константы Рисунок 1.11 ‒ Параметры константы 2 ПРАКТИЧЕСКАЯ ЧАСТЬ Описание задания Моделируемый процесс задается пятеркой (𝑌,𝑇,𝐷,𝐸,𝑃). Где Y – множество пневмоцилиндров; 𝑇 – множество отрезков времени за которые набор пневмоцилиндров на заданном шаге должны изменить сове положение; 𝐷 – множество отрезков времени в течении которых на заданном шаге процесса должно удерживаться положение пневмоцилиндров после их стабилизации; 𝐸 – множество пар (𝑝𝑖𝑝𝑗) переходов с шага процесса 𝑝𝑖, в котором за время 𝑡𝑖 не удалось сменить положение пневмоцилиндров, на шаг 𝑝𝑗; 𝑃 – последовательность наборов пневмоцилиндров изменяемых на заданном шаге процесса. Последовательность наборов цилиндров представляет из себя строку в которой задана последовательность включения и отключения пневмоцилиндров, при этому выключение (цилиндр находится в крайнем нижнем положении) обозначается отрицанием 𝑦1, а включение (цилиндр находится в крайнем верхнем положении) обозначено без отрицания 𝑦1. В одну единицу шага процесса в скобках указывается в какое состояние должны перейти пневмоцилиндры. Например 𝑃 = (𝑦1𝑦2) говорит о том, что по завершении этого шага пневмоцилиндр 𝑦1 и 𝑦2 должны перейти в крайнее нижнее положение, при этом предыдущее положение этих цилиндров должно быть крайним верхним (𝑦1𝑦2). Отдельно задается время, за которое пневмоцилиндры должны переместиться за одну единицу шага процесса (𝑇={𝑡1,𝑡2,𝑡3,…,𝑡𝑛}) и время нахожде-ния на данном шаге процесса (𝐷={𝑑1,𝑑2,𝑑3,…,𝑑𝑛}). Например, запись T = {𝑡1 = 𝑡2 = 𝑡5 = 50, 𝑡3 = 𝑡4 = 40} , D = {𝑑4 = 𝑑5 = 120, 𝑑1 = 𝑑2 = 𝑑3 = 180} говорит о том, что на шагах 1, 2, 5 пневмоцилиндр должен переместиться за время равное или меньше 50 дискретам, а на шагах 3, 4 за 40; время нахождения на шагах 4 и 5, после выставления требуемого положения пневмоцилиндров, равно 120 дискретам, а на 1, 2, 3 шагах равное 180 дискретам. В случаях, когда на каком-либо из шагов, цилиндрам не удалось за заданное время сменить свое положение, процесс должен завершиться с ошибкой и ожидать сброса или, если есть дополнительное описание, произвести переход на необходимый шаг. Переход задается парой, где в скобках описывается шаг, с которого осуществляется переход, в случае описанном выше и далее после запятой шаг на который осуществляется переход. Например, 𝐸 = (𝑝1,𝑝5) – говорит о том, что, если на шаге 1 процесса, не удалось за заданное время привести цилиндры в необходимое положение надо перейти на шаг исполнения 5. Исходные данные Y = y1, y2, y3, y4, y5, y6, y7, y8 P = ( ), (y1y2y3y4y5y6y7y8), ( ), (y3y5 y7), (y8), (y1 y6 ), ( y4 y7), (y8 y5y6 ), (y1y2y4 ), (y8 y5y7), (y2 ), ( y3y6y7), ( y2 y4 y8), (y1 y3 y5), (y6 ), ( y2y4y7), ( y3 y8), ( y1) T = D = E = (p1, p1), (p2, p12), (p3, p9), (p4, p10), (p5, p2), (p8, p10). Построение диаграммы Мура автоматной модели Мы построили диаграмму Мура (Рисунок 2.1) для исходных данных с помощью ориентированного графа, вершины которого взаимно однозначно соответствуют состояниям автомата, а дуги – входным условиям. Данный автомат включает в себя 18 состояний, а также состояние ошибки, в случае невыполненного перехода в следующее состояние в заданный промежуток времени, и состояние инициализации, при первом включении. Рисунок 2.1 ‒ Диаграмма Мура Кодирование автоматной модели на языке Си На листинге 2.1 представлены шаги(PneumoState_*), на которых изменяется заданная последовательность пневмоцилиндров, структура пневмоцилиндра(struct PneumoCylinder), вход(output_signal) и выходы(input_signal) пневмоцилиндра, и структура(PneumoEngine), которая включает в себя шаг, на котором находится процесс симуляции, временные промежутки(timeouts, delays) и сами цилиндры. Листинг 2.1 — Функция инициализации автомата enum PneumoState { PneumoState_Init = 0, PneumoState_1, PneumoState_2, PneumoState_3, PneumoState_4, PneumoState_5, PneumoState_6, PneumoState_7, PneumoState_8, PneumoState_9, PneumoState_10, PneumoState_11, PneumoState_12, PneumoState_13, PneumoState_14, PneumoState_15, PneumoState_16, PneumoState_17, PneumoState_18, PneumoState_FatalException }; #define PNEUMO_CYLINDER_SIGNAL_UP 0 #define PNEUMO_CYLINDER_SIGNAL_DOWN 1 struct PneumoCylinder { int input_signal[2]; int output_signal; }; struct PneumoEngine { enum PneumoState state; int timeout; int delay; int timeouts[PneumoState_FatalException]; int delays[PneumoState_FatalException]; struct PneumoCylinder cylinders[8]; }; На листинге 2.2 представлена функция инициализации автомата (при первом включении), где мы присваиваем входным и выходным портам пневмоцилиндра нули, здесь же мы задаем значение временным промежуткам на каждом шаге симуляции. В качестве аргумента этой функции подается структурная переменная(engine), рассмотренная на листинге 2.1. Листинг 2.2 — Функция инициализации автомата void pneumo_engine_init(struct PneumoEngine* engine) { if (0 != engine) { engine->cylinders[PNEUMO_CYLINDER_Y1].input_signal[PNEUMO_CYLINDER_SIGNAL_UP] = 0; engine->cylinders[PNEUMO_CYLINDER_Y1].input_signal[PNEUMO_CYLINDER_SIGNAL_DOWN] = 0; engine->cylinders[PNEUMO_CYLINDER_Y1].output_signal = 0; ... engine->state = PneumoState_Init; engine->delay = 0; engine->timeout = 0; engine->timeouts[PneumoState_Init] = INT_MAX; engine->delays[PneumoState_Init] = INT_MAX; engine->timeouts[PneumoState_1] = TIMEOUT_DELTA(60); engine->delays[PneumoState_1] = DELAY_DELTA(78); ... } } На листинге 2.3 представлена перехода автомата из одного состояния в другое, здесь задается булевая переменная(ret), имеющая 2 значения: истина и ложь, которая меняет свое значение на ложь в случае перехода процесса симуляции на шаг исключения(PneumoState_FatalException). Переход автомата из одного состояния в другое осуществляется с помощью оператора принятия решения SWITCH, в качестве выражения подается переменная шага(state), выполняется case, константа которого равна выражению в switch. Например, на листинге 2.3, если в выражение switch будет подана 1, то выполнится case PneumoState_1, в котором мы, по условию, подаем нули на входные порты пневмоцилиндров, для того чтобы цилиндры перешли в крайнее нижнее положение и,если условие перехода соблюдено, то через заданный промежуток времени автомат перейдет на следующий шаг симуляции(PneumoState_2), иначе автомат должен перейти в PneumoState_1(по условию). Листинг 2.3 — Функция перехода автомата из одного состояния в другое bool pneumo_engine_tick(struct PneumoEngine* engine) { bool ret = true; if (0 == engine) return false; ... switch (engine->state) { case PneumoState_Init: { engine->state = PneumoState_1; engine->delay = 0; engine->timeout = 0; break; } case PneumoState_1: { engine->cylinders[PNEUMO_CYLINDER_Y1].output_signal = 0; engine->cylinders[PNEUMO_CYLINDER_Y2].output_signal = 0; engine->cylinders[PNEUMO_CYLINDER_Y3].output_signal = 0; engine->cylinders[PNEUMO_CYLINDER_Y4].output_signal = 0; engine->cylinders[PNEUMO_CYLINDER_Y5].output_signal = 0; engine->cylinders[PNEUMO_CYLINDER_Y6].output_signal = 0; engine->cylinders[PNEUMO_CYLINDER_Y7].output_signal = 0; engine->cylinders[PNEUMO_CYLINDER_Y8].output_signal = 0; if (engine->cylinders[PNEUMO_CYLINDER_Y1].input_signal[PNEUMO_CYLINDER_SIGNAL_DOWN] && engine->cylinders[PNEUMO_CYLINDER_Y2].input_signal[PNEUMO_CYLINDER_SIGNAL_DOWN] && engine->cylinders[PNEUMO_CYLINDER_Y3].input_signal[PNEUMO_CYLINDER_SIGNAL_DOWN] && engine->cylinders[PNEUMO_CYLINDER_Y4].input_signal[PNEUMO_CYLINDER_SIGNAL_DOWN] && engine->cylinders[PNEUMO_CYLINDER_Y5].input_signal[PNEUMO_CYLINDER_SIGNAL_DOWN] && engine->cylinders[PNEUMO_CYLINDER_Y6].input_signal[PNEUMO_CYLINDER_SIGNAL_DOWN] && engine->cylinders[PNEUMO_CYLINDER_Y7].input_signal[PNEUMO_CYLINDER_SIGNAL_DOWN] && engine->cylinders[PNEUMO_CYLINDER_Y8].input_signal[PNEUMO_CYLINDER_SIGNAL_DOWN]) { engine->timeout = 0; if (DELAY_GE(engine)) { engine->state = PneumoState_2; engine->delay = 0; engine->timeout = 0; } } else if (TIMEOUT_GE(engine)) { engine->state = PneumoState_1; engine->cylinders[PNEUMO_CYLINDER_Y1].output_signal = 0; engine->cylinders[PNEUMO_CYLINDER_Y2].output_signal = 0; engine->cylinders[PNEUMO_CYLINDER_Y3].output_signal = 0; engine->cylinders[PNEUMO_CYLINDER_Y4].output_signal = 0; engine->cylinders[PNEUMO_CYLINDER_Y5].output_signal = 0; engine->cylinders[PNEUMO_CYLINDER_Y6].output_signal = 0; engine->cylinders[PNEUMO_CYLINDER_Y7].output_signal = 0; engine->cylinders[PNEUMO_CYLINDER_Y8].output_signal = 0; engine->delay = 0; engine->timeout = 0; } break; } case PneumoState_2: { ... } ... case PneumoState_FatalException: { ret = false; break; } } engine->timeout++; engine->delay++; return ret; } Моделирование автомата в среде SimInTech Рисунок 2.2 ‒ Модель среды SimInTech для генерации dll Мы назначили наши переменные выходов и входов пневмоцилиндра на входные и выходные контакты модели (Рисунок 2.3). Рисунок 2.3 ‒ Основная секция кода Рисунок 2.4 ‒ Основная модель автомата Результат симуляции процесса управления автоматной модели представлен в виде графиков движения и положения всех пневмоцилиндров относительно времени на Рисунке 2.5 Рисунок 2.5 ‒ Результат симуляции Смоделируем отказ первого пневмоцилиндра и переход E = (p2, p12), для этого мы используем управляемые ключи на выходах первого пневмоцилиндра. Рисунок 2.6 ‒ Ключи на выходах первого пневмоцилиндра Перейдя на шаг p2 (y1y2y3y4y5y6y7y8) по условию все цилиндры должны перейти в крайнее верхнее положение, если условие соблюдено автомат должен был перейти на шаг p3 ( ), но ,так как мы закрыли доступ сигнала на выходах первого пневмоцилиндра, вместо этого он перешел на шаг p12 ( y3y6y7), на котором автомат перевел второй и третий пневмоцилиндры в крайнее нижнее положение(третий, шестой и седьмой пневмоцилиндры не меняли положение так, как уже находились в крайнем верхнем положении) (Рисунок 2.7). Рисунок 2.7 ‒ Результат отказа первого пневмоцилиндра и перехода процесса симуляции со второго шага на двенадцатый ЗАКЛЮЧЕНИЕ В процессе выполнения курсовой работы я получил навыки работы в среде динамического моделирования SimInTech, а также закрепил свои навыки программирования на языке Си. СПИСОК ИСПОЛЬЗОВАННЫХ ИНФОРМАЦИОННЫХ ИСТОЧНИКОВ Принцип работы пневмоцилиндра, его параметры и характеристики ‒ URL: http://pnevmodetal.ru/index.php/produktsiya/pnevmocelidr (Дата обращения: 15.12.2020) Draw.io ‒ сервис, предназначенный для формирования диаграмм и схем ‒ URL: https://app.diagrams.net/ (Дата обращения: 17.12.2020) Хлебников А.А. Курсовая работа по дисциплине АПСУ, 2020. ‒ С. 6-9, 112. |