/* Perform the Read data and Plot data actions */ void CVICALLBACK readDataAndPlot(CmtTSQHandle queueHandle, unsigned int event, int value, void *callbackData){ unsigned char data[READ_LENGTH]; int tsqRValue = value, tsqREvent = event; //Thread Safe Result Value. switch(tsqREvent){ case EVENT_TSQ_ITEMS_IN_QUEUE: /* Read data from the thread safe queue and plot on the graph */ while(tsqRValue >= READ_LENGTH){ CmtReadTSQData(tsqHdl, data, READ_LENGTH, TSQ_INFINITE_TIMEOUT, 0); /* Start to calculate the 陀螺仪的x,y,z 以及加计的x,y,z */ resultCounter = 0; //用来重新自增计数 resultData[x][resultCounter]中的采集次数 if(dataSrc <=1) getFinalRightData(&data[0]); else simulateData(); /* Plot the data. */ if(tabFlag==0){ //Child Panels Mode for(int i=0; i<validMonNum; i++){ if(1 == signalShowingStat[i]) PlotStripChart(CPanels[i], PGraphs[i], resultData[i], READ_LENGTH/24, 0, 0, VAL_DOUBLE); } }else{ //Tab pages mode int i = 0; GetActiveTabPage(panelHdl, tabCtrl, &i); if(1 == signalShowingStat[i]) PlotStripChart(TPanels[i], PGraphs[i], resultData[i], READ_LENGTH/24, 0, 0, VAL_DOUBLE); } tsqRValue -= READ_LENGTH; }//while(tsqR...) break; }//Switch() }
//--------------------------------------------------------------------------- // панель ввода получаемых данных на диск и последующего просмотра на экране //--------------------------------------------------------------------------- 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; } } } }
/* 菜单栏-Switch View Mode-切换视图 */ void CVICALLBACK switchViewMode(int menuBar, int menuItem, void *callbackData, int panel){ if(CPanels[0] <=0 && TPanels[0]<=0) return; int tempReceiveFlag = receiveFlag; pauseDataAcq(); if(tabFlag == 0){ //Child-Panel => Tab-Pages //创建Tab if(tabCtrl <=0){ tabWidth = pWidth-extraRight-averSpaceH; tabHeight = pHeight - averSpaceV*2 + 12; tabCtrl = NewCtrl(panelHdl, CTRL_TABS, "", mHeight + 5, averSpaceH); SetCtrlAttribute(panelHdl, tabCtrl, ATTR_WIDTH, tabWidth); SetCtrlAttribute(panelHdl, tabCtrl, ATTR_HEIGHT, tabHeight); } for(int i=0; i<validMonNum; i++){ InsertPanelAsTabPage(panelHdl, tabCtrl, -1, CPanels[i]); } for(int i=0; i<validMonNum; i++){ GetPanelHandleFromTabPage(panelHdl, tabCtrl, i, &TPanels[i]); SetCtrlAttribute(TPanels[i], PGraphs[i], ATTR_WIDTH, tabWidth-3); SetCtrlAttribute(TPanels[i], PGraphs[i], ATTR_HEIGHT, tabHeight-15); SetAxisScalingMode(TPanels[i], PGraphs[i], VAL_LEFT_YAXIS, graphScaleMode, yAxisRange[0], yAxisRange[1]); SetCtrlAttribute(TPanels[i], PGraphs[i], ATTR_YFORMAT,VAL_FLOATING_PT_FORMAT); SetCtrlAttribute (TPanels[i], PGraphs[i], ATTR_POINTS_PER_SCREEN, 40); } tabFlag = 1; for(int i=0; i<validMonNum; i++){ DiscardPanel(CPanels[i]); CPanels[i] = 0; } }else{ //Tab-Pages => Child-Panel for(int i=0; i<validMonNum; i++){ CPanels[i] = ConvertTabPageToChildPanel(panelHdl, tabCtrl, i); SetCtrlAttribute(CPanels[i], PGraphs[i], ATTR_WIDTH, cWidth); SetCtrlAttribute(CPanels[i], PGraphs[i], ATTR_HEIGHT, cHeight); } for(int i=0; i<validMonNum; i++){ if(PGraphs[i]>0){ SetCtrlAttribute(CPanels[i], PGraphs[i], ATTR_WIDTH, cWidth); SetCtrlAttribute(CPanels[i], PGraphs[i], ATTR_WIDTH, cWidth); SetCtrlAttribute (CPanels[i], PGraphs[i], ATTR_POINTS_PER_SCREEN, 24); } } tabFlag = 0; for(int i=0; i<validMonNum; i++){ DisplayPanel(CPanels[i]); TPanels[i] = 0; } DiscardCtrl(panelHdl, tabCtrl); tabCtrl = 0; }//else receiveFlag = tempReceiveFlag; if(receiveFlag == 0){ if(tabFlag == 0){ for(int i=0; i<validMonNum; i++) PlotStripChart(CPanels[i], PGraphs[i], resultData[i], READ_LENGTH/24, 0, 0, VAL_DOUBLE); }else{ PlotStripChart(TPanels[0], PGraphs[0], resultData[0], READ_LENGTH/24, 0, 0, VAL_DOUBLE); } }else{ startDataAcq(); } }
void initTankPanel(int panel,TANK_ID tid,RTANK_ID rid1,RTANK_ID rid2) { curTankId = tid; curRTankId1 = rid1; curRTankId2 = rid2; SetPanelAttribute(panel,ATTR_TITLE, sys->tk[tid].name); //heater int v = (sys->tk[tid].hsHeat.wid == 0 && sys->tk[tid].hsHeat.wid == 0)?0:1; SetCtrlAttribute(panel,PANEL_TANK_TEMP, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_HEATER, ATTR_VISIBLE, v); //valve v = (tid > TANK_15 || (sys->tk[tid].hsDown.wid == 0 && sys->tk[tid].hsDown.wid == 0))?0:1; SetCtrlAttribute(panel,PANEL_TANK_VALVE_DIW_IN, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOWN, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_SPLITTER_9, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_SPLITTER_10, ATTR_VISIBLE, v); //dosing and make v = (sys->tk[tid].hsMake.wid == 0 && sys->tk[tid].hsMake.wid == 0)?0:1; SetCtrlAttribute(panel,PANEL_TANK_VALVE_MAKE_AC1_IN, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_VALVE_MAKE_AC2_IN, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_VALVE_MAKE_AC3_IN, ATTR_VISIBLE, v); if(tid == TANK_04 || tid == TANK_07) SetCtrlAttribute(panel,PANEL_TANK_VALVE_MAKE_AC4_IN, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC1_IN, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AC1_DOS_BUF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC1_OUT, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC2_IN, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AC2_DOS_BUF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC2_OUT, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC3_IN, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AC3_DOS_BUF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC3_OUT, ATTR_VISIBLE, v); if(tid == TANK_04 || tid == TANK_07) { SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC4_IN, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AC4_DOS_BUF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC4_OUT, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_SPLITTER_4, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_SPLITTER_8, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_SPLITTER_14, ATTR_VISIBLE, v); } SetCtrlAttribute(panel,PANEL_TANK_SPLITTER, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_SPLITTER_2, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_SPLITTER_3, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_SPLITTER_5, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_SPLITTER_6, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_SPLITTER_7, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_SPLITTER_11, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_SPLITTER_12, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_SPLITTER_13, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AC1_MAKE, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AC2_MAKE, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AC3_MAKE, ATTR_VISIBLE, v); if(tid == TANK_04 || tid == TANK_07) SetCtrlAttribute(panel,PANEL_TANK_AC4_MAKE, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_MMAKE_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_MMAKE_ON, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_MMAKE_LAB, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AMAKE_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AMAKE_ON, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AMAKE_LAB, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AC1_DOS_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AC1_DOS_ON, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AC2_DOS_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AC2_DOS_ON, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AC3_DOS_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AC3_DOS_ON, ATTR_VISIBLE, v); if(tid == TANK_04 || tid == TANK_07) { SetCtrlAttribute(panel,PANEL_TANK_AC4_DOS_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AC4_DOS_ON, ATTR_VISIBLE, v); } SetCtrlAttribute(panel,PANEL_TANK_AC1_DOS_LAB, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AC2_DOS_LAB, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_AC3_DOS_LAB, ATTR_VISIBLE, v); if(tid == TANK_04 || tid == TANK_07) SetCtrlAttribute(panel,PANEL_TANK_AC4_DOS_LAB, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_DECORATION_MAKE, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_DECORATION_DOS, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_MAKE_CH1, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_MAKE_CH2, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_MAKE_CH3, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_MMAKE_CH1, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_MMAKE_CH2, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_MMAKE_CH3, ATTR_VISIBLE, v); if(tid == TANK_04 || tid == TANK_07) { SetCtrlAttribute(panel,PANEL_TANK_MAKE_CH4, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_MMAKE_CH4, ATTR_VISIBLE, v); } SetCtrlAttribute(panel,PANEL_TANK_DOS_CH1, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_DOS_CH2, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_DOS_CH3, ATTR_VISIBLE, v); if(tid == TANK_04 || tid == TANK_07) SetCtrlAttribute(panel,PANEL_TANK_DOS_CH4, ATTR_VISIBLE, v); //SetCtrlAttribute(panel,PANEL_TANK_FLOW, ATTR_VISIBLE, v); //wash v = (sys->tk[tid].hsWash.wid == 0 && sys->tk[tid].hsWash.wid == 0)?0:1; SetCtrlAttribute(panel,PANEL_TANK_WASH_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_WASH_ON, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_WASH_LAB, ATTR_VISIBLE, v); //down v = (sys->tk[tid].hsDown.wid == 0 && sys->tk[tid].hsDown.wid == 0)?0:1; SetCtrlAttribute(panel,PANEL_TANK_DOWN_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_DOWN_ON, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_DOWN_LAB, ATTR_VISIBLE, v); //PUMP v = (sys->tk[tid].hsPump.wid == 0 && sys->tk[tid].hsPump.wid == 0)?0:1; SetCtrlAttribute(panel,PANEL_TANK_PUMP_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_PUMP_ON, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_PUMP_LAB, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_PUMP, ATTR_VISIBLE, v); if(tid == TANK_AUX_DIW || tid == TANK_AUX_TEX || tid == TANK_AUX_HF) SetCtrlAttribute(panel,PANEL_TANK_PUMP, ATTR_VISIBLE, 1); //inlne PUMP v = (sys->tk[tid].hsPumpIn.wid == 0 && sys->tk[tid].hsPumpIn.wid == 0)?0:1; SetCtrlAttribute(panel,PANEL_TANK_PUMPIN_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_PUMPIN_ON, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_PUMPIN_LAB, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_PUMPIN, ATTR_VISIBLE, v); //HEAT v = (sys->tk[tid].hsHeat.wid == 0 && sys->tk[tid].hsHeat.wid == 0)?0:1; SetCtrlAttribute(panel,PANEL_TANK_HEAT_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_HEAT_ON, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_HEAT_LAB, ATTR_VISIBLE, v); //SHUT v = (sys->tk[tid].hsShutOpen.wid == 0 && sys->tk[tid].hsShutOpen.wid == 0)?0:1; SetCtrlAttribute(panel,PANEL_TANK_SHUT_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_SHUT_ON, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_SHUT_LAB, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_SHUT, ATTR_VISIBLE, v); //CAR v = (rid1 == RTK_UNKNOW || (sys->rtk[rid1].hsFill.wid == 0 && sys->rtk[rid1].hsFill.wid == 0))?0:1; SetCtrlAttribute(panel,PANEL_TANK_FILL_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_FILL_ON, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_FILL1_LAB, ATTR_VISIBLE, v); v = (rid2 == RTK_UNKNOW)?0:1; SetCtrlAttribute(panel,PANEL_TANK_FILL2_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_FILL2_ON, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_FILL2_LAB, ATTR_VISIBLE, v); //add water v = (sys->tk[tid].hsAddWater.wid == 0 && sys->tk[tid].hsAddWater.wid == 0)?0:1; SetCtrlAttribute(panel,PANEL_TANK_ADD_WATER_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_ADD_WATER_ON, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_ADD_WATER_LAB, ATTR_VISIBLE, v); //BUBBle /* v = (sys->tk[tid].hsBubble.wid == 0 && sys->tk[tid].hsBubble.wid == 0)?0:1; SetCtrlAttribute(panel,PANEL_TANK_BUBB_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_BUBB_ON, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_BUBB_LAB, ATTR_VISIBLE, v);*/ // SetCtrlAttribute(panel,PANEL_TANK_COND, ATTR_VISIBLE, v); //drain /* v = (sys->tk[tid].hsDrain.wid == 0 && sys->tk[tid].hsDrain.wid == 0)?0:1; SetCtrlAttribute(panel,PANEL_TANK_DRAIN_OFF, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_DRAIN_ON, ATTR_VISIBLE, v); SetCtrlAttribute(panel,PANEL_TANK_DRAIN_LAB, ATTR_VISIBLE, v); */ if(tid == TANK_02) { SetCtrlAttribute(panel,PANEL_TANK_VALVE_MAKE_AC1_IN, ATTR_LABEL_TEXT, "H2O2\n°t¼Ñ"); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC1_IN, ATTR_LABEL_TEXT, "H2O2\n¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_AC1_MAKE, ATTR_LABEL_TEXT, "H2O2(L) "); SetCtrlVal(panel,PANEL_TANK_AC1_DOS_LAB, "H2O2¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_VALVE_MAKE_AC2_IN, ATTR_LABEL_TEXT, "KOH\n°t¼Ñ"); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC2_IN, ATTR_LABEL_TEXT, "KOH\n¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_AC2_MAKE, ATTR_LABEL_TEXT, "KOH(L) "); SetCtrlVal(panel,PANEL_TANK_AC2_DOS_LAB, "KOH¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_VALVE_MAKE_AC3_IN, ATTR_LABEL_TEXT, "DIW\n°t¼Ñ"); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC3_IN, ATTR_LABEL_TEXT, "DIW\n¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_AC3_MAKE, ATTR_LABEL_TEXT, "DIW(L) "); SetCtrlVal(panel,PANEL_TANK_AC3_DOS_LAB, "DIW¸É²G"); } if(tid == TANK_04 || tid == TANK_07) { SetCtrlAttribute(panel,PANEL_TANK_VALVE_MAKE_AC1_IN, ATTR_LABEL_TEXT, "IPA\n°t¼Ñ"); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC3_IN, ATTR_LABEL_TEXT, "IPA\n¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_AC1_MAKE, ATTR_LABEL_TEXT, "IPA(L) "); SetCtrlVal(panel,PANEL_TANK_AC1_DOS_LAB, "IPA¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_AC1_MAKE, ATTR_DIMMED, 1); SetCtrlAttribute(panel,PANEL_TANK_AC1_DOS_OFF, ATTR_DIMMED, 1); SetCtrlAttribute(panel,PANEL_TANK_AC1_DOS_ON, ATTR_DIMMED, 1); /*SetCtrlAttribute(panel,PANEL_TANK_AC1_MAKE, ATTR_VISIBLE, 0); SetCtrlAttribute(panel,PANEL_TANK_AC1_DOS_LAB, ATTR_VISIBLE, 0); SetCtrlAttribute(panel,PANEL_TANK_AC1_DOS_OFF, ATTR_VISIBLE, 0); SetCtrlAttribute(panel,PANEL_TANK_AC1_DOS_ON, ATTR_VISIBLE, 0); */ SetCtrlAttribute(panel,PANEL_TANK_VALVE_MAKE_AC2_IN, ATTR_LABEL_TEXT, "KOH\n°t¼Ñ"); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC2_IN, ATTR_LABEL_TEXT, "KOH\n¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_AC2_MAKE, ATTR_LABEL_TEXT, "KOH(L) "); SetCtrlVal(panel,PANEL_TANK_AC2_DOS_LAB, "KOH¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_VALVE_MAKE_AC3_IN, ATTR_LABEL_TEXT, "DIW\n°t¼Ñ"); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC1_IN, ATTR_LABEL_TEXT, "DIW\n¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_AC3_MAKE, ATTR_LABEL_TEXT, "DIW(L) "); SetCtrlVal(panel,PANEL_TANK_AC3_DOS_LAB, "DIW¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_VALVE_MAKE_AC4_IN, ATTR_LABEL_TEXT, "ADD\n°t¼Ñ"); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC4_IN, ATTR_LABEL_TEXT, "ADD\n¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_AC4_MAKE, ATTR_LABEL_TEXT, "ADD(ML) "); SetCtrlVal(panel,PANEL_TANK_AC4_DOS_LAB, "ADD¸É²G"); } else if(tid == TANK_11) { SetCtrlAttribute(panel,PANEL_TANK_VALVE_MAKE_AC2_IN, ATTR_LABEL_TEXT, "HF\n°t¼Ñ"); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC2_IN, ATTR_LABEL_TEXT, "HF\n¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_AC2_MAKE, ATTR_LABEL_TEXT, "HF(L) "); SetCtrlVal(panel,PANEL_TANK_AC2_DOS_LAB, "HF¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_VALVE_MAKE_AC1_IN, ATTR_LABEL_TEXT, "HCL\n°t¼Ñ"); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC1_IN, ATTR_LABEL_TEXT, "HCL\n¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_AC1_MAKE, ATTR_LABEL_TEXT, "HCL(L) "); SetCtrlVal(panel,PANEL_TANK_AC1_DOS_LAB, "HCL¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_VALVE_MAKE_AC3_IN, ATTR_LABEL_TEXT, "DIW\n°t¼Ñ"); SetCtrlAttribute(panel,PANEL_TANK_VALVE_DOS_AC3_IN, ATTR_LABEL_TEXT, "DIW\n¸É²G"); SetCtrlAttribute(panel,PANEL_TANK_AC3_MAKE, ATTR_LABEL_TEXT, "DIW(L) "); SetCtrlVal(panel,PANEL_TANK_AC3_DOS_LAB, "DIW¸É²G"); } if(tid == TANK_02 || tid == TANK_04 || tid == TANK_07 || tid == TANK_11) { if(testBit(sys->tk[tid].hsMake,RB) > 0) { SetCtrlVal(panel,PANEL_TANK_AC1_MAKE,sys->tk[tid].MakeCH1); SetCtrlVal(panel,PANEL_TANK_AC2_MAKE,sys->tk[tid].MakeCH2); SetCtrlVal(panel,PANEL_TANK_AC3_MAKE,sys->tk[tid].MakeCH3); SetCtrlVal(panel,PANEL_TANK_AC4_MAKE,sys->tk[tid].MakeCH4); } else if(testBit(sys->tk[tid].hsMMake,RB) > 0) { SetCtrlVal(panel,PANEL_TANK_AC1_MAKE,sys->tk[tid].MMakeCH1); SetCtrlVal(panel,PANEL_TANK_AC2_MAKE,sys->tk[tid].MMakeCH2); SetCtrlVal(panel,PANEL_TANK_AC3_MAKE,sys->tk[tid].MMakeCH3); SetCtrlVal(panel,PANEL_TANK_AC4_MAKE,sys->tk[tid].MMakeCH4); } } preTempTrendPos = sys->curTempTrendPos; if(sys->tk[curTankId].tempData[TREND_DATA_LEN - sys->curTempTrendPos - 1] != 0) PlotStripChart (panel, PANEL_TANK_STRIPCHART, sys->tk[curTankId].tempData, TREND_DATA_LEN - sys->curTempTrendPos - 1, sys->curTempTrendPos+1, 0, VAL_DOUBLE); PlotStripChart (panel, PANEL_TANK_STRIPCHART, sys->tk[curTankId].tempData, sys->curTempTrendPos + 1, 0, 0, VAL_DOUBLE); }
int CVICALLBACK TankTimer (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_TIMER_TICK: //shut if(testBit(sys->tk[curTankId].xShutOpen,RX) > 0 && testBit(sys->tk[curTankId].xShutClose,RX) == 0 ) SetCtrlVal(panel,PANEL_TANK_SHUT, 2); else if(testBit(sys->tk[curTankId].xShutOpen,RX) == 0 && testBit(sys->tk[curTankId].xShutClose,RX) > 0 ) SetCtrlVal(panel,PANEL_TANK_SHUT, 1); else SetCtrlVal(panel,PANEL_TANK_SHUT, 3); //temp if(preTempTrendPos != sys->curTempTrendPos && sys->tk[curTankId].curTemp != 0) { preTempTrendPos = sys->curTempTrendPos; PlotStripChart (panel, PANEL_TANK_STRIPCHART, &sys->tk[curTankId].curTemp, 1, 0, 0, VAL_DOUBLE); } SetCtrlVal(panel,PANEL_TANK_TEMP, sys->tk[curTankId].curTemp); //valve SetCtrlVal(panel,PANEL_TANK_VALVE_DIW_IN, testBit(sys->tk[curTankId].yValveDiwIn,RY)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_VALVE_DOWN, testBit(sys->tk[curTankId].yValveDown,RY)>0 ? 1 : 0); //heater SetCtrlAttribute(panel,PANEL_TANK_HEATER, ATTR_VISIBLE, testBit(sys->tk[curTankId].yHeat,RY)>0 ? 1 : 0); //car SetCtrlVal(panel,PANEL_TANK_CAR1, (curRTankId1 != RTK_UNKNOW && testBit(sys->rtk[curRTankId1].hsFill,WB)>0) ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_CAR2, (curRTankId2 != RTK_UNKNOW && testBit(sys->rtk[curRTankId2].hsFill,WB)>0) ? 1 : 0); //pump SetCtrlVal(panel,PANEL_TANK_PUMP, testBit(sys->tk[curTankId].yPump,RY)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_PUMP, testBit(sys->tk[curTankId].yPumpIn,RY)>0 ? 1 : 0); //level int lev = (testBit(sys->tk[curTankId].xLevLL,RX)>0 ? 1 : 0); lev += (testBit(sys->tk[curTankId].xLevL,RX)>0 ? 1 : 0); lev += (testBit(sys->tk[curTankId].xLevH,RX)>0 ? 1 : 0); lev += (testBit(sys->tk[curTankId].xLevHH,RX)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_TANK, lev); //make buf tank SetCtrlVal(panel,PANEL_TANK_VALVE_MAKE_AC1_IN, testBit(sys->tk[curTankId].yValveMakeAc1In,RY)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_VALVE_MAKE_AC2_IN, testBit(sys->tk[curTankId].yValveMakeAc2In,RY)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_VALVE_MAKE_AC3_IN, testBit(sys->tk[curTankId].yValveMakeAc3In,RY)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_VALVE_MAKE_AC4_IN, testBit(sys->tk[curTankId].yValveMakeAc4In,RY)>0 ? 1 : 0); /* lev = (testBit(sys->tk[curTankId].xMakeAc1LevH,RX)>0 ? 1 : 0); lev += (testBit(sys->tk[curTankId].xMakeAc1LevL,RX)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_AC1_MAKE_BUF, lev); lev = (testBit(sys->tk[curTankId].xMakeAc2LevH,RX)>0 ? 1 : 0); lev += (testBit(sys->tk[curTankId].xMakeAc2LevL,RX)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_AC2_MAKE_BUF, lev); */ SetCtrlVal(panel,PANEL_TANK_MAKE_CH1, sys->tk[curTankId].MakeCountCH1/10.0); SetCtrlVal(panel,PANEL_TANK_MAKE_CH2, sys->tk[curTankId].MakeCountCH2/10.0); SetCtrlVal(panel,PANEL_TANK_MAKE_CH3, sys->tk[curTankId].MakeCountCH3/10.0); SetCtrlVal(panel,PANEL_TANK_MAKE_CH4, sys->tk[curTankId].MakeCountCH4/1.0); SetCtrlVal(panel,PANEL_TANK_MMAKE_CH1, sys->tk[curTankId].MMakeCountCH1/10.0); SetCtrlVal(panel,PANEL_TANK_MMAKE_CH2, sys->tk[curTankId].MMakeCountCH2/10.0); SetCtrlVal(panel,PANEL_TANK_MMAKE_CH3, sys->tk[curTankId].MMakeCountCH3/10.0); SetCtrlVal(panel,PANEL_TANK_MMAKE_CH4, sys->tk[curTankId].MMakeCountCH4/1.0); SetCtrlVal(panel,PANEL_TANK_DOS_CH1, sys->tk[curTankId].DosingCountCH1); SetCtrlVal(panel,PANEL_TANK_DOS_CH2, sys->tk[curTankId].DosingCountCH2); SetCtrlVal(panel,PANEL_TANK_DOS_CH3, sys->tk[curTankId].DosingCountCH3); SetCtrlVal(panel,PANEL_TANK_DOS_CH4, sys->tk[curTankId].DosingCountCH4); SetCtrlVal(panel,PANEL_TANK_FLOW, sys->tk[curTankId].Flow/10.0); SetCtrlVal(panel,PANEL_TANK_COND, sys->tk[curTankId].Cond/1.0); //dosing buf tank SetCtrlVal(panel,PANEL_TANK_VALVE_DOS_AC1_IN, testBit(sys->tk[curTankId].yValveDosAc1In,RY)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_VALVE_DOS_AC1_OUT, testBit(sys->tk[curTankId].yValveDosAc1Out,RY)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_VALVE_DOS_AC2_IN, testBit(sys->tk[curTankId].yValveDosAc2In,RY)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_VALVE_DOS_AC2_OUT, testBit(sys->tk[curTankId].yValveDosAc2Out,RY)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_VALVE_DOS_AC3_IN, testBit(sys->tk[curTankId].yValveDosAc3In,RY)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_VALVE_DOS_AC3_OUT, testBit(sys->tk[curTankId].yValveDosAc3Out,RY)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_VALVE_DOS_AC4_IN, testBit(sys->tk[curTankId].yValveDosAc4In,RY)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_VALVE_DOS_AC4_OUT, testBit(sys->tk[curTankId].yValveDosAc4Out,RY)>0 ? 1 : 0); lev = (testBit(sys->tk[curTankId].xDosAc1LevH,RX)>0 ? 1 : 0); lev += (testBit(sys->tk[curTankId].xDosAc1LevL,RX)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_AC1_DOS_BUF, lev); lev = (testBit(sys->tk[curTankId].xDosAc2LevH,RX)>0 ? 1 : 0); lev += (testBit(sys->tk[curTankId].xDosAc2LevL,RX)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_AC2_DOS_BUF, lev); lev = (testBit(sys->tk[curTankId].xDosAc3LevH,RX)>0 ? 1 : 0); lev += (testBit(sys->tk[curTankId].xDosAc3LevL,RX)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_AC3_DOS_BUF, lev); lev = (testBit(sys->tk[curTankId].xDosAc4LevH,RX)>0 ? 1 : 0); lev += (testBit(sys->tk[curTankId].xDosAc4LevL,RX)>0 ? 1 : 0); SetCtrlVal(panel,PANEL_TANK_AC4_DOS_BUF, lev); //bubble if(testBit(sys->tk[curTankId].hsBubble,WB) > 0) { bubble(panel, PANEL_TANK_BUBBLE1,180,290,30); bubble(panel, PANEL_TANK_BUBBLE2,180,290,30); bubble(panel, PANEL_TANK_BUBBLE3,180,290,30); bubble(panel, PANEL_TANK_BUBBLE4,180,290,30); bubble(panel, PANEL_TANK_BUBBLE5,180,290,30); bubble(panel, PANEL_TANK_BUBBLE6,180,290,30); bubble(panel, PANEL_TANK_BUBBLE7,180,290,30); } //button if(sys->tk[curTankId].hsMake.wid != 0 || sys->tk[curTankId].hsMake.bid != 0) { SetCtrlAttribute(panel,PANEL_TANK_AMAKE_OFF, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsMake,RB) > 0 ? 0 : 1); SetCtrlAttribute(panel,PANEL_TANK_AMAKE_ON, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsMake,RB) > 0 ? 1 : 0); SetCtrlAttribute(panel,PANEL_TANK_MMAKE_OFF, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsMMake,RB) > 0 ? 0 : 1); SetCtrlAttribute(panel,PANEL_TANK_MMAKE_ON, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsMMake,RB) > 0 ? 1 : 0); } if(sys->tk[curTankId].hsAC1Dos.wid != 0 || sys->tk[curTankId].hsAC1Dos.bid != 0) { SetCtrlAttribute(panel,PANEL_TANK_AC1_DOS_OFF, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsAC1Dos,WB) > 0 ? 0 : 1); SetCtrlAttribute(panel,PANEL_TANK_AC1_DOS_ON, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsAC1Dos,WB) > 0 ? 1 : 0); } if(sys->tk[curTankId].hsAC2Dos.wid != 0 || sys->tk[curTankId].hsAC2Dos.bid != 0) { SetCtrlAttribute(panel,PANEL_TANK_AC2_DOS_OFF, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsAC2Dos,WB) > 0 ? 0 : 1); SetCtrlAttribute(panel,PANEL_TANK_AC2_DOS_ON, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsAC2Dos,WB) > 0 ? 1 : 0); } if(sys->tk[curTankId].hsAC3Dos.wid != 0 || sys->tk[curTankId].hsAC3Dos.bid != 0) { SetCtrlAttribute(panel,PANEL_TANK_AC3_DOS_OFF, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsAC3Dos,WB) > 0 ? 0 : 1); SetCtrlAttribute(panel,PANEL_TANK_AC3_DOS_ON, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsAC3Dos,WB) > 0 ? 1 : 0); } if(sys->tk[curTankId].hsAC4Dos.wid != 0 || sys->tk[curTankId].hsAC4Dos.bid != 0) { SetCtrlAttribute(panel,PANEL_TANK_AC4_DOS_OFF, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsAC4Dos,WB) > 0 ? 0 : 1); SetCtrlAttribute(panel,PANEL_TANK_AC4_DOS_ON, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsAC4Dos,WB) > 0 ? 1 : 0); } if(sys->tk[curTankId].hsWash.wid != 0 || sys->tk[curTankId].hsWash.bid != 0) { SetCtrlAttribute(panel,PANEL_TANK_WASH_OFF, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsWash,WB) > 0 ? 0 : 1); SetCtrlAttribute(panel,PANEL_TANK_WASH_ON, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsWash,WB) > 0 ? 1 : 0); } if(sys->tk[curTankId].hsDown.wid != 0 || sys->tk[curTankId].hsDown.bid != 0) { SetCtrlAttribute(panel,PANEL_TANK_DOWN_OFF, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsDown,WB) > 0 ? 0 : 1); SetCtrlAttribute(panel,PANEL_TANK_DOWN_ON, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsDown,WB) > 0 ? 1 : 0); } if(sys->tk[curTankId].hsPump.wid != 0 || sys->tk[curTankId].hsPump.bid != 0) { SetCtrlAttribute(panel,PANEL_TANK_PUMP_OFF, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsPump,WB) > 0 ? 1 : 0); SetCtrlAttribute(panel,PANEL_TANK_PUMP_ON, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsPump,WB) > 0 ? 0 : 1); } if(sys->tk[curTankId].hsPumpIn.wid != 0 || sys->tk[curTankId].hsPumpIn.bid != 0) { SetCtrlAttribute(panel,PANEL_TANK_PUMPIN_OFF, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsPumpIn,WB) > 0 ? 1 : 0); SetCtrlAttribute(panel,PANEL_TANK_PUMPIN_ON, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsPumpIn,WB) > 0 ? 0 : 1); } if(sys->tk[curTankId].hsHeat.wid != 0 || sys->tk[curTankId].hsHeat.bid != 0) { SetCtrlAttribute(panel,PANEL_TANK_HEAT_OFF, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsHeat,WB) > 0 ? 1 : 0); SetCtrlAttribute(panel,PANEL_TANK_HEAT_ON, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsHeat,WB) > 0 ? 0 : 1); } if(sys->tk[curTankId].hsAddWater.wid != 0 || sys->tk[curTankId].hsAddWater.bid != 0) { SetCtrlAttribute(panel,PANEL_TANK_ADD_WATER_ON, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsAddWater,WB) > 0 ? 1 : 0); SetCtrlAttribute(panel,PANEL_TANK_ADD_WATER_OFF, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsAddWater,WB) > 0 ? 0 : 1); } if(sys->tk[curTankId].hsShutOpen.wid != 0 || sys->tk[curTankId].hsShutOpen.bid != 0 ) { SetCtrlAttribute(panel,PANEL_TANK_SHUT_OFF, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsShutOpen,WB) > 0 ? 0 : 1); SetCtrlAttribute(panel,PANEL_TANK_SHUT_ON, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsShutOpen,WB) > 0 ? 1 : 0); } /* if(sys->tk[curTankId].hsBubble.wid != 0 || sys->tk[curTankId].hsBubble.bid != 0) { SetCtrlAttribute(panel,PANEL_TANK_BUBB_OFF, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsBubble,WB) > 0 ? 0 : 1); SetCtrlAttribute(panel,PANEL_TANK_BUBB_ON, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsBubble,WB) > 0 ? 1 : 0); } */ if(curRTankId1 != RTK_UNKNOW && (sys->rtk[curRTankId1].hsFill.wid != 0 || sys->rtk[curRTankId1].hsFill.bid != 0)) { SetCtrlAttribute(panel,PANEL_TANK_FILL_OFF, ATTR_VISIBLE, testBit(sys->rtk[curRTankId1].hsFill,WB) > 0 ? 0 : 1); SetCtrlAttribute(panel,PANEL_TANK_FILL_ON, ATTR_VISIBLE, testBit(sys->rtk[curRTankId1].hsFill,WB) > 0 ? 1 : 0); } if(curRTankId2 != RTK_UNKNOW && (sys->rtk[curRTankId2].hsFill.wid != 0 || sys->rtk[curRTankId2].hsFill.bid != 0) ) { SetCtrlAttribute(panel,PANEL_TANK_FILL2_OFF, ATTR_VISIBLE, testBit(sys->rtk[curRTankId2].hsFill,WB) > 0 ? 0 : 1); SetCtrlAttribute(panel,PANEL_TANK_FILL2_ON, ATTR_VISIBLE, testBit(sys->rtk[curRTankId2].hsFill,WB) > 0 ? 1 : 0); } /* if(sys->tk[curTankId].hsDrain.wid != 0 || sys->tk[curTankId].hsDrain.bid != 0) { SetCtrlAttribute(panel,PANEL_TANK_DRAIN_OFF, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsDrain,WB) > 0 ? 0 : 1); SetCtrlAttribute(panel,PANEL_TANK_DRAIN_ON, ATTR_VISIBLE, testBit(sys->tk[curTankId].hsDrain,WB) > 0 ? 1 : 0); } */ break; } return 0; }
STD_ERROR DLLEXPORT GRAPH_Plot( void *Data , int iYAxisPrecision ) { STD_ERROR StdError = {0}; int panel = 0; int numberOfPoints = 0, numberOfTraces = 0, maxNumberOfPoints = 0; int index = 0, tempIndex = 0, totalIndex = 0, PlotIndex = 0; int *pPointCounter = NULL; double *pSinglePlot = NULL; double lfCurrentX = 0.0, lfStepX = 0.0; double lfY_axis_min = 0.0, lfY_axis_max = 0.0; tsPlotGraphData *pData = NULL; IF ( (Data == NULL) , "Pointer passed NULL"); pData = (tsPlotGraphData*)Data; IF( ( pData->TraceList == NULL ) , "No traces added."); IF( ( pData->numberOfTraces == 0 ) , "No traces added."); panel = pData->panel; numberOfTraces = pData->numberOfTraces; lfCurrentX = pData->start_x; if ( pData->numberOfPoints ) lfStepX = ( pData->stop_x - pData->start_x ) / (double)(pData->numberOfPoints-1); else lfStepX = pData->stop_x - pData->start_x; ProcessDrawEvents(); numberOfPoints = pData->numberOfPoints; if ( numberOfPoints == 0 ) { for ( index = 0 ; index < numberOfTraces ; index++ ) if ( pData->TraceList[index].numberOfPoints > numberOfPoints ) numberOfPoints = pData->TraceList[index].numberOfPoints; } maxNumberOfPoints = numberOfPoints * numberOfTraces; CALLOC_ERR( pSinglePlot , maxNumberOfPoints+128 , sizeof(double)); CALLOC_ERR( pPointCounter , numberOfTraces+1 , sizeof(int)); IF (( pSinglePlot == NULL ), "Can't allocate Memory."); IF (( pPointCounter == NULL ), "Can't allocate Memory."); SetCtrlAttribute ( panel , pData->control , ATTR_NUM_TRACES , numberOfTraces ); SetCtrlAttribute ( panel , pData->control , ATTR_SCROLL_MODE , VAL_CONTINUOUS ); SetCtrlAttribute (panel, pData->control, ATTR_GRID_COLOR, VAL_BLACK); SetCtrlAttribute ( panel , pData->control , ATTR_POINTS_PER_SCREEN , numberOfPoints ); lfY_axis_min = pData->y_axis_min; lfY_axis_max = pData->y_axis_max; if (( IsNotANumber (lfY_axis_min) == 0 ) && ( IsNotANumber (lfY_axis_max) == 0 ) && ( fabs( lfY_axis_min ) > 1E-20 ) && ( fabs( lfY_axis_max ) > 1E-20 )) { SetAxisScalingMode (panel, pData->control, VAL_LEFT_YAXIS,VAL_MANUAL, lfY_axis_min , lfY_axis_max); } SetAxisScalingMode (panel, pData->control, VAL_BOTTOM_XAXIS ,VAL_MANUAL, pData->start_x , lfStepX ); SetCtrlAttribute (panel, pData->control, ATTR_YPRECISION , iYAxisPrecision ); if ( pData->szY_AxisName ) SetCtrlAttribute ( panel , pData->control , ATTR_YNAME , pData->szY_AxisName ); if ( pData->szX_AxisName ) SetCtrlAttribute (panel, pData->control , ATTR_XNAME , pData->szX_AxisName ); SetCtrlAttribute ( panel , pData->control , ATTR_LEGEND_NUM_VISIBLE_ITEMS , numberOfTraces ); for ( index = 0 ; index < numberOfTraces ; index++ ) { SetTraceAttribute ( panel , pData->control , index+1 , ATTR_TRACE_COLOR , pData->TraceList[index].trace_color ); SetTraceAttributeEx ( panel , pData->control , index+1 , ATTR_TRACE_LG_TEXT , pData->TraceList[index].szTraceName ); SetTraceAttribute ( panel , pData->control , index+1 , ATTR_TRACE_LG_TEXT_COLOR , VAL_BLACK ); SetTraceAttribute ( panel , pData->control , index+1 , ATTR_TRACE_LG_VISIBLE , 1 ); if ( pData->TraceList[index].iThickness > 0 ) SetTraceAttribute (panel, pData->control, index+1 ,ATTR_TRACE_THICKNESS, pData->TraceList[index].iThickness ); SetTraceAttribute ( panel , pData->control , index+1 , ATTR_TRACE_VISIBLE , 1 ); } for ( PlotIndex = 0 ; PlotIndex < numberOfPoints ; PlotIndex++ ) { for ( index = 0 ; index < numberOfTraces ; index++ ) { if ( ( lfCurrentX >= pData->TraceList[index].start_x ) && ( pPointCounter[index] < pData->TraceList[index].numberOfPoints ) && ( pPointCounter[index] < numberOfPoints )) { tempIndex = pPointCounter[index] + pData->TraceList[index].startTraceFromIndex; pSinglePlot[totalIndex++] = pData->TraceList[index].Trace[tempIndex]; pPointCounter[index]++; } else { tempIndex = pData->TraceList[index].startTraceFromIndex; pSinglePlot[totalIndex++] = pData->TraceList[index].Trace[tempIndex]; pPointCounter[index]++; } } lfCurrentX += lfStepX; } PlotStripChart ( panel , pData->control , pSinglePlot , totalIndex , 0 , 0 , VAL_DOUBLE ); Error: if ( pSinglePlot ) free(pSinglePlot); if ( pPointCounter ) free( pPointCounter ); ProcessDrawEvents(); return StdError; }