⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sample10svr.c

📁 labwindows 源码 CVI的 DDE数据交换源代码 这是CVI和VB2种平台之间的数据交互
💻 C
字号:

//此程序用来产生发送给服务器的数据,并发送给服务器

#include <analysis.h> 
#include <ddesupp.h>    /* CF_TEXT, DDE_CONNECT, DDE_DISCONNECT, DDE_ADVISELOOP,
                           DDE_DATAREADY, DDE_REQUESTDATA, DDE_ADVISESTOP,
                           DDE_EXECUTE, ServerDDEWrite(), RegisterDDEServer(),
                           UnregisterDDEServer(), AdviseDDEDataReady() */
#include <userint.h>    /* ATTR_MIN_VALUE, ATTR_MAX_VALUE, EVENT_VAL_CHANGED,
                           EVENT_COMMIT, LoadPanel(), DiscardPanel(),
                           SetCtrlVal(), GetCtrlVal(), GetCtrlAttribute(),
                           QuitUserInterface(), ProcessSystemEvents(),
                           DisplayPanel() */
#include <ansi_c.h>     /* strcmp(), RAND_MAX, rand() */
#include "sample10svr.h"     /* TRUE, FALSE, NAME, TOPIC, KNOB_ITEM, COLOR_ITEM,
                           COMMAND, WAIT */
#include "sample10dde.h"     /* SERVER, SERVER_AUTO, SERVER_CONTROL, SERVER_QUIT,
                           SERVER_INOUT */

#define MAX_STEP    3   /* increment range of the data control in auto mode */
#define pi 3.1415926 
static int          panel, autoMode, flow = FALSE;
double datapoints[150];
static unsigned int convID;

int CVICALLBACK DataCallback (int panel, int control, int event, void *callbackData,
        int eventData1, int eventData2);
int CVICALLBACK AutoCallback (int panel, int control, int event, void *callbackData,
        int eventData1, int eventData2);
int CVICALLBACK QuitCallback (int panel, int control, int event, void *callbackData,
        int eventData1, int eventData2);
int CVICALLBACK SrvCallback (unsigned int handle, char *topicName, char *itemName, int xType,
        int dataFmt, int dataSize, void *dataPtr, void *callbackData);


void ActivateServer (void)
{
    panel = LoadPanel (0, "sample10dde.uir", SERVER);
    DisplayPanel (panel);
    RegisterDDEServer (NAME, SrvCallback, 0);   /* registers program as a DDE server */
    return;
}


//执行服务器终止任务

void DeactivateServer (void)
{
    UnregisterDDEServer (NAME); /* removes program from the system's server database */
    DiscardPanel (panel);

    return;
}

 
//数据发送回调函数

int CVICALLBACK DataCallback (int panel, int control, int event, void *callbackData,
    int eventData1, int eventData2)
{
    int data,shape,i,j=0;
    double phase;
    // char buffer[10]={0};
   char buffer[1000]={0}; 
   phase=0.0;
    if (event == EVENT_COMMIT) {       /* checks existence of link */
    	GetCtrlVal (panel, SERVER_WFM, &shape);		 /* 采集波形 */
	    switch (shape)
			{			        
		// 执行函数
			case 0 :
		     	TriangleWave (50,5,0.02,&phase,datapoints);
		     	break;
			case 1 :
		     	SinePattern (50,5,0.0,1.0,datapoints); 
			 	break;
			case 2 :
		     	SquareWave (50,5,0.02,&phase,50.0,datapoints);
		     	break;
			}
	    DeleteGraphPlot (panel, SERVER_GRAPH, -1, 1);		  
        PlotY (panel, SERVER_GRAPH, datapoints,50, VAL_DOUBLE,
        VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, 1);	
		for (i=0; i<50; i++) {
            sprintf(&buffer[j],"%f\n", datapoints[i]);
            j=strlen(buffer);
            }
        AdviseDDEDataReady (convID, KNOB_ITEM, CF_TEXT, buffer, strlen (buffer)+1,
         WAIT);                                 /* notifies the client */
        }

    return FALSE;
}


//程序退出

int CVICALLBACK QuitCallback (int panel, int control, int event, void *callbackData,
    int eventData1, int eventData2)
{
    if (control != SERVER_QUIT) /* checks callback validity */
        return FALSE;

    if (event == EVENT_COMMIT)
        QuitUserInterface (0);  /* terminates RunUserInterface() call inside main program */
    return FALSE;
}
//

int CVICALLBACK SrvCallback (unsigned int handle, char *topicName, char *itemName, int xType,
    int dataFmt, int dataSize, void *dataPtr, void *callbackData)
{
    int  data,i,j=0;
    char buffer[1000]={0};
    
    if (xType != DDE_CONNECT && handle != convID || strcmp (topicName, TOPIC))
        return FALSE;           
    switch (xType) {            /* determines message type */
        case DDE_CONNECT:
            convID = handle;    /* assigns new conversation handle to convID */
            break;
        case DDE_DISCONNECT:
            convID = -1;        /* eliminates old conversation handle */
            break;
        case DDE_ADVISELOOP:
            if (strcmp (itemName, KNOB_ITEM))
                return FALSE;   /* hot links are only supported on one item (knob) */
            flow = TRUE;        /* establish new link */
            break;
        case DDE_DATAREADY:
            MessagePopup ("来自VB客户的信息", (char *)dataPtr);
            break;              /* display message sent by the Visual Basic Client */
        case DDE_REQUESTDATA:  //请求信息
            if (strcmp (itemName, KNOB_ITEM) || dataFmt != CF_TEXT)
                return FALSE;   /* checks item and data format validity */
            for (i=0; i<50; i++) {
            sprintf(&buffer[j],"%f\n", datapoints[i]);
            j=strlen(buffer);
            }    
            ServerDDEWrite (convID, KNOB_ITEM, CF_TEXT, &buffer, strlen (buffer)+1,
                WAIT);          /* obtains data from color control and sends it to client */
            break;
        case DDE_ADVISESTOP:
            if (strcmp (itemName, KNOB_ITEM))
                return FALSE;   /* hot links are only supported on one item (knob) */
            flow = FALSE;       /* remove link */
            break;
        case DDE_EXECUTE:		//自动执行
            if (strcmp (itemName, COMMAND))
                return FALSE;   
            for (i=0; i<50; i++) {
            sprintf(&buffer[j],"%f\n", datapoints[i]);
            j=strlen(buffer);
            }    
            ServerDDEWrite (convID, KNOB_ITEM, CF_TEXT, &buffer, strlen (buffer)+1,
                WAIT);          
            break;              
        default:
            return FALSE;       
        }

	// TRUE 表示服务器已成功地处理了信息
    return TRUE;                
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -