Наименование
параметра
|
Пределы
значений параметров
|
|
Минимум (не
менее)
|
Максимум (не
более)
|
Яркость знака
(яркость фона), измеренная в темноте, кд/м2
|
35 (10)
|
120 (150)
|
Внешняя
освещенность экрана, лк
|
100 (100)
|
250 (500)
|
Угловой размер
знака, угл. мин
|
16 (16)
|
60 (60)
|
Важным фактором, определяющим степень зрительного утомления,
является так же освещенность рабочих мет и помещений, где расположены
компьютеры. Грамотное размещение компьютером в помещении и правильно
спроектированное и выполненное освещение позволяют сохранить зрение
пользователя, не создают дополнительную нагрузку на нервную систему,
обеспечивают нормальную деятельность оператора, резко уменьшают ошибки в его
работе.
Согласно Санитарным правилам, освещение в помещениях с ПК
должно быть смешанным: естественным и искусственным. Мониторы следует размещать
так, чтобы светящиеся экраны не попадали в поле зрения других операторов, и на
экранах отсутствовала прямая и отраженная блесткость естественного или
искусственного освещения. Так же согласно этим правилам, искусственное
освещение должно осуществляться системой общего равномерного освещения. В
качестве источников света при искусственном освещении должны применяться
люминесцентные лампы типа ЛБ. Освещенность на поверхности стола должна быть
300-500 лк. При этом яркость светящихся поверхностей (окна, светильники и тд.),
находящихся в поле зрения, должна быть не более 200 кд/м2.
Для благоприятных условий работы необходимо обеспечить
достаточно равномерное распределение яркости на рабочей поверхности и в
пределах окружающего пространства. Если в поле зрения находятся поверхности,
значительно отличающейся между собой по яркости, то при переводе взгляда с ярко
освещенной на слабо освещенную поверхность глаз вынужден переадаптироваться,
что ведет к утомлению зрения. Равномерность яркости достигается прежде всего
системой общего освещения, а также соответствующей окраской потолка, стен и
оборудования. Специалисты рекомендуют, чтобы стены, оборудование, мебель имели
матовое покрытие с коэффициентом отражения 0,7-0,8 от потолка и более низким от
стен и пола (0,: и 0,3 соответственно). Достигается это окраской потолка в
белый цвет, а стен - в светло-желтые и оранжево-желтые цвета.
Рассчитаем требования к освещенности рабочего места.
6.3 Расчет
освещенности рабочих мест
Для обеспечения комфортности и безопасности труда на условия
деятельности человека и окружающей среды накладываются некоторые ограничения,
которые называются санитарно-гигиеническими требованиями.
К одним из таких требованиям, предъявляемым к условиям работы
в помещении, относятся нормы освещенности рабочих мест.
Для освещения помещений общественных зданий, к которым
относится учебная лаборатория, как правило, применяют люминесцентные лампы. При
этом необходимо обеспечить следующие характеристики освещения:
нормируемая освещенность - 300 лк;
показатель дискомфорта - < 40;
коэффициент пульсации освещения < 15 %.
Для освещения рабочих мест в учебной лаборатории можно
использовать некоторые светильники серии ЛСО, ЛПО и другие. Для расчетов
возьмем светильник типа ЛСО 02-2Х40/Р-02, который имеет следующие параметры:
· тип лампы ЛБ40;
· класс светораспределения Р;
· тип КССД;
· КПД 65%;
· защитный угол 30°;
· степень защиты 20;
· климатическое исполнение У4.
Расчет количества светильников
Количество светильников указанного типа должны обеспечивать
необходимую нормируемую освещенность рабочих мест (300 лк). Для расчета числа
светильников используется формула:
= ЕnКзSz/ФлUОУ,
где
· Фл - общий световой поток, лм,
· z - неравномерность освещения,
· S - площадь помещения, м2,Кз -
коэффициент запаса,
· Еn - необходимая нормируемая
освещенность, лк,
· Uoy - коэффициент
использования.
Параметры лаборатории:= 40 м2, Кз = 1,5 (в случае
разрядных ламп), Еn = 300 лк,
Параметры светильников:= 1.1 (для люминесцентных ламп при
расположении их в виде линий).
Для определения Uoy необходимо знать индекс помещения
iп, коэффициенты отражения потолка, стен и пола, соответственно, рп,
рс и рр.
Для заданного помещения эти значения равны:п
=1.25, рп = 0.7, рс = 0,3, рр = 0.1.
Для этих значений и КСС светильника типа Д по соответствующим
таблицам было найдено значение Uoy = 0.5.
Светильник ЛСО 02-2Х40/Р-02 состоит из двух ламп ЛБ40 со
световым потоком 3200 лм, поэтому общий световой поток светильника Фл
= 2x3200 лм= 6400 лм.
Расчет п по формуле 5.1:
= (300 лк*1.5*40 м2*1.1) / (6400 лм*0.5) ≈
6.
Таким образом, для обеспечения нормальной освещенности
рабочих мест учебной лаборатории необходимы 6 светильников типа ЛСО
02-2Х40/Р-02.
6.4
Требования к параметрам дисплея
При разработке данного проекта использовался планшетный
компьютер (ноутбук) с ЖК дисплеем фирмы Fujitsu. Размер дисплея - 13,3 дюйма
(33,78 см). Рабочая разрешающая способность дисплея - 1024х768, что
соответствует стандарту XGA. Яркость монитора - 280 кд/м2, что
позволяет выставить наиболее комфортную яркость и соответствует приведенным
выше требованиям к ВДТ. Частота обновления эквивалентна 120 Гц для
ЭЛТ-мониторов (по требованиям приемлемая частота обновления - 75 Гц). Размер
пикселя - 0,269 мм.
С позиций гигиены зрения компьютер предлагают устанавливать
так, чтобы, подняв глаза от экрана, можно было увидеть самый удаленный предмет
в комнате. Возможность перевести взгляд на дальнее расстояние - один из самых
эффективных способов разгрузки зрительной системы во время работы с
компьютером.
Ноутбук позволяет устанавливать дисплей наиболее удобным для
пользователя образом. В процессе работы ноутбук был установлен на расстоянии 90
см от пользователя, что соответствует эргономическим требованиям.
Заключение
В процессе работы над проектом было произведено моделирование
и произведена реализация и функциональное тестирование отдельных модулей
компьютерной системы управления мехатронным колебательным объектом типа
"качели", представляющим собой слабоуправляемую систему.
В процессе моделирования, которое производилось с
использованием системы MatLab был выбран логический алгоритм управления. Была
спроектирована и протестирована программная модель объекта управления,
необходимая для организации виртуальной обратной связи.
Была произведена реализация логического задатчика управления
и его функциональное тестирование.
В результате была доказана принципиальная возможность
компьютерного управления слабоуправляемым объектом.
Список
использованных источников
1. Новиков
Ю.В., Калашников О.А., Гуляев С.Э. Разработка устройств сопряжения для
персонального компьютера типа IBM PC. Практ. Пособие - М: ЭКОМ., 1997 - 224 с.
2. Колесников
А.А. Синергетическая теория управления: концепция, методы, тенденции развития
// Известия ТРТУ. Тематический выпуск "Синергетика и проблемы
управления", 2001, № 5б с 7-27
. Топчиев
Б.В. Синергетическое управления мобильными роботами. "Нелинейный
мир", вып. № 4, т.2, 2004г.
. Малаян
К.Р. Безопасность при работе с компьютером - СПб: Издательство СПбГПУ, 2002 -
124с.
. Изерман,
Р. Цифровые системы управления: Пер. с англ. - М: Мир, 1984 - 542 с.
. Цыпкин,
Яков Залманович. Теория нелинейных импульсных систем - М: Наука, 1973 - 414 с.
. Черноусько
Ф.Л., Акуленко Л.Д., Соколов Б.Н. Управление колебаниями - М: Наука, 1980 -
384с.
Приложение 1.
Техническое задание
Программа "control_system"
Техническое задание
Листов 3
РП.68124-01
Аннотация
Данный документ содержит задание на разработку программы
управления мехатронным колебательным объектом типа "качели".
. Введение
Программа "control_system. c" предназначена для
управления двузвенным мини-роботом. В качестве исполнительного механизма
используется сервопривод фирмы Hitec HS-85BB+. Для разработки, загрузки и
запуск программы необходима ЭВМ с установленной ОС Linux с версией ядра 2.6.
. Основания для разработки
Программа разрабатывается для лаборатории "Электромеханические
системы".
. Назначение разработки
Программа предназначена для анализа возможности прямого
компьютерного управления сложными динамическими объектами с организацией
обратной связи через модель.
. Требования к программе
Требования к функциональным характеристикам
Программа должна выполнять следующие функции:
) вычислять текущее положение объекта управления,
используя его математическую модель
2) рассчитывать управление двигателем мини-робота по
заранее известному закону (логический закон управления)
) выдавать на LPT-порт ЭВМ управляющий сигнал в
соответствии с рассчитанным значением управления.
) считывать из конфигурационного файла параметры
управления
Требования к надежности
Программа должна выполняться в режиме реального времени. Это
осуществляется при помощи средств операционной системы.
Условия эксплуатации
Программа может функционировать в любых условиях пригодных
для эксплуатации оборудования, на котором предполагается её использовать.
Требования к составу и параметрам технических средств
Программа должна быть рассчитана на использование на ЭВМ типа
РС с процессором класса Pentium III 800 МГц и выше, ОЗУ 128 МВ, подсистемой
графического вывода типа SVGA. Обязательно наличие операционной системы Linux с
ядром версии не ниже 2.6 Связь с сервоприводом HS-85BB+ осуществляется с
помощью специального кабеля.
Требования к транспортировке и хранению
Для транспортировки и хранения должны быть использованы
накопители на основе гибких магнитных дисках класса 3,5 дюйма,
отформатированные на 1.44МВ.
. Требования к программной документации
С программой должны быть предоставлены следующие программные
документы:
) Техническое задание
2) Описание программы
) Текст программы
) Программа и методика испытаний
6. Технико-экономические показатели
С помощью программы должна быть достигнута возможность
включения в цикл лабораторных работ работы по изучению прямого компьютерного
управления. Программа не направлена на получение прямой экономической выгоды.
. Стадии и этапы разработки
Программа должна быть разработана в срок до 31.12.2008 года.
. Порядок контроля и приемки
Основные параметры приёмки:
1)
стабильность
работы при нескольких перезапусках (не менее 10 раз). Более подробно способ
проверки описан в документе "Программа и методика испытаний".
2)
Стабильность
работы при различных параметрах запуска.
Приложение 2.
Описание программы
Программа "control_system"
Описание программы
Листов 2
РП.68124-01.13 01
Аннотация
Данный документ содержит описание программы, которая
предназначена для управления двузвенным мини-роботом, представляющим собой
колебательную мехатронную систему типа "качели". Документ содержит
описание структуры программы, способов запуска программы, а так же форматов
входных данных, необходимых для корректной работы программы, и формате данных-результатов
работы программы.
. Общие сведения
Программа "control_system" предназначена для
управления двузвенным мини-роботом типа "качели", с исполнительным
механизмом - сервоприводом Hitec HS-85BB+. Программа разработана на языке C.
Для разработки, загрузки запуска программы необходима ЭВМ с установленной на
ней операционной системой Linux с версией ядра не ниже 2.6.1.1 Так же ЭВМ
должна быть оснащена параллельным (LPT) портом.
. Функциональное назначение
Программа "control_system" предназначена для управления
двузвенным мини-роботом. Программа получает данные о положении робота из
встроенной виртуальной модели, формирует управляющее воздействие в соответствии
с логическим алгоритмом управления движением маятника переменной длины и выдает
управляющее воздействие через LPT-порт на исполнительный элемент (сервопривод).
. Описание логической структуры
Описание алгоритма работы программы приведено в подразделе
4.3.
. Используемые технические средства
Программа рассчитана на использование на ЭВМ типа РС с процессором
класса Pentium III 800 МГц и выше, ОЗУ 128 МВ, подсистемой графического вывода
типа SVGA. Обязательно наличие операционной системы Linux с ядром версии не
ниже 2.6 Связь с сервоприводом HS-85BB+ осуществляется с помощью специального
кабеля.
. Вызов и загрузка
Включение питания системы осуществляется следующим образом:
· Включается ЭВМ с помощью кнопки питания
· Включается монитор
· Загружается операционная система Linux
· Если объект управления не подключен к
LPT-порту - подключается объект управления.
· Поворотом тумблера включается блок
питания. О включении должна сигнализировать красная лампа на блоке питания
· Установка готова к работе.
Вызов программы осуществляется следующим образом:
· Если программа отсутствует на ЭВМ -
необходимо скопировать ее. Каталог, в котором находится программа, далее
абсолютный путь к этой директории обозначим как %homedir.
· Проверить конфигурационный файл
"control_system. cfg" и внести необходимые изменения
· В linux shell (bash, kshell или другом)
запустить программу “%homedir/control_system. exe [time]". time -
опциональный параметр запуска программы, определяющий время выполнения
программы. По умолчанию программа будет выполняться 5 минут.
. Выходные данные
В качестве выходных данных в работе программы в выходной файл
"control_system. dat" выводятся последние 1000 точек в следующем
формате:
метка_времени положениеу правление
где положение - текущее положение системы (угол поворота
маятника), управление - угол поворота сервопривода в момент времени,
обозначенный в метке_времени (измеряется в миллисекундах с момента старта
программы).
Приложение 3.
Текст программы
Программа "control_system"
Текст программы
Листов 4
РП.68124-01.12 01
Аннотация
Данный документ содержит текст программы
"control_system", которая предназначена для управления двузвенным
мини-роботом, представляющим собой колебательную системы типа
"качели". Документ содержит тексты основного файла
"control_system. c", написанного на языке C.
Текст программы
/*********************************************************************
*
* control_system. c: программа управления сервоприводом
*
*
* Автор: Сичевая Э. А.
*
********************************************************************/
#include <stdio. h>
#include <stdlib. h>
#include <unistd. h>
#include <sched. h>
#include <errno. h>
#include <sys/io. h>
#include <pthread. h>
#include <math. h>
#define ge 9.8 // ускорение свободного падения
#define f00.5 // значение по умолчанию для начального угла
#define x04 // значение по умолчанию для начальной длины
подвеса
#define dx00 // начальная скорость подвеса
#define ro0.15 // значение по умолчанию коэффициента трения
#define hd0.0002 // значение по умолчанию для шага
интегрирования
#define md0.5 // значение по умолчанию для массы подвеса
// значения по умолчанию для геометрических параметров
объекта управления
#define l110
#define l210
#define L22
Структура для хранения информации о текущем положении точки,
а также текущем и предыдущем значении первой и второй
производной
*/struct {val;d [2];d2 [2];
} point_data;SU_Regulator (point_data*,
point_data*);SU_Converter (double x);main (int argc, char* argv [])
{
/* Для значений положения и угла */_datax, f;iter, i;h,
m;timespec TimeSpec;sched_param SchedParam;timespec ttt, ret;*pFOut;nNumIter,
nDivider;= 1000000;= 100;= hd;= md;
/*
открываем выходной файл для перезаписи
*/( (pFOut = fopen ("output. dat","w"))
== NULL)
{( (pFOut = fopen ("output. dat","a")) ==
NULL)
{("Cannot open file. failed");- 1;
}
}
/*обнуляем значения структур*/(&SchedParam, 0, sizeof
(struct sched_param));(&TimeSpec, 0, sizeof (struct timespec));(&ttt,
0, sizeof (struct timespec));(&ret, 0, sizeof (struct timespec));.
sched_priority = 2;
/*
производим вычисления
*/
/*выставляем дисциплину управления*/(sched_setscheduler (0,
SCHED_FIFO, &SchedParam))
{("Error while setting scheduler parameters, exiting.
\n");- 1;
}
/*получаем привелегии для доступа к устройствам
ввода-вывода*/(ioperm (LPT_BASE, 1, 1))
{("Error while obtaining IO permissions, exiting.
\n");- 1;
}
/*
устанавливаем начальные значения
*/. d2 [0] = 0;. d [0] = dx0;. val = x0;. d2 [0] = 0;. d [0]
= 0;. val = f0;. tv_sec = 0;. tv_nsec = 15000000;. tv_sec = 0;. tv_nsec =
66666; // количество микросекунд, приходящихся на 1 градус(iter = 0; iter <
nNumIter; iter++)
{
/*выводим 1 в 1 дата-вывод LPT-порта*/(0x01, LPT_BASE);
/*ждем до окончания импульса в зависимости от выводимого угла
(по таблице angle_var) */(i = 0; i < (int) f. val; i++)
{(&TimeSpec);
}(0x00, LPT_BASE);
/*
вычисления текущего положения модели
*/. d2 [1] = x. d [0] *f. d [0] /x. val - ge*f. val/x. val -
(ro * f. d [0]) / (m*x. val*x. val);. d [1] = f. d [0] + h/2 * (f. d2 [1] +f.
d2 [0]);. val = f. val + h/2 * (f. d [1] + f. d [0]);. d2 [0] = f. d2 [1];. d
[0] = f. d [1];(! (iter % nDivider))
{_Regulator (&x, &f);(pFOut, "%i \t %f \t %f \t
%f \t %f \t\n", iter, f. val, x. val, x. d [1], SU_Converter (x. val));
}
/*засыпаем на 15 мс*/(&ttt, NULL);
}0;
}
/**************************************************************************
*
* void SU_Regulator (point_data* x, point_data* f)
* Описание функции: Функция регулятора. Производит вычисление
*значения управляющего сигнала.
*
* Входные параметры: f - указатель на структуру типа
point_data, в
*которой хранятся значения угла подвеса,
*его скорости и ускорения
* Выходные параметры: x - указатель на структуру типа
point_data, в
*которой хранятся значения положения подвеса,
*его скорости и ускорения - сигнал управления
*
**************************************************************************/SU_Regulator
(point_data* x, point_data* f)
{_f, /* амплитуда колебаний */_ampl, /* коэффициент усиления
регулятора ускорения */_ampl, /* дополнительный коэфициент */_reg; /*
управление */,/* Знак скорости изменения угла */,/* Знак угла */x; /* Знак
ускорения изменения положения подвеса */_ampl = 5;_ampl = 0.3;
/* Вычисляем знаки углов */= (f->d [1] > 0);=
(f->val> 0);x = sDf ^ sF; /* XOR */x = sD2x * 2 - 1; /* Приводим к базису
(1; - 1) */
/* Вычисляем амплитуду угла */_f = (k_ampl*A_ampl) * (A_ampl
- fabs (f->val));>d2 [1] = ampl_f*sD2x;>d [1] = x->d [0] + h/2 *
(x->d2 [1] + x->d2 [0]);>val = x->val + h/2 * (x->d [1] +
x->d [0]);>d2 [0] = x->d2 [1];>d [0] = x->d [1];_reg = f->d
[1] * x->d [1];;
}
/**************************************************************************
*
* void SU_Regulator (point_data* x, point_data* f)
* Описание функции: Функция преобразования значения положения
подвеса
*в угол поворота исполнительного механизма.
*
* Входные параметры: x - значение положения подвеса
*
* Выходные параметры: фактический угол поворота
исполнительного механизма
*
**************************************************************************/SU_Converter
(double x)
{acos ( ( (l1*l1) + (l2*l2) - (L-x) * (L-x)) / (2*l1*l2));
}
Приложение 4.
Программа и методика испытаний
Программа "control_system"
Программа и методика испытаний
Листов 2
РП.68124-01.51 01
Аннотация
Данный документ содержит методику испытаний программы
"control_system", которая предназначена для управления двузвенным
мини-роботом типа "качели". Испытания программы представлены в пункте
4.4 пояснительной записки.
. Объект испытания
Объектом испытания выступает программа
"control_system". Программа "control_system" предназначена
для управления двузвенным мини-роботом типа "качели".
. Цель испытаний
Цель испытаний - соотсве6тствие программы техническому
заданию.
. Требования к программе
Программа должна соответствовать функциональным
характеристикам, приведенным в техническом задании.
. Требования к программной документации
К моменту испытаний должны быть представлены следующие
программные документы:
) Техническое задание
) Описание программы
) Программа и методика испытаний
. Средства и порядок испытаний
Для проведения испытаний необходимо иметь все технические
средства, указанные в описании программы.
. Программа и методика испытаний
В первую очередь необходимо произвести частичное
функциональное тестирование программы. Убедиться, что программа производит
управления сервоприводом в заданной последовательности от 0 до 180 градусов
включительно. Убедиться, что программа формирует корректный управляющий сигнал.
. Представление результатов испытаний
Представление удобнее всего делать с помощью графиков,
формируемых из данных, выводимых в файл результатов программы.
Приложение 5.
Текст программы тестовой модели
/*********************************************************************
*
* control_model. cpp: файл содержит функции, используемые для
исследования
*корректности модели робота и дискретной системы
*управления.
*
* Автор: Сичевая Э. А.
*
********************************************************************/
#include "stdafx. h"
#include "math. h"
#define ge 9.8
#define f00.5
#define x04
#define dx00
#define ro0.15
#define h0.0002
#define m0.5
#define h0.0002
#define l11
#define l21
#define L4
/*
Структура для хранения информации о текущем положении точки,
а также текущем и предыдущем значении первой и второй
производной
*/struct {val;d [2];d2 [2];
} point_data;SU_Regulator (point_data*,
point_data*);SU_Converter (double x);main (int argc, char* argv [])
{
/* Для значений положения и угла */_datax,
f;iter;*pFOut;nNumIter, nDivider;
/*
считываем аргументы командной строки,
иначе - заполняем значениями по умолчанию
*/= 1000000;= 100;
/*
устанавливаем начальные значения
*/. d2 [0] = 0;. d [0] = dx0;. val = x0;. d2 [0] = 0;. d [0]
= 0;. val = f0;
/*
открываем выходной файл для перезаписи
*/( (pFOut = fopen ("output. dat","w"))
== NULL)
{( (pFOut = fopen ("output. dat","a")) ==
NULL)
{("Cannot open file. failed");- 1;
}
}
/*
производим вычисления
*/(iter = 0; iter < nNumIter; iter++)
{
/*
вычисления текущего положения модели
*/. d2 [1] = x. d [0] *f. d [0] /x. val - ge*f. val/x. val -
(ro * f. d [0]) / (m*x. val*x. val);. d [1] = f. d [0] + h/2 * (f. d2 [1] +f.
d2 [0]);. val = f. val + h/2 * (f. d [1] + f. d [0]);. d2 [0] = f. d2 [1];. d
[0] = f. d [1];(! (iter % nDivider))
{_Regulator (&x, &f);(pFOut, "%i \t %f \t %f \t
%f \t %f \t\n", iter, f. val, x. val, x. d [1], SU_Converter (x. val));
}
}0;
}
/**************************************************************************
*
* void SU_Regulator (point_data* x, point_data* f)
* Описание функции: Функция регулятора. Производит вычисление
*значения управляющего сигнала.
*
* Входные параметры: f - указатель на структуру типа
point_data, в
*которой хранятся значения угла подвеса,
*его скорости и ускорения
* Выходные параметры: x - указатель на структуру типа
point_data, в
*которой хранятся значения положения подвеса,
*его скорости и ускорения - сигнал управления
*
**************************************************************************/SU_Regulator
(point_data* x, point_data* f)
{_f, /* амплитуда колебаний */_ampl, /* коэффициент усиления
регулятора ускорения */_ampl, /* дополнительный коэфициент */_reg; /*
управление */,/* Знак скорости изменения угла */,/* Знак угла */x; /* Знак
ускорения изменения положения подвеса */_ampl = 5;_ampl = 0.3;
/* Вычисляем знаки углов */= (f->d [1] > 0);=
(f->val> 0);x = sDf ^ sF; /* XOR */x = sD2x * 2 - 1; /* Приводим к базису
(1; - 1) */
/* Вычисляем амплитуду угла */_f = (k_ampl*A_ampl) * (A_ampl
- fabs (f->val));>d2 [1] = ampl_f*sD2x;>d [1] = x->d [0] + h/2 *
(x->d2 [1] + x->d2 [0]);>val = x->val + h/2 * (x->d [1] +
x->d [0]);>d2 [0] = x->d2 [1];>d [0] = x->d [1];_reg = f->d
[1] * x->d [1];;
}
/**************************************************************************
*
* void SU_Regulator (point_data* x, point_data* f)
* Описание функции: Функция преобразования значения положения
подвеса
*в угол поворота исполнительного механизма.
*
* Входные параметры: x - значение положения подвеса
*
* Выходные параметры: фактический угол поворота
исполнительного механизма
*
**************************************************************************/SU_Converter
(double x)
{acos ( ( (l1*l1) + (l2*l2) - (L-x) * (L-x)) / (2*l1*l2));
}
Приложение 6.
Текст программы программного управления сервоприводом
/*********************************************************************
*
* model. cpp: программа управления сервоприводом
*
*
* Автор: Сичевая Э. А.
*
********************************************************************/
#include "stdafx. h"
#include <math. h>
#define ge 9.8 // ускорение свободного падения
#define f00.5 // значение по умолчанию для начального угла
#define x04 // значение по умолчанию для начальной длины
подвеса
#define dx00 // начальная скорость подвеса
#define ro0.15 // значение по умолчанию коэффициента трения
#define h0.0002 // значение по умолчанию для шага
интегрирования
#define m0.5 // значение по умолчанию для массы подвеса
// значения по умолчанию для геометрических параметров
объекта управления
#define l110
#define l210
#define L22
/*
Структура для хранения информации о текущем положении точки,
а также текущем и предыдущем значении первой и второй
производной
*/struct {val;d [2];d2 [2];
} point_data;SU_Regulator (point_data*,
point_data*);SU_Converter (double x);main (int argc, char* argv [])
{
/* Для значений положения и угла */_datax, f;iter, i;h,
m;*pFOut;nNumIter, nDivider;= 1000000;= 100;
/*
открываем выходной файл для перезаписи
*/( (pFOut = fopen ("output. dat","w"))
== NULL)
{( (pFOut = fopen ("output. dat","a")) ==
NULL)
{("Cannot open file. failed");- 1;
}
}
/*
производим вычисления
*/
/*
устанавливаем начальные значения
*/. d2 [0] = 0;. d [0] = dx0;. val = x0;. d2 [0] = 0;. d [0]
= 0;. val = f0;(iter = 0; iter < nNumIter; iter++)
{
/*
вычисления текущего положения модели
*/. d2 [1] = x. d [0] *f. d [0] /x. val - ge*f. val/x. val -
(ro * f. d [0]) / (m*x. val*x. val);. d [1] = f. d [0] + h/2 * (f. d2 [1] +f.
d2 [0]);. val = f. val + h/2 * (f. d [1] + f. d [0]);. d2 [0] = f. d2 [1];. d
[0] = f. d [1];(! (iter % nDivider))
{_Regulator (&x, &f);(pFOut, "%i \t %f \t %f \t
%f \t %f \t\n", iter, f. val, x. val, x. d [1], SU_Converter (x. val));
}
}0;
}
/**************************************************************************
*
* void SU_Regulator (point_data* x, point_data* f)
* Описание функции: Функция регулятора. Производит вычисление
*значения управляющего сигнала.
*
* Входные параметры: f - указатель на структуру типа
point_data, в
*которой хранятся значения угла подвеса,
*его скорости и ускорения
* Выходные параметры: x - указатель на структуру типа
point_data, в
*которой хранятся значения положения подвеса,
*его скорости и ускорения - сигнал управления
*
**************************************************************************/SU_Regulator
(point_data* x, point_data* f)
{_f, /* амплитуда колебаний */_ampl, /* коэффициент усиления
регулятора ускорения */_ampl, /* дополнительный коэфициент */_reg; /*
управление */,/* Знак скорости изменения угла */,/* Знак угла */x; /* Знак
ускорения изменения положения подвеса */_ampl = 5;_ampl = 0.3;
/* Вычисляем знаки углов */= (f->d [1] > 0);=
(f->val> 0);x = sDf ^ sF; /* XOR */x = sD2x * 2 - 1; /* Приводим к базису
(1; - 1) */
/* Вычисляем амплитуду угла */_f = (k_ampl*A_ampl) * (A_ampl
- fabs (f->val));>d2 [1] = ampl_f*sD2x;>d [1] = x->d [0] + h/2 *
(x->d2 [1] + x->d2 [0]);>val = x->val + h/2 * (x->d [1] +
x->d [0]);>d2 [0] = x->d2 [1];>d [0] = x->d [1];_reg = f->d
[1] * x->d [1];;
}
/**************************************************************************
*
* void SU_Regulator (point_data* x, point_data* f)
* Описание функции: Функция преобразования значения положения
подвеса
*в угол поворота исполнительного механизма.
*
* Входные параметры: x - значение положения подвеса
*
* Выходные параметры: фактический угол поворота
исполнительного механизма
*
**************************************************************************/SU_Converter
(double x)
{acos ( ( (l1*l1) + (l2*l2) - (L-x) * (L-x)) / (2*l1*l2));
}