Лабораторная работа №1 АЛГОРИТМ ИНТЕРПОЛЯЦИИ ДЛЯ КОМПЬЮТЕРНЫХ УЧПУ
Автор: drug | Категория: Прочее | Просмотров: | Комментирии: 0 | 19-09-2013 23:33

Скачать: ksu.zip [237,88 Kb] (cкачиваний: 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.

 

Сочинения курсовыеСочинения курсовые