void main() { int handle, panel, id; int var; id = 0; panel = LoadPanel (0, "primcvi.uir", mipanel1); DisplayPanel (panel); while (id != mipanel1_salir) { GetUserEvent (0, &handle, &id); GetCtrlVal (panel, mipanel1_pot1, &var); SetCtrlVal (panel, mipanel1_tanque1, var); } DiscardPanel (panel); } /* del main */
void utilG_Init (void (*DiscardPanels)(void)) { int p, control, top, height, width; int grw, chw, asw, acw; utilG.acq.pt = 0; utilG.acq.nPts = 0; utilG.acq.status = ACQ_NONE; utilG.p = LoadPanel (0, "utilu.uir", BG); utilG.DiscardPanels = DiscardPanels; SetPanelAttribute (utilG.p, ATTR_WINDOW_ZOOM, VAL_MAXIMIZE); DisplayPanel (utilG.p); GetCtrlAttribute(utilG.p, BG_GRAPHS, ATTR_WIDTH, &grw); GetCtrlAttribute(utilG.p, BG_CHANNELS, ATTR_WIDTH, &chw); GetCtrlAttribute(utilG.p, BG_ACQSETUP, ATTR_WIDTH, &asw); GetCtrlAttribute(utilG.p, BG_ACQCHANNELS, ATTR_WIDTH, &acw); GetPanelAttribute(utilG.p, ATTR_WIDTH, &width); SetCtrlAttribute(utilG.p, BG_GRAPHS, ATTR_LEFT, (3*width/20) - grw); SetCtrlAttribute(utilG.p, BG_CHANNELS, ATTR_LEFT, (7*width/20) - chw); SetCtrlAttribute(utilG.p, BG_ACQSETUP, ATTR_LEFT, (9*width/15) - asw); SetCtrlAttribute(utilG.p, BG_ACQCHANNELS, ATTR_LEFT, (9*width/10) - acw); initP = LoadPanel (utilG.p, "utilu.uir", INIT); SetPanelPos (initP, VAL_AUTO_CENTER, VAL_AUTO_CENTER); SetCtrlAttribute (initP, INIT_TEXT, ATTR_VISIBLE, FALSE); DisplayPanel (initP); GetUserEvent (1, &p, &control); switch (control) { case INIT_CONTROL: utilG.acq.status = ACQ_DONE; break; case INIT_ANALYSIS: utilG.acq.status = ACQ_NONE; break; case INIT_EXIT: utilG_Exit(); QuitUserInterface(0); exit (EXIT_SUCCESS); break; } SetMouseCursor (VAL_HOUR_GLASS_CURSOR); SetCtrlAttribute (initP, INIT_TEXT, ATTR_VISIBLE, TRUE); SetCtrlAttribute (initP, INIT_TEXT_10, ATTR_VISIBLE, FALSE); SetCtrlAttribute (initP, INIT_CONTROL, ATTR_VISIBLE, FALSE); SetCtrlAttribute (initP, INIT_ANALYSIS, ATTR_VISIBLE, FALSE); SetCtrlAttribute (initP, INIT_EXIT, ATTR_VISIBLE, FALSE); GetCtrlAttribute (initP, INIT_TEXT, ATTR_TOP, &top); GetCtrlAttribute (initP, INIT_TEXT, ATTR_HEIGHT, &height); SetPanelAttribute (initP, ATTR_HEIGHT, top+height+6); util_ChangeInitMessage ("DAAS Utilities..."); }
int UpdateBarProgress ( int hProgressHandle , int iBreakAllowFromBarNumber , int iBarNumber , int iProgress , int iCount ) { int iBarCtrlID = 0, iCountCtrlID = 0; int iGetPanel = 0, iGetControl = 0, event = 0; char szCount[32] = {0}; if ( hProgressHandle < 1 ) return 0; if ( iProgress < 0 ) iProgress = 0; if ( iProgress > 100 ) iProgress = 100; if ( iCount > 0 ) sprintf ( szCount , "%d" , iCount ); else strcpy ( szCount , "" ); switch (iBarNumber) { case 1: iBarCtrlID = PROGRESS_BAR_1; iCountCtrlID = PROGRESS_COUNT_1; break; case 2: iBarCtrlID = PROGRESS_BAR_2; iCountCtrlID = PROGRESS_COUNT_2; break; case 3: iBarCtrlID = PROGRESS_BAR_3; iCountCtrlID = PROGRESS_COUNT_3; break; case 4: iBarCtrlID = PROGRESS_BAR_4; iCountCtrlID = PROGRESS_COUNT_4; break; case 5: iBarCtrlID = PROGRESS_BAR_5; iCountCtrlID = PROGRESS_COUNT_5; break; case 6: iBarCtrlID = PROGRESS_BAR_6; iCountCtrlID = PROGRESS_COUNT_6; break; case 7: iBarCtrlID = PROGRESS_BAR_7; iCountCtrlID = PROGRESS_COUNT_7; break; case 8: iBarCtrlID = PROGRESS_BAR_8; iCountCtrlID = PROGRESS_COUNT_8; break; case 9: iBarCtrlID = PROGRESS_BAR_9; iCountCtrlID = PROGRESS_COUNT_9; break; default: break; } SetCtrlVal ( hProgressHandle , iBarCtrlID , iProgress ); SetCtrlVal ( hProgressHandle , iCountCtrlID , szCount ); ProcessDrawEvents(); if (( iBarNumber != 0 ) && ( iBarNumber <= iBreakAllowFromBarNumber )) { event = GetUserEvent ( 0 , &iGetPanel , &iGetControl ); if ( iGetPanel == hProgressHandle ) if ( event == USER_REQUEST_BREAK ) return 1; } return 0; }
//--------------------------------------------------------- // работа с ЦАП //--------------------------------------------------------- int DacPanel(void) { int Pnl; int i, j, key, hnd, cnt; static int SignalType=0; char *UirName="demo.uir"; char *SignalTypeName[]= { {"Постоянный"}, {"Синус"}, {"Меандр"}, {"Пила"}, {"Треугольный"} }; // Загрузим панель Pnl=LoadPanel(UirName, DACPARAM); InitDac(Pnl); // покажем название платы в заголовке панели ShowNameInTitle(Pnl); SetCtrlVal(Pnl, P(BOX), "В данном примере программа по клавише 'СТАРТ ЦАП' \nзапускает ЦАП с заданными параметрами."); SetCtrlVal(Pnl, P(DAC_NUMBER), DAC_Number); SetCtrlVal(Pnl, P(DAC_RATE), DAC_Rate); SetCtrlVal(Pnl, P(SIGNAL_TYPE), SignalType); SetCtrlVal(Pnl, P(AMPLITUDE), Amplitude); { double FREQ=DAC_Rate/(double)DacFifoLength; if(Frequency/FREQ < 0.5) Frequency=FREQ; else Frequency=FREQ*(int)((Frequency/FREQ)+0.5); } SetCtrlVal(Pnl, P(FREQUENCY), Frequency); // Отобразим панель на экpане дисплея DisplayPanel(Pnl); KeyFlag=0; for(key=0; !key;) { if(KeyFlag) { KeyFlag=0; if(KeyCode == 0x1B) { *KeybPtr1 = *KeybPtr2; if(ConfirmPopup("Вы желаете выйти?")) { UnloadPanel(Pnl); return EXIT; } KeyFlag=0; } } GetUserEvent(0, &hnd, &cnt); // Выбpан пункт меню if(hnd==Bar) { if(cnt!=-1) { switch(cnt) { case B(ADC): { int result=AdcParamPanel(); if(result == DISK_PANEL) { UnloadPanel(Pnl); return DISK_PANEL; } else if(result == INPUT_PANEL) { UnloadPanel(Pnl); return INPUT_PANEL; } break; } case B(DAC): break; case B(TTL): UnloadPanel(Pnl); return TTL_PANEL; case B(QUIT): if(ConfirmPopup("Вы желаете выйти?")) { UnloadPanel(Pnl); return EXIT; } } } } // Выбpана опция на панели if(hnd == Pnl) { switch(cnt) { case P(START): { char str[200]; // запретим работу ЦАП if(!ENABLE_DAC_STREAM_PLX(&bi[0], 0)) { SetCtrlVal(Pnl, P(BOX), " Не выполнена функция ENABLE_DAC_STREAM_PLX()!"); SetMenuBarAttribute(B(DAC), ATTR_MENU_BAR_ENABLED, DISABLE); SetCtrlAttribute(Pnl, P(START), ATTR_CTRL_ENABLED, DISABLE); break; } // сформируем данные для буфера ЦАП MakeDacBuffer(SignalType); // положим сформированные данные в память программ DSP в буфер ЦАП PUT_PM_ARRAY_PLX(&bi[0], DacFifoBaseAddress, 2*DacFifoLength, Buffer); // разрешим работу ЦАП if(!ENABLE_DAC_STREAM_PLX(&bi[0], 1)) { SetCtrlVal(Pnl, P(BOX), " Не выполнена функция ENABLE_DAC_STREAM_PLX()!"); SetMenuBarAttribute(B(DAC), ATTR_MENU_BAR_ENABLED, DISABLE); SetCtrlAttribute(Pnl, P(START), ATTR_CTRL_ENABLED, DISABLE); break; } DefaultCtrl(Pnl, P(BOX)); sprintf(str, " Осуществлен запуск ЦАП.\n Сейчас ны выходном разъеме должен наблюдаться\n следующий тип сигнала - '%s'.", SignalTypeName[SignalType]); SetCtrlVal(Pnl, P(BOX), str); break; } case P(DAC_NUMBER): { char str[100]; GetCtrlVal(Pnl, P(DAC_NUMBER), &DAC_Number); sprintf(str, " Выбран ЦАП номер %1u.", DAC_Number+1); SetCtrlVal(Pnl, P(BOX), str); break; } case P(DAC_RATE): { char str[100]; GetCtrlVal(Pnl, P(DAC_RATE), &DAC_Rate); SET_DAC_RATE_PLX(&bi[0], &DAC_Rate); SetCtrlVal(Pnl, P(DAC_RATE), DAC_Rate); sprintf(str, " Частота работы ЦАП установлена %.3f кГц.", DAC_Rate); SetCtrlVal(Pnl, P(BOX), str); //изменилась и частоты выдаваемого сигнала double FREQ=DAC_Rate/(double)DacFifoLength; if(Frequency/FREQ < 0.5) Frequency=FREQ; else Frequency=FREQ*(int)((Frequency/FREQ)+0.5); SetCtrlVal(Pnl, P(FREQUENCY), Frequency); break; } case P(AMPLITUDE): { char str[100]; GetCtrlVal(Pnl, P(AMPLITUDE), &Amplitude); if(Amplitude > 2047) Amplitude=2047; else if(Amplitude < -2047) Amplitude=-2047; SetCtrlVal(Pnl, P(AMPLITUDE), Amplitude); sprintf(str, " Амплитуда сигнала равна %5i кодов ЦАП.", Amplitude); SetCtrlVal(Pnl, P(BOX), str); break; } case P(FREQUENCY): { char str[100]; GetCtrlVal(Pnl, P(FREQUENCY), &Frequency); Frequency=fabs(Frequency); double FREQ=DAC_Rate/(double)DacFifoLength; if(Frequency/FREQ < 0.5) Frequency=FREQ; else Frequency=FREQ*(int)((Frequency/FREQ)+0.5); SetCtrlVal(Pnl, P(FREQUENCY), Frequency); sprintf(str, " Частота выходного сигнала равна %.3f кГц.", Frequency); SetCtrlVal(Pnl, P(BOX), str); break; } case P(SIGNAL_TYPE): { char str[100]; GetCtrlVal(Pnl, P(SIGNAL_TYPE), &SignalType); sprintf(str, " Тип выходного сигнала - '%s'.", SignalTypeName[SignalType]); SetCtrlVal(Pnl, P(BOX), str); break; } } } } UnloadPanel(Pnl); return EXIT; }
//--------------------------------------------------------------------------- // панель ввода получаемых данных на диск и последующего просмотра на экране //--------------------------------------------------------------------------- int DiskPanel(void) { unsigned long j; int i, Key; int Pnl, hnd, cnt; int N_Blocks=100; static int DrawMode=0; static int Channel=0; unsigned int irq_address; char tip[400]; char *UirName="demo.uir"; // Загрузим панель Pnl=LoadPanel(UirName, DISK); ConfigureAxes(Pnl, P(GRAPH), -1, 0.0, 0.0, 0, -Diapason[Gain]/1000., Diapason[Gain]/1000.); SetGraphAttribute(Pnl, P(GRAPH), ATTR_GRAPH_Y_AXIS_PRECISION, 3); SetCtrlAttribute(Pnl, P(COUNT), ATTR_CTRL_ENABLED, DISABLE); SetCtrlVal(Pnl, P(DRAWMODE), DrawMode); SetCtrlVal(Pnl, P(CHANNEL), Channel); SetCtrlVal(Pnl, P(IRQ_NUMBER), bi[0].InterruptNumber); sprintf(tip, "В данном примере программа по клавише 'ПУСК ЗАПИСИ' запускает ввод %7lu \nточек с указанного канала АЦП в файл TEST.DAT. По нажатию на клавишу \n'ПРОСМОТР ЗАПИСИ' выводится содержимое файла TEST.DAT в виде графика.", (unsigned long)((double)BufferLenght*(double)N_Blocks)); SetCtrlVal(Pnl, P(BOX1),tip); // Отобразим панель DisplayPanel(Pnl); KeyFlag=0; for( ; ; ) { if(KeyFlag) { KeyFlag=0; if(KeyCode == 0x1B) { *KeybPtr1 = *KeybPtr2; if(ConfirmPopup("Вы желаете выйти?")) { UnloadPanel(Pnl); return EXIT; } KeyFlag=0; } } GetUserEvent(0, &hnd, &cnt); again: // Выбpан пункт меню if(hnd==Bar) { if(cnt!=-1) { switch(cnt) { case B(ADC): if(AdcParamPanel() == INPUT_PANEL) { UnloadPanel(Pnl); return INPUT_PANEL; } ConfigureAxes(Pnl, P(GRAPH), -1, 0.0, 0.0, 0, -Diapason[Gain]/1000., Diapason[Gain]/1000.); break; case B(DAC): UnloadPanel(Pnl); return DAC_PANEL; case B(TTL): UnloadPanel(Pnl); return TTL_PANEL; case B(QUIT): if(ConfirmPopup("Вы желаете выйти?")) { UnloadPanel(Pnl); return EXIT; } } } } // Выбpана опция на панели if(hnd == Pnl) { switch(cnt) { case P(CHANNEL): GetCtrlVal(Pnl, P(CHANNEL), &Channel); DefaultCtrl(Pnl, P(BOX1)); SetCtrlVal(Pnl, P(BOX1),tip); break; case P(DRAW): { GetCtrlVal(Pnl, P(DRAWMODE), &DrawMode); DeletePlots(Pnl, P(GRAPH)); SetGraphAttribute (Pnl, P(GRAPH), ATTR_STRIP_SCROLL_MODE, (DrawMode) ? SCROLL_MODE_CONTINUOUS : SCROLL_MODE_BLOCK); DefaultCtrl(Pnl, P(BOX1)); SetCtrlVal(Pnl, P(BOX1), "Воспроизводим данные, записанные в файле TEST.DAT"); fp=fopen("test.dat", "rb"); if(fp == NULL) { MessagePopup("Не могу найти файл test.dat! Нечего показывать-то!!!"); break; } KeyFlag=0; while(!feof(fp) && !KeyFlag) { fread(StripData, 2, 64, fp); for(i=0; i < 64; i++) SData[i]=StripData[i]*Diapason[Gain]/(MaxAdcCode*1000.); PlotStripChart (Pnl, P(GRAPH), SData, 64, 0, 0, 4); GetUserEvent(0, &hnd, &cnt); if(cnt != -1) goto again; } KeyFlag=0; fclose(fp); DefaultCtrl(Pnl, P(BOX1)); SetCtrlVal(Pnl, P(BOX1),tip); break; } // стаот сбоpа данных с АЦП по пpеpываниям case P(START): SetCtrlAttribute(Pnl, P(COUNT), ATTR_CTRL_ENABLED, ENABLE); Control_Table[0] = Channel & 0x1F; Control_Table[0] |= (Gain << 6); Control_Table[0] |= (DifOrCom << 5); LOAD_CONTROL_TABLE_PLX(&bi[0], 1, Control_Table); fp=fopen("test.dat", "wb"); if(fp == NULL) { MessagePopup("Не могу открыть файл для записи данных!"); break; } IrqBuffer= new int[BufferLenght]; if(IrqBuffer == NULL) { MessagePopup("Не могу выделить память под буфер!"); break; } DefaultCtrl(Pnl, P(BOX1)); SetCtrlVal(Pnl, P(BOX1), "Идет ввод данных..."); SetCtrlVal(Pnl, P(BOX1), "Для завершения ввода данных нажмите любую клавишу."); SetCtrlAttribute(Pnl, P(DRAW), ATTR_CTRL_ENABLED, DISABLE); IrqN=Half1=Half2=KeyFlag=0; // инициализация пpеpываний INIT_INTERRUPT_PLX(&bi[0], IRQ_Handler); // запуск pаботы АЦП ENABLE_IRQ_PLX(&bi[0], 1, IrqStep=1024); // цикл записи собpанных данных на диск for(i=0; i < N_Blocks; i++) { SetCtrlVal(Pnl, P(COUNT), N_Blocks-i); while(!Half1 && !kbhit()); if(KeyFlag) break; Half1=0; fwrite(IrqBuffer, 2, BufferLenght/2, fp); while(!Half2 && !kbhit()); if(KeyFlag) break; Half2=0; fwrite(IrqBuffer+BufferLenght/2, 2, BufferLenght/2, fp); } // останов pаботы АЦП ENABLE_IRQ_PLX(&bi[0], 0, 0); // восстановление пpеpываний STOP_INTERRUPT_PLX(&bi[0]); delete[] IrqBuffer; SetCtrlAttribute(Pnl, P(DRAW), ATTR_CTRL_ENABLED, ENABLE); DefaultCtrl(Pnl, P(BOX1)); if(KeyFlag) { KeyFlag=0; SetCtrlVal(Pnl, P(BOX1), "Ввод данных злобно прерван!"); } else SetCtrlVal(Pnl, P(BOX1), "Ввод данных удачно закончен!"); fclose(fp); Control_Table[0] = 0x0; Control_Table[0] |= (Gain << 6); Control_Table[0] |= (DifOrCom << 5); LOAD_CONTROL_TABLE_PLX(&bi[0], CHANNEL_QUANTITY, Control_Table); SetCtrlAttribute(Pnl, P(COUNT), ATTR_CTRL_ENABLED, DISABLE); break; } } } }