книги / Разработка Windows- приложения на C для комплекта ROBOX. Идентификация сервопривода
.pdfСоставитель:
канд. техн. наук, доцент кафедры автоматики и телемеханики Н.В. Андриевская
УДК 007.52 Р177
Рецензент:
д-р техн. наук, профессор С. Ф. Тюрин (Пермский национальный исследовательский политехнический университет)
Разработка windows-приложения на «С» для комплекта Р177 robox. Идентификация сервопривода : метод, указания к лабо раторной работе № 6 / сост. Н.В. Андриевская. - Пермь : Изд-
во Перм. нац. исслед. политехи, ун-та, 2021. - 20 с.
ISBN 978-5-398-02559-0
Рассмотрен шестой этап создания в ШЕ Pelles С диалогового приложения, позволяющего создать модель сервопривода. На этом этапе снимаются экспериментальные данные по угловой скорости сервопривода и рассчитывается модель сервопривода для дальней шего расчета регулятора угловой скорости сервопривода.
Издание ориентировано на студентов бакалавриата и магистра туры, направлений 27.03.04 и 27.04.04 «Управление в технических системах», 15.03.06 и 15.04.06 - «Мехатроника и робототехника», а также студентов других направлений и специальностей техниче ского профиля.
УДК 007.52
ISBN 978-5-398-02559-0 |
©ПНИПУ, 2021 |
|
СОДЕРЖАНИЕ |
|
1. |
Разработка функции снятия кривой разгона сервопривода |
.............4 |
2. Расчет модели сервопривода................................................................... |
8 |
|
|
2.1. Ввод экспериментальных данных................................................... |
8 |
|
2.2. Вызов графического интерфейса |
|
|
System Identification Toolbox................................................................. |
10 |
|
2.3. Импорт экспериментальных данных........................................... |
10 |
|
2.4. Построение модели........................................................................... |
13 |
|
2.5. Анализ моделей................................................................................. |
16 |
3. Ход выполнения работы ........................................................................ |
19 |
1 . РАЗРАБОТКА ФУНКЦИИ СНЯТИЯ КРИВОЙ
РАЗГОНА СЕРВОПРИВОДА
1.1. Разработать функцию void StartAccCurve (void) запуска экс перимента, формирующего данные необходимые для расчета моде ли сервопривода.
а) Объявить следующие глобальные переменные.
Указатель на файл, в котором будут сохраняться результаты эксперимента в текстовом формате:
static FILE*file;
Счетчик точек кривой разгона:
static UINT16 CurveCnt;
Флаг разрешения рисования кривой разгона в окне приложения:
static UINT8 DrawAccCurveEn;
Предыдущие координаты в окне приложения точки кривой разгона:
static POINT ср;
Время старта снятия кривой разгона:
static DWORD t start;
Целевая скорость разгона:
static INT 16 Speed;
Флаг достижения целевой скорости при разгоне:
static UINT8 AccTimeOK;
б) Объявить координаты начала рисования кривой разгона, на пример:
#define Xi_OFFSET 370
#defme Yi OFFSET 350
в) Шаблон функции запуска снятия кривой разгона:
static void StartAccCurve(void)
{
int i;
char text[16]; char *endptr;
if (CurveCnt==0){
file=fopen("AccCurve.txt",Mw+");//oTKpbiTHe файла для записи рез. cp.x=Xi_OFFSET ;
cp.y=Yi_OFFSET ;
Установить режим работы сервопривода SPEED. Нарисовать горизонтальную ось (время) кривой разгона. Включить двигатель.
DrawAccCurveEn=l;
TimerEn=l;
Считать из элемента редактирования с идентификатором
IDPOINT значение целевой скорости вращения (в переменную
Speed), коэффициенты пропорциональной, интегральной и диффе
ренциальной составляющей ПИД-регулятора. Установить значения коэффициентов.
/ГУстановка целевой скорости. set_point(MbCom.hCOM,servo_addr,Speed);
//Чтение текущего времени t_start = timeGetTime();
// Кривая разгона снимается с шагом 100 мс SetTimer(ghwndDlg,2,100,NULL); AccTimeOK=0;
}else{
Выключить двигатель.
KillTimer(ghwndDlg, 2);
TimerEn=0;
DrawAccCurveEn=0;
CurveCnt=0;
fclose(file);
}
}
1.2. Разработать функцию static void DrawAccCurvefvoia), отобра жающую в окне приложения очередную точку эксперимента и записывающую ее значение в текстовый файл. В файл также записы вать момент времени, когда сервопривод достигнет целевой скорости.
static void DrawAccCurve(void)
{
char text[64]; DWORD t; float f;
if(DrawAccCurveEn){
CurveCnt++;
if (CurveCnt>249){ CurveCnt=0; DrawAccCurveEn=0;
Выключить двигатель.
Закрыть файл с результатами эксперимента;
}else{
t = timeGetTimeO;
f = ((float)t -(float) t_start)/1000;
if (ServoData.speed>=Speed&&AccTimeOK==0) { AccTimeOK=l;
sprintf(text,"Acceleration Time=%2.1f sec\r\n", f);
ErrorMessageList (text);
Fwrite(text,l,strlen(text),file);
}
sprintf(text,"%d: %d\r\n", CurveCnt,ServoData.speed);
fwrite(text,l,strlen(text),fîle);
Нарисовать текущую точку кривой в окне приложения, соеди нив ее с предыдущей.
cp.x=Xi_OFFSET+ CurveCnt; cp.y=Yi_OFFSET-abs(ServoData.speed)*8;
}
}
}
Функцию AccDrawCurve вызывать в обработчике таймера 2 по сле вывода считанных параметров сервопривода в соответствующие текстовые элементы окна приложения.
1.3. В case WM INITDIALOG вписать в Combo-box с именем
ЮМОDESELECT строку 13 с текстом-подсказкой о снятии кривой разгона сервопривода:
SendDlgItemMessage(hwndDlg, IDMODESELECT,
CBJNSERTSTRING, 13,
(LPARAM)"13-AccCurve");
Дописать действия по нажатию кнопки с именем 1DSETMODE - вызов выбранной из списка с именем IDMODESELECT функции сня тия кривой разгона сервопривода:
case IDSETMODE: i=SendDlgItemMessage(hwndDlg, IDMODESELECT,
CB_GETCURSEL, 0, 0); switch (i)
{
case 0:
II...
break;
case 8:
II...
break;
case 13:
StartAccCurve();
break;
2.РАСЧЕТ МОДЕЛИ СЕРВОПРИВОДА
Расчет осуществляется с помощью прикладного программного пакета System Identification Toolbox в программной среде MATLAB
2.1. Ввод экспериментальных данных
Построение модели начинается с формирования эксперимен тальных данных в виде файлов.
В качестве эксперимента выбраны следующие исходные дан ные САУ :
Г0 =0.1 К п = 0 £ „ = 0 .0 1 Кд = 0
Исходные данные для идентификации оформлены в виде табл. 2.1.
|
|
Таблица 2.1 |
|
Исходные данные для идентификации |
|
t |
X |
У |
0.0 |
10 |
0 |
0.1 |
10 |
2 |
0.2 |
10 |
3 |
0.3 |
10 |
4 |
0.4 |
10 |
5 |
0.5 |
10 |
6 |
0.6 |
10 |
7 |
0.7 |
10 |
7 |
0.8 |
10 |
7 |
0.9 |
10 |
7 |
1.0 |
10 |
8 |
1.1 |
10 |
8 |
1.2 |
10 |
8 |
1.3 |
10 |
9 |