Лабораторная работа №1 АЛГОРИТМ ИНТЕРПОЛЯЦИИ ДЛЯ КОМПЬЮТЕРНЫХ УЧПУ | |
Автор: drug | Категория: Прочее | Просмотров: | Комментирии: 0 | 19-09-2013 23:33 |
Скачать:
Лабораторная работа №1
АЛГОРИТМ ИНТЕРПОЛЯЦИИ ДЛЯ КОМПЬЮТЕРНЫХ УЧПУ
Вариант 9.
1) Цель работы:
Цель данной работы – освоение методики написания и отладки программ на языке
«МАКРОАССЕМБЛЕР». В этой работе студенты разрабатывают и отлаживают на ЭВМ
программу круговой интерполяции, приближенной к реальной.
2) Краткое описание алгоритма круговой интерполяции.
Решение задачи круговой интерполяции для компьютерных УЧПУ сводится к вращению
радиус-вектора R (рис.1) вокруг начала координат по часовой стрелке или против часовой
стрелки. За один цикл интерполяции, определяемый периодом таймера T , радиус-вектор
R поворачивается на некоторый угол h, называемый шагом интерполяции.
В математической форме алгоритм круговой интерполяции можно представить в
виде следующих рекуррентных уравнений:
В математической форме алгоритм круговой интерполяции можно представить в виде следующих рекуррентных уравнений:
(1)
где Xi, Yi – координаты текущей точки окружности;
DXi+1, DYi+1 – приращения координат при повороте радиус–вектора из
i-й в i+1-ю точку окружности;
hS, hC – разложенные в ряд Тейлора функции Sin(h) и Cos(h)-1.
(2)
Координаты новой точки окружности находятся на основании координат предыдущей по формулам:
(3)
Рис.1. Схема круговой интерполяции в направлении против часовой
стрелки.
Шаг интерполяции h определяет скорость движения инструмента по дуге окружности. Эту скорость можно определить как путь DS, который проходит инструмент за время, равное периоду таймера Т. Если задана скорость подачи F, то шаг интерполяции h легко рассчитать по формуле:
, (4)
где F – подача, мм/мин;
Т – период таймера, с;
R – радиус окружности, мм.
Чтобы изменить направление интерполяции достаточно поменять знак hна обратный.
Программа должна быть составлена на языке АССЕМБЛЕР. Все арифметические
действия должны выполняться в режиме с фиксированной запятой.
Диспетчер для управления программой интерполяции и для ввода-вывода данных
может быть написан на языке высокого уровня, например, на языке PASCAL.
Чтобы обеспечить необходимую точность вычислений при работе ЭВМ в режиме с
фиксированной запятой следует предусмотреть процедуру нормализации чисел
участвующих в вычислениях. Наибольшая точность вычислений получается тогда, когда
значения величин близки к максимальному числу, которое может быть записано в
заданную разрядную сетку машинного слова.
Входящие в формулу (1) значения hs и hc много меньше единицы. Поэтому
значения hs и hc умножим на масштабные коэффициенты так, чтобы количество
незначащих нулей в старших разрядах машинных слов свести к возможному минимуму.
На АССЕМБЛЕРЕ удобно работать с целыми числами, чтобы достичь этой цели
достаточно при нормализации величин выбрать масштабные коэффициенты,
соответствующие разрядной сетке машинного слова. Мы будем применять машинные
слова одинарной длины – 16 бит и двойной длины – 32 бита.
3) Код программы на языке «МАКРОАССЕМБЛЕР».
TITLE LAB_1
SSEG SEGMENT PARA STACK 'STACK'
DB 64 DUP('STACK')
SSEG ENDS
DATA SEGMENT PARA PUBLIC 'DATA'
;-------------Массивы ------------------
tabl_xdW 1000 dup(0)
tabl_ydW 1000 dup(0)
tabl_zdW 1000 dup(0)
;------------- Переменные ---------------
X0 DW 10000
Y0 DW 0
X DD 0
Y DD 0
DELX DD 0
DELY DD 0
HSN DW 35138
HCN DW -37680
rab_1 dd ?
rab_2 dd ?
counterdw ?
zvonokdb 7
cycledw 60 ;Числоцикловинтерполяции
zagrubdw 100
cycle1 dw 150 ;Число строк в таблице вывода
DATA ENDS
CODE SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CODE, DS:DATA, SS:SSEG, ES:DATA
INTPL PROC FAR
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX
mov word ptr rab_2,0
mov bx,0
;-------Загpузка X,Y---------------
MOV AX,X0
MOV WORD PTR X+2,AX
MOV AX,Y0
MOV WORD PTR Y+2,AX
;----Вычисление приращений по Х-----
INTR: MOV AX,HCN
IMUL X0 ;X0*HCN
MOV CL,3 ;Деноpмализация
SAR DX,CL
MOV AX,DX
CWD
MOV WORD PTR DELX,AX
MOV WORD PTR DELX+2,DX
MOV AX,HSN
IMUL Y0 ;Y0*HSN
MOV AL,AH ;Деноpмализация
MOV AH,DL
MOV CL,8
SAR DX,CL
ADD WORD PTR DELX,AX
ADC WORD PTR DELX+2,DX
;---Вычисление приращений по Y-----
MOV AX,HCN
IMUL Y0 ;Y0*HCN
MOV CL,3 ;Деноpмализация
SAR DX,CL
MOV AX,DX
CWD
MOV WORD PTR DELY,AX
MOV WORD PTR DELY+2,DX
MOV AX,HSN
IMUL X0 ;X0*HSN
MOV AL,AH
MOV AH,DL ;Деноpмализация
MOV CL,8
SAR DX,CL
SUB WORD PTR DELY,AX ;
SBB WORD PTR DELY+2,DX ;
;-----Вычислениеновыхкоординат-----
MOV AX,WORD PTR DELX
MOV DX,WORD PTR DELX+2
ADD WORD PTR X,AX
ADC WORD PTR X+2,DX
MOV AX,WORD PTR DELY
MOV DX,WORD PTR DELY+2
ADD WORD PTR Y,AX
ADC WORD PTR Y+2,DX
;-------Фоpмиpование X0,Y0--------
MOV AX,WORD PTR X+2
MOV X0,AX
MOV AX,WORD PTR Y+2
MOV Y0,AX
inc word ptr rab_2
movax,zagrub
cmp word ptr rab_2,ax
jne kr_5
mov ax,x0
movtabl_x[bx],ax
mov ax,y0
movtabl_y[bx],ax
movax,wordptr x
movtabl_z[bx],ax
jmp kr_6
kr_5: jmpintr
kr_6: and wordptr rab_2,0000h
add bx,2 ;
inc counter ;
movax,cycle
cmpcounter,ax ;числоциклов
je intr1 ; интерполяции
jmpintr
intr1:
;-----------------------------------------------
mov ah,40h ;
mov bx,1 ; Звуковой
lea dx,zvonok ; сигнал
mov cx,1 ;
int 21h ;
;-------- Подпрограмма вывода результатов ---------
tstproc
mov si,0
mov counter,0
m_10: movax,wordptrtabl_x[si]
test ax,8000h
jz m_4
neg ax
movcx,ax
mov dl,'-'
call display
movax,cx
jmp short m_5
m_4: movcx,ax
mov dl,' '
call display
movax,cx
m_5: call bintodec
callshstring
movax,wordptrtabl_y[si]
test ax,8000h
jz m_6
neg ax
movcx,ax
mov dl,'-'
call display
movax,cx
jmp short m_7
m_6: movcx,ax
mov dl,' '
call display
movax,cx
m_7: call bintodec
callshstring
movax,wordptrtabl_z[si]
test ax,8000h
jz m_8
neg ax
movcx,ax
mov dl,'-'
call display
movax,cx
jmp short m_9
m_8: movcx,ax
mov dl,' '
call display
movax,cx
m_9: call bintodec
callcrlf
incsi
incsi
inc counter
movax,cycle
cmpcounter,ax ;числоциклов
jne m_10
mov ah,1
int 21h
ret
tstendp
;-------------------------------------
;--П/П "двоичное в десятичное"--------
bintodecproc
mov bx,10000
call show
mov bx,1000
call show
mov bx,100
call show
mov bx,10
call show
add al,'0'
movdl,al
call display
ret
bintodecendp
;----П/П "деление"----------------------
showproc
mov dx,0
div bx
movdi,dx
add al,'0'
movdl,al
call display
movax,di
ret
showendp
;---П/П "вывод на экран"-----------------
displayproc
mov ah,2
int 21h
ret
displayendp
;---П/П "пробелмеждустолбцами"---------
shstringproc
mov dl,' '
call display
mov dl,' '
call display
mov dl,' '
call display
mov dl,' '
call display
mov dl,' '
call display
mov dl,' '
call display
ret
shstringendp
;----П/П "курсор в начало строки"------
crlfproc
mov dl,10
call display
mov dl,13
call display
ret
crlfendp
;--------------------------
RET
INTPL ENDP
CODE ENDS
END INTPL
4) Результаты испытаний
1) режим интерполяции в направлении по часовой стрелке.
Вводим в программу входные значения:
;------------- Переменные ---------------
;------------- Переменные ---------------
X0 DW 10000
Y0 DW 0
X DD 0
Y DD 0
DELX DD 0
DELY DD 0
HSN DW 17569
HCN DW -18840
rab_1 dd ?
rab_2 dd ?
counterdw ?
zvonokdb 7
cycledw 120 ;Числоцикловинтерполяции
zagrubdw 100
cycle1 dw 300 ;Число строк в таблице вывода
Построим график траектории y y(x) в программе MathCad (Рисунок 1):
Рисунок 1 - График траектории y y(x) в направлении интерполяции по часовой стрелке
2) режим интерполяции в направлении против часовой стрелки.
Вводим в программу входные значения:
;------------- Переменные ---------------
X0 DW 10000
Y0 DW 0
X DD 0
Y DD 0
DELX DD 0
DELY DD 0
HSN DW -18840
HCN DW 17569
rab_1 dd ?
rab_2 dd ?
counterdw ?
zvonokdb 7
cycledw 120 ;Числоцикловинтерполяции
zagrubdw 100
cycle1 dw 300 ;Число строк в таблице вывода
Построим график траектории y y(x) в программе MathCad (Рисунок 2):
Рисунок 2 - График траектории y y(x) в направлении интерполяции против часовой стрелки
Увеличим шаг интерполяции в 2 раза.
3) режим интерполяции в направлении по часовой стрелке.
Вводим в программу входные значения:
;------------- Переменные ---------------
;------------- Переменные ---------------
X0 DW 10000
Y0 DW 0
X DD 0
Y DD 0
DELX DD 0
DELY DD 0
HSN DW 35138
HCN DW -37680
rab_1 dd ?
rab_2 dd ?
counterdw ?
zvonokdb 7
cycledw 60 ;Числоцикловинтерполяции
zagrubdw 100
cycle1 dw 150 ;Число строк в таблице вывода
Рисунок 3 - График траектории y y(x) в направлении интерполяции по часовой стрелке с увеличенным
шагом в 2 раза
4) режим интерполяции в направлении по часовой стрелке.
Вводим в программу входные значения:
;------------- Переменные ---------------
X0 DW 10000
Y0 DW 0
X DD 0
Y DD 0
DELX DD 0
DELY DD 0
HSN DW -37680
HCN DW 35138
rab_1 dd ?
rab_2 dd ?
counterdw ?
zvonokdb 7
cycledw 120 ;Числоцикловинтерполяции
zagrubdw 100
cycle1 dw 300 ;Число строк в таблице вывода
Рисунок 4 - График траектории y y(x) в направлении интерполяции против часовой стрелки с
увеличенным шагом в 2 раза
5)В точках пересечения окружности с осями координат Х и Y зафиксируем
значения погрешности интерполяции. Данные занесем в таблицу 1. Таблица 1.
Режим интерполяции |
Номер точки |
||||
1 |
2 |
3 |
4 |
||
N=6000 |
G02 |
00000;-10000 |
-10000;00000 |
00000;10000 |
10000;00000 |
G03 |
00040;-10048 |
-10096;-00080 |
00094;-10112 |
10128;00108 |
|
N=12000 |
G02 |
-00599;10004 |
-10022;00617 |
-00016;10063 |
00637;10085 |
G03 |
-10008;00131 |
10015;-00262 |
00504;-10010 |
-10020;00393 |
6)Вывод по работе: освоили методики написания и отладки программ на языке
«МАКРОАССЕМБЛЕР». В этой работе разработали и отладили на ЭВМ программу
круговой интерполяции, приближенной к реальной. Наиболее точным является режим
интерполяции в направлении по часовой стрелке при шаге интерполяции, равным 6000.
- Что входит в раздел Functions & Tables?
- Задачи для подготовки к контрольной работе для студентов специальности МИ Ветвление
- Лабораторная работа "освоение обработки экспериментальных данных методом наименьших квадратов."
- ЛАБОРАТОРНАЯ РАБОТА РЕШЕНИЕ ЗАДАЧИ КОШИ МЕТОДОМ ЭЙЛЕРА
- Освоение метода многомерной оптимизации Гаусса-Зейделя.