Смекни!
smekni.com

Распределенная система терминального управления техническим объектом (стр. 14 из 15)

Определяем размеры, определяющие размещение светильников в помещении :

1) высота подвеса светильника

h = H – hc - hp,

где H = 3 м – высота помещения;

hc = 0 – свес;

hp = 1 – высота рабочей поверхности;

h = 2 (м);

2) расстояние между светильниками

L » 1.4 h » 1.4 * 2 = 2.8 (м);

3) расстояние от крайнего ряда светильников до стен при учёте, что рабочие поверхности горизонтальные и расположены у стен

l = (0.25..0.33) L = 0.25 * 2.8 = 0.7 (м).

Существует несколько методов расчёта искусственного освещения :

1) метод коэффициента использования светового потока (для расчёта общего равномерного освещения горизонтальной поверхности при светильниках любого типа);

2) точечный метод (для расчёта равномерного общего локализованного и местного освещения помещений при светильниках прямого света и наружного освещения);

3) метод «удельных мощностей» (при приближенных расчётах).

Воспользуемся методом коэффициента использования светового потока.

При принятом количестве светильников искомой величиной является необходимый световой поток одной лампы, определяемый по формуле (8.2):

(8.2)

где Ен = 150 – нормируемая минимальная освещённость, определяется по табл. 2.1 ;

S = 16 м2 – площадь освещенного помещения;

N = 4 – число светильников;

n = 4 – число ламп в светильнике;

кз = 1.4 – коэффициент запаса (принимается в пределах 1.3..2.0 в зависимости от содержания пыли в производственных помещениях с учетом регулярной очистки светильников и вида источника света);

z = 1.2 – коэффициент неравномерности освещения (1.1..1.25);

h = 0.47- коэффициент использования светового потока (зависит от индексов помещения i и значения коэффициента отражения стен и потолка rс и rп), определяется по таблице 2.2;

Индекс помещения вычисляется по формуле:

где А и В – соответственно длина и ширина помещения, м;

h = 2 м – расчётная высота подвеса светильников.

Подставляя в формулу (8.1) имеющиеся значения, получаем:

(Лм)

8.3 Вывод

Разработанное программное обеспечение должно эксплуатироваться на IBMPC/AT совместимых компьютерах в помещении, соответствующем санитарным нормам, а именно: площадью не менее 16 м2 и объёмом воздуха 15 м3. В производственном помещении в дневное время должно быть обеспечено достаточное естественное освещение, для чего необходимо расположить два окна размером 2х2 м2, а в темное время суток – искусственное освещение, в качестве источника света которого являются люминесцентные лампы (световой поток одной лампы составляет 536.2 Лм).


Заключение

В рамках дипломного проекта разработана концепция распределенной системы терминального управления робототехническим комплексом, оперирующем в зоне опасной для жизни человека. При разработке концепции использованы современные подходы к организации сбора и передачи информации. В частности рассмотрены основы использования CAN-интерфейса. Для определения коэффициентов терминального управления разработана функция вычисления коэффициентов на двух языках программирования (язык m-скриптов и на языке C++). Возможность применения синтезированного закона опробована на специально разработанной экспериментальной модели системы. Разработка модели и апробация проведены в среде инженерных расчетов Matlab. Конечным продуктом проекта является программное обеспечение пульта управления РСТУ, которое позволяет произвести вычисление коэффициентов терминального управления, построить управляющую функцию, произвести визуализацию результатов работы, создание и сохранение файла протокола, передачу расчетных данных на борт робота манипулятора по сетевому интерфейсу. При разработке учтены все требования технического задания.


Библиографический список

1. Дистанционно управляемые роботы и манипуляторы / ВС. Кулешов, Н.А Лакота, В.В. Андрюнин и др.; Под общ. Ред. Е.П. Попова. – М.Машиностроение, 1986. – 328 с. ил.

2. Батенко А.П. Системы терминального управления. – М.: Радио и связь, 1984. – 160 с., ил.

3. Медведев В.С., Лесков А.Г., Системы управления манипуляционных роботов/Под ред. Е.П. Попова. – М.: Наука, 1978 – 416 с.

4. Летов А.М. Динамика полета и управление. – М.: Наука, – 1969. – 359 с.

5. Красовский А.А. Аналитическое конструирование систем квазитерминального управления // Автоматика и телемеханика. – 1972. – №4. – С. 5-14.

6. Seal C.E., Stabberud A.R. On final value control // IEEE Trans. – 1969. – V.7 – №2. – P. 133-143.

7. Green W.G. Logarithmic navigation for precise guidance for space vehicles // IRE Trans. – 1961. – V. ANE-8 – №2 – P. 59-71.

8. Ястребов В.С., Филатов А.М. Системы управления движением робота. – М.: Машиностроение, 179. 176 с.

9. Батенко А.П. Управление конечным состоянием движущихся объектов. – М.: Сов. радио, 1977. – 256 с.

10. Батенко А.П. Конечное управление цепочкой интеграторов // Автоматика. – 1977. – №2. – С. 63-71.

11. http://www.kaskod.ru

12. http://www.mstu.edu.ru

13. Чиликин М.Г., Ключев В.И. Теория автоматизированного электропривода. – М.: Энергия, 1979. – 616 с.

14. Borland C++Builder. Программирование на С++ без проблем / Шамис В.А.. – М.: «Нолидж», 1997 – 266с., ил.

15. Программирование в среде С++Builder / Сурков К.А., Сурков Д.А., Вальвачев А.Н.. – Мн.: ООО «Попурри», 1998. – 576 с.:ил.


Приложение а

(Обязательное)

Исходные тексты основных функций

А.1 Исходный текст функции вычисления коэффициентов терминального управления на языке Matlab

% ФУНКЦИЯ РАСЧЕТА ТЕРМИНАЛЬНОГО УПРАВЛЕНИЯ

% ----------------------------------------

% ВХОДНЫЕ ПАРАМЕТРЫ:

% Xo - ВЕКТОР НАЧАЛЬНЫХ УСЛОВИЙ

% Xk - ВЕКТОР КОНЕЧНЫХ УСЛОВИЙ

% T - ВРЕМЯ ЗА КОТОРОЕ НЕОБХОДИМО ВЫПОЛНИТЬ ПЕРЕХОД

% dT - ВРЕМЯ ОПЕРЕЖЕНИЯ ФАЗОВОЙ ТОЧКИ

% ----------------------------------------

% ВЫХОДНЫЕ ПАРАМЕТРЫ:

% C - КОЭФФИЦИЕНТЫ ПАРАМЕТРОВ УПРАВЛЕНИЯ

% ----------------------------------------

function [C]=terminal_control(Xo,Xk,T,dT)

r=length(Xo); % КОЛИЧЕСТВО НАЧАЛЬНЫХ УСЛОВИЙ

n=length(Xk); % КОЛИЧЕСТВО КОНЕЧНЫХ УСЛОВИЙ

C=zeros(1,2*r+n);

%---------------------------------------------------------------% РАСЧЕТ ПАРАМЕТРОВ УПРАВЛЕНИЯ Сi

%---------------------------------------------------------------for i=0:r-1

C(i+1)=Xo(i+1)/factorial(i); % ПЕРВЫЕ r ПАРАМЕТРОВ Ci (i=0,1,...,r-1)

end

for i=r:r+n-1

summa_1=0;

summa_2=0;

for nu=0:i-1

summa_1=summa_1+factorial(r+n-nu-1)*C(nu+1)/factorial(r+n-i-1)/factorial(i-nu)/T^(i-nu);

end

for nu=0:r+n-i-1

summa_2=summa_2+((-1)^nu)*factorial(r+n-nu-1)*Xk(nu+1)/factorial(i)/factorial(r+n-i-nu-1)/factorial(nu)/T^(i-nu);

end

C(i+1)=summa_2-summa_1;

end

disp(['---------- ВЫХОДНАЯ ФУНКЦИЯ ----------'])

disp(['X(t)='])

for i=0:r+n-1

disp(['C' num2str(i) '*t^' num2str(i) '+'])

end

disp(['---------- НАЧАЛЬНЫЕ УСЛОВИЯ Xo ----------'])

for i=0:r-1

disp(['Xo(' num2str(i) ')=' num2str(Xo(i+1))])

end

disp(['---------- КОНЕЧНЫЕ УСЛОВИЯ Xk ----------'])

for i=0:n-1

disp(['Xk(' num2str(i) ')=' num2str(Xk(i+1))])

end

disp(['---------- ВРЕМЯ ----------'])

disp(['T=' num2str(T)])

disp(['---------- dT ----------'])

disp(['dT=' num2str(dT)])

disp(['---------- КОЭФФИЦИЕНТЫ Ci ----------'])

for i=0:r+n-1

disp(['C(' num2str(i) ')=' num2str(C(i+1))])

end

А.2 Исходный текст модуля вычисления коэффициентов терминального управления на языке С++

// Функции для вычисления параметров

// терминального управления v.1.0

#include <math.h>

//----------------------------------//

// ФУНКЦИЯ ВЫЧИСЛЕНИЯ ФАКТОРИАЛА N! //

//----------------------------------//

double Factorial(int n)

{

double result=1;

int i=1;

// Если аргумент функции отрицательный возвращаем -1

if (n<0) return -1;

// Расчет факториала

while (i<=n)

{

result*=i;

i++;

}

// Возвращаем результат

return result;

}

//-------------------------------------//

// ФУНКЦИЯ ВЫЧИСЛЕНИЯ ПАРАМЕТРОВ Сi //

//-------------------------------------//

// Входные параметры:

// Xo - массив начальных условий

// r - количество начальных условий

// Xk - массив конечных условий

// n - количество конечных условий

// Tk - конечное время

// Выходные параметры:

// Указатель на массив коэффициентов Ci

//-------------------------------------//

double *CoeffC(double Xo[], int r, double Xk[], int n, double Tk)

{

// Определяем массив коэффициентов

// Памать под массив необходимо очистить

// вызывающей функции delete[] Ci !!!

double *Ci = new double[r+n];

// Вычисляем первые r коэффициентов Ci

for (int i=0; i<=r-1; i++)

{

Ci[i]=(double)(Xo[i]/Factorial(i));

}

// Вычисляем оставшиеся n коэффициентов Ci

// См. Батенко А.П. "Синтез терминального управления" формула (4.16)

int v;

double sum_1, sum_2;

sum_1=sum_2=0.0;

for (int i=r; i<=r+n-1; i++)

{

for (v=0; v<=i-1; v++)

{

sum_1+=(double)(Factorial(r+n-v-1)/Factorial(r+n-i-1)/Factorial(i-v)/pow(Tk,i-v)*Ci[v]);

}

for (v=0; v<=r+n-i-1; v++)

{

sum_2+=(double)(pow(-1,v)*Factorial(r+n-v-1)/Factorial(i)/Factorial(r+n-i-v-1)/Factorial(v)/pow(Tk,i-v)*Xk[v]);

}

Ci[i]=-sum_1+sum_2;

sum_1=sum_2=0.0;

}

r=(int)sizeof(Ci)/sizeof(double);

return Ci;

}

//-------------------------------------//

А.2 Исходный текст функций программного обеспечения РСТУ

//--------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//--------------------------------------------------------------void __fastcall TForm1::bbCloseClick(TObject *Sender)

{

Close();

}

//--------------------------------------------------------------

void __fastcall TForm1::bOkClick(TObject *Sender)

{

Series1->Clear();

ListBox1->Clear();

int i, k;

String S, s;

//------------------------------------------------------------

// Ввод исходных данных для расчета

//------------------------------------------------------------ int InitConditionNum=StrToInt(Edit1->Text); // Кол-во начальных условий

int FiniConditionNum=StrToInt(Edit3->Text); // - " - конечных условий

String InitCondition=Edit2->Text;

String FiniCondition=Edit4->Text;

double T=StrToFloat(Edit5->Text);

//------------------------------------------------------------

// Формирование массива начальных условий

//------------------------------------------------------------

S=Edit2->Text;

s="";

k=0;

double *xo;

xo=new double[InitConditionNum];

for (i=1; i<=S.Length(); i++)

{

if ((S[i]!=' ')&(S[i]!='[')&(S[i]!=']'))

{

s+=S[i];

}

else

{

if (!s.IsEmpty())

{

xo[k]=StrToFloat(s);