📄 sample10svr.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 + -