|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Примеры программного кода библиотечных функций(библиотека 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 - третий. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.008 сек.) |