lostger 发表于 2008-10-16 14:09:55

如何在在stipchart控件中显示多条曲线

我是新手,头一次用labwindows不是很懂,请大家不吝赐教!
我用NI的USB6008做数据采集,用的是DAQ助手,有5个通道,2个电压,3个电流,不知道怎么把它们显示到一个stipchart控件中,或者分开显示到2个stipchart控件中?
我用了PlotStripChart (int Panel_Handle, int Control_ID, void *Y_Array, int Number_of_Points, int Starting_Index, int Skip_Count, int Y_Data_Type);这个函数,但是不明白int Number_of_Points是什么意思,应该怎么用?

netcreature 发表于 2008-10-16 14:56:02

如果显示五条曲线,定义:
double data;
data=曲线1的一个点;
data=曲线2的一个点;
。。。
PlotStripChart(panelHandle,PANEL_STRIPCHART,data,5,0,0,VAL_DOUBLE);

Number_of_Points:表示要绘制几个点,五条曲线则要同时绘制5个点(因为stripchart默认每次绘制一个点)。

lostger 发表于 2008-10-16 15:30:48

回复 2# netcreature 的帖子

首先谢谢斑竹,我有些明白了。
还有一个问题,我在用daq助手时,可不可以用一个函数DAQmxReadAnalogF64来同时读入5个通道的数据,然后用一个PlotStripChart吧5条曲线显示出来,我的部分源程序,帮忙看一下对不?

int CVICALLBACK sample (int panel, int control, int event,
                void *callbackData, int eventData1, int eventData2)
{
        switch (event)
        {
                case EVENT_COMMIT:
                       
                        //如果NI-DAQmx任务不存在,则执行以下代码
                        if (taskHandle <= 0)
                        {
                                //在工程中创建一个NI-DAQmx任务句柄
                                CreateDAQTaskInProject(&taskHandle);
                               
                                //打开定时器
                                SetCtrlAttribute (panelHandle, PANEL_TIMER, ATTR_ENABLED, 1);
                        }

                        break;
        }
        return 0;
}

int CVICALLBACK timer (int panel, int control, int event,
                void *callbackData, int eventData1, int eventData2)
{
        int32 samplesread;
        float64 readarray;
       
        switch (event)
        {
                case EVENT_TIMER_TICK:
                       
                        //进行数据采集
                DAQmxReadAnalogF64 (taskHandle, DAQmx_Val_Auto, 10.0, DAQmx_Val_GroupByChannel, readarray, 5*1000, &samplesread, 0);       
                //将采集到的数据绘制在Strip Chart控件上
               
       if( samplesread>0 )        
               
               
                        PlotStripChart (panelHandle, PANEL_STRIPCHART, readarray, 5*samplesread, 0, 0, VAL_DOUBLE);
                       
                       
                       
                        break;
        }
        return 0;

lostger 发表于 2008-10-16 15:42:02

回复 2# netcreature 的帖子

我用的是NI的USB6008的DAQ助手

netcreature 发表于 2008-10-17 08:43:52

第一、你这样的程序肯定绘制不出五条曲线,stripchart控件是逐点绘制,readarray这样定义则表示要绘制5000条曲线!5*samplesread?!如果要绘制五条曲线,Number_of_Points就是5!
第二、我没用过NI USB6008的DAQ助手,你最好将DAQmxReadAnalogF64()函数原型即参数说明发上来。

lostger 发表于 2008-10-18 22:59:26

回复 5# netcreature 的帖子

谢谢版主!

Reads multiple floating-point samples from a task that contains one or more analog input channels.
原型

int32 DAQmxReadAnalogF64 (TaskHandle Task_Handle, int32 Samples_Per_Channel, float64 Timeout, bool32 Fill_Mode, float64 Read_Array[], uInt32 Array_Size_In_Samples, int32 *Samples_Per_Channel_Read, bool32 *Reserved);

jiegeng1986 发表于 2009-5-19 16:20:11

还是不懂,哎

wangyuhui727 发表于 2009-5-19 19:35:17

受教

jiegeng1986 发表于 2009-5-19 21:53:47

知道了很多东西
页: [1]
查看完整版本: 如何在在stipchart控件中显示多条曲线