АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Примеры программного кода библиотечных функций

Читайте также:
  1. Автоматизация функций в социальной работе
  2. АНАЛИЗ ФУНКЦИЙ СПЕЦИАЛИСТОВ ПО СТРАТЕГИЧЕСКОМУ МЕНЕДЖМЕНТУ И ПОЛНОМОЧИЙ ОРГАНОВ УПРАВЛЕНИЯ ОРГАНИЗАЦИИ, ПРИНИМАЮЩИХ СТРАТЕГИЧЕСКИЕ РЕШЕНИЯ.
  3. Анализ функций управления
  4. Б) Вычисление тригонометрических функций.
  5. Ввод функций вручную
  6. Взаимная ортогональность собственных функций эрмитовых операторов
  7. Взаимосвязь правопорядка и функций государства
  8. Возрастание и убывание функций. Экстремумы функции
  9. Вопрос 17 Принципы,функций и формы оплаты труда
  10. Вопрос 9 цели и функций системы управления
  11. Вопрос35. Предел Функции в точке и на бесконечности. Геометрическая иллюстрация определений. Предел постоянной. Предел суммы, частного, произведения. Предел элементарных функций.
  12. Вопрос5 Функций управления: понятие,квалификация и характеристика

(библиотека camlib.cpp) [9]

void Numb(int Num) /* Функция устанавливает номер активного контроллера крейта */

{ _outp(0x3AF,Num);

_outp(0x3A7,1); }

void Zero(void) /* Функция инициализирует операцию Z (общий сброс) в активном крейте. Используется после функции Numb */

{ _outp(0x3A6,1);

_outp(0x3A7,1); }

void Clear(void) /*Функция инициализирует операцию C (селективный сброс) в активном крейте. Используется после функции Numb */

{ _outp(0x3A6,2);

_outp(0x3A7,1); }

}

void Act(int N, int A, int F) /* Функция инициализирует операцию управления без передачи данных в адресуемом функциональном модуле в активном крейте */

{

_outp(0x3A5,N);

_outp(0x3A3,A);

_outp(0x3A4,F);

_outp(0x3A7,1);

}

void ActW1B(int N, int A, int F, int dat1) /* Функция инициализирует операцию передачи (записи) однобайтового слова данных из компьютера в адресуемый функциональный модуль в активном крейте */

{

_outp(0x3A5,N);

_outp(0x3A3,A);

_outp(0x3A4,F);

_outp(0x3A2,dat1);

_outp(0x3A7,1);

}

void ActR1B(int N, int A, int F, int *dat1) /* Функция инициализирует операцию передачи (чтения) однобайтового слова данных из адресуемого функционального модуля в активном крейте в компьютер */

{

_outp(0x3A5,N);

_outp(0x3A3,A);

_outp(0x3A4,F);

_outp(0x3A7,1);

*dat1=_inp(0x3AB);

}

 


/****************************************************************************/

/* Программа формирует пилообразное напряжение. Используется */

/*модуль 2ЦАП-10. Язык программирования – C++ */

/***************************************************************************/

#include <utility.h>

#include “camlib.h”

#include <windows.h>

 

int i,DAC = 12;

 

void main ()

{

Numb(48);Zero;Clear; /*Начальная инициализация аппаратуры САМАС*/

for(;;)

{

for (i=0; i<1024;i++)

{

/*Передача нарастающего кода i модулю 2ЦАП-10*/

ActW2B(DAC,0,17,i);

Sleep(1);

}

}

}

/*******************************************************/

/* Программа тестирования аппаратуры САМАС. */

/* Проверяется работа модулей 2ЦАП-10 и АЦП-14 */

/* Выход модуля 2ЦАП-10 соединен со входом АЦП-14 */

/*******************************************************/

#include <utility.h>

#include <camlib.h>

 

int ADC = 9, DAC = 12;

unsigned int data;

double y[1024];

int datain, dataout, i;

 

void main ()

{

Numb(48);Zero;Clear; /*Начальная инициализация аппаратуры САМАС*/

for (i=0;i<100;i++)

{

datain=i;

ActW2B(DAC,0,17,datain);

Act(ADC,0,25);

Delay(0.1);

ActR2B(ADC,0,0,&dataout);

y[i]=dataout/1.0;

}

}

 

 

/*****************************************************************/

/* Программа иллюстрирует использование функций библиотеки */

/* управления САМАС-аппаратурой в программах автоматизации: */

/* эксперимента. Программа формирует, используя модуль 2ЦАП-10, */

/* входное воздействие на объект управления */

/* Для управления аппаратурой САМАС в проект включен файл camlib.c, */

/* содержащий библиотеку функций управления аппаратурой САМАС */

/*****************************************************************/

#include <utility.h>

#include <userint.h>

#include <analysis.h>

#include <ansi_c.h>

#include "sample2.h"

#include "camlib1.h"

 

int handle;

double datapoints[1000];

double data_adc[1000];

 

main()

{

handle = LoadPanel (0, "sample2.uir", PANEL);

DisplayPanel (handle);

RunUserInterface ();

}

int AcquireData(int panel, int control, int event, void *callbackData, int eventData1, int eventData2)

{

int trace_color, shape, i, j, dat;

double phase=90;

int DAC=10, RUR=15, ADC=12, COM=9, C=48;

int dat_adc, dadc;

 

if (event == EVENT_COMMIT) {

/*Выбор вида и формирование входного воздействия на объект*/

GetCtrlVal (handle, PANEL_WFM, &shape);

switch (shape) {

case 0:

SineWave (128, 1.0, 50e-3, &phase, datapoints);

for (i=0;i<100;i++) datapoints[i]=datapoints[i]*50+50;

break;

case 1:

SquareWave (128, 1.0, 50e-3, &phase, 50.0, datapoints);

for (i=0;i<100;i++) datapoints[i]=datapoints[i]*50+50;

break;

case 2:

TriangleWave (128, 1.0, 50e-3, &phase, datapoints);

for (i=0;i<100;i++) datapoints[i]=datapoints[i]*50+50;

break;

case 3:

for (i=0;i<100;i++) datapoints[i] = rand()/32767.0 * 100.0;

break;

}

DeleteGraphPlot (handle, PANEL_GRAPH, -1, 1);

PlotY (handle, PANEL_GRAPH, datapoints, 100, VAL_DOUBLE,

VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_BLACK);

 

Numb(C);Zero;Clear; /*Начальная инициализация аппаратуры САМАС*/

for(j=0;j<4000;j++) /*Внешний цикл введен для удобства*/

/*наблюдения сигнала на осциллографе*/

{

for (i=0;i<100;i++)

{

ActW2B(DAC,0,17,datapoints[i]*5);/*Задание входного воздействия на объект*/

}

}

}

return(0);

}

 

 

int Shutdown(int panel, int control, int event, void *callbackData, int eventData1, int eventData2)

{

if (event == EVENT_COMMIT)

QuitUserInterface(0);

return(0);

}

 
 

Вид интерфейса пользователя прведен на рис 78.

 

Рис. 78

Контрольные вопросы и задачи

1. Для каких целей используется магистраль крейта САМАС?

2. Какую роль выполняет интерфейсная часть модуля?

3. Каково назначение адресуемых регистров в контроллере крейта?

4. Какую функцию выполняет L-запрос модуля?

5. Какую функцию выполняет сигнал Q;

6. Составить программу формирования с помощью модуля 2ЦАП-10 сигнала

7.

 
 

Составить программу ввода в ЭВМ значений непрерывного сигнала с периодичностью 0,1сек. Количество измерений - 50. Использовать модули МК-1 и АЦП-14. Канал МК-1 - третий.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.008 сек.)