#include <utility.h>
#include <rs232.h>
#include <ansi_c.h>
#include <cvirte.h>
#include <userint.h>
#include "WaveReceive.h"
char CharToHex(char c);
void ConvertToHex(char hexdata[], int chardata);
int CenterInRange(const double inputArray[], int numElements, double upper, double lower, double outputArray[]);
static int panelHandle;
static int baudrate = 0;
static int comport = 0;
static int checkbit = 0;
static int databit = 0;
static int stopbit = 0;
static int status = 0;
int lightflag=0;
int hexshowflag =0;
int logg;
double receivetime=0;
double min,max,rate;
double sampsPerCycle,bufferSize,cyclesPerBuffer,frequency;
char receivechar2[500]={0};
//****************************************************************************************//
// 主函数代码 //
//****************************************************************************************//
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "WaveReceive.uir", PANEL)) < 0)
return -1;
SetCtrlVal (panelHandle, PANEL_LED,lightflag);
SetCtrlAttribute(panelHandle,PANEL_DECORATION_1,ATTR_FRAME_COLOR,VAL_DK_CYAN);
SetCtrlAttribute(panelHandle,PANEL_DECORATION_2,ATTR_FRAME_COLOR,VAL_DK_CYAN);
SetCtrlAttribute(panelHandle,PANEL_DECORATION_3,ATTR_FRAME_COLOR,VAL_DK_CYAN);
SetCtrlAttribute(panelHandle,PANEL_DECORATION_4,ATTR_FRAME_COLOR,VAL_DK_CYAN);
SetCtrlAttribute(panelHandle,PANEL_DECORATION_5,ATTR_FRAME_COLOR,VAL_DK_CYAN);
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
//****************************************************************************************//
// 串口区(Com information)代码 //
//****************************************************************************************//
int CVICALLBACK opencomport (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
if (lightflag == 1)
{
SetCtrlVal (panel, PANEL_LED, 0);
SetCtrlAttribute (panel, PANEL_COMOPENBUTTON, ATTR_LABEL_TEXT ,"打开串口");
CloseCom(comport);
lightflag =0;
break;
}
else if (lightflag == 0)
{
//**************获取串口信息***************//
GetCtrlVal(panel,PANEL_COMPORT_RING,&comport);
GetCtrlVal(panel,PANEL_BAUDRATE_RING,&baudrate);
GetCtrlVal(panel,PANEL_CHECKBIT_RING,&checkbit);
GetCtrlVal(panel,PANEL_DATABIT_RING,&databit);
GetCtrlVal(panel,PANEL_STOPBIT_RING,&stopbit);
//**********根据上述信息打开串口***********//
status = OpenComConfig(comport,"",baudrate,checkbit,databit,stopbit,32767,32767);
SetCtrlVal (panel, PANEL_LED, 1);
SetCtrlAttribute (panel, PANEL_COMOPENBUTTON, ATTR_LABEL_TEXT ,"关闭串口");
lightflag=1;
if(status!=0)
{
MessagePopup("错误", "打开失败!");
SetCtrlVal (panel, PANEL_LED, 0);
SetCtrlAttribute (panel, PANEL_COMOPENBUTTON, ATTR_LABEL_TEXT ,"打开串口");
lightflag =0;
}
}
break;
}
return 0;
}
//****************************************************************************************//
// 波形接收区(Wave receive)代码 //
//****************************************************************************************//
int CVICALLBACK ReceiveWave (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
/*** 获取波形信息 ***/
GetCtrlVal(panel,PANEL_MINVAL_NUMERIC,&min);
GetCtrlVal(panel,PANEL_MAXVAL_NUMERIC,&max);
GetCtrlVal(panel,PANEL_FREQUENCY_NUMERIC,&frequency);
GetCtrlVal(panel,PANEL_SAMPSPERCYCLE_NUMERIC,&sampsPerCycle);
GetCtrlVal(panel,PANEL_CYCLESPERBUFF_NUMERIC,&cyclesPerBuffer);
bufferSize = sampsPerCycle * (unsigned long)ceil(cyclesPerBuffer);
/*** 设置画波形X轴参数 ***/
rate = (frequency*bufferSize)/cyclesPerBuffer;
SetCtrlAttribute(panel,PANEL_GRAPH,ATTR_XAXIS_GAIN,1.0/rate);
logg = (int)log10(rate);
SetCtrlAttribute(panel,PANEL_GRAPH,ATTR_XPRECISION,logg);
/*** 触发时钟、获取并设置时钟信息 ***/
SetCtrlAttribute (panel, PANEL_RECEIVETIMER, ATTR_ENABLED, 1);
GetCtrlVal (panel, PANEL_TIMENUMERIC,&receivetime);
receivetime = receivetime/1000.0;
SetCtrlAttribute (panel, PANEL_RECEIVETIMER, ATTR_INTERVAL, receivetime);
break;
}
return 0;
}
/*** 时钟回调函||在每个时钟周期内接收一次数据,并产生一次波形 ***/
int CVICALLBACK ReceiveTimer (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int i=0,t=0,len=0;
int lenth=0;
int flag=0;
short int ptr[1000]={0};
double recievedouble[1000]={0};
switch (event)
{
case EVENT_TIMER_TICK:
len=ceil(bufferSize );
lenth=GetInQLen(comport);
if(lenth>3*bufferSize&&lenth<6*bufferSize) //读入的数据太多或太少都不进行处理
{
ComRd(comport, receivechar2,lenth);
/*** 判断标志位,对符合传送方协议标志(字头:0x1111,字尾:0x2222)的数据进行类型转换、画波形。否则清除输入队列 ***/
while(!flag)
{
if ((receivechar2[i]==0x11)&&(receivechar2[i+1]==0x11)&&(receivechar2[i+2*len+4]==0x22)&&(receivechar2[i+2*len+5]==0x22))
{
flag=1;
break;
}
else
{
i++;
if(i>3*bufferSize)
return 0;
}
}
for(t=1;t<(bufferSize+2);t++)
{
ptr[t-1] =(*(short int*)(&receivechar2[i+2*t])); //将字符型数据转换成短整型
recievedouble[t-1]=ptr[t-1]/10000.0; // 还原数据到实型
}
CenterInRange(recievedouble,bufferSize,max,min,recievedouble);
DeleteGraphPlot(panel,PANEL_GRAPH,-1,VAL_DELAYED_DRAW);
PlotY (panel,PANEL_GRAPH, recievedouble,bufferSize , VAL_DOUBLE, VAL_FAT_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
}
else
{
FlushInQ (comport);
}
break;
}
return 0;
}
int CVICALLBACK RangeCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
double min,max;
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal(panel,PANEL_MINVAL_NUMERIC,&min);
GetCtrlVal(panel,PANEL_MAXVAL_NUMERIC,&max);
if( min<max )
SetAxisScalingMode(panel,PANEL_GRAPH,VAL_LEFT_YAXIS,VAL_MANUAL,min,max);
return 1;
break;
}
return 0;
}
int CenterInRange(const double inputArray[], int numElements, double upper, double lower, double outputArray[])
{
int i;
double shift = (upper+lower)/2.0;
for(i=0; i < numElements; i++)
outputArray[i] = inputArray[i] + shift;
return 0;
}
int CVICALLBACK StopCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
SetCtrlAttribute (panel, PANEL_RECEIVETIMER, ATTR_ENABLED, 0);//停止触发时钟
//CloseCom (comport);
break;
}
return 0;
}
//****************************************************************************************//
// 文本接收区(Text receive area)代码

dramatical
- 粉丝: 0
最新资源
- 11494032-MobileSafe-19972-1755774117305.zip
- 复杂网络的被动性与同步控制
- ARGO是一个开源的AI代理平台,可以将Local Manus带到您的桌面上 一键式模型下载,无缝关闭LLM接口…
- 从 DeepSeek-R1-Zero 汲取灵感,如何增强 LLM/VLM/MLLM 的复杂多模态推理能力
- 美赛数学建模专用-第六章-图形处理功能.doc
- 筏板基础设计分析.doc
- 2020年网络会计论文范文.doc
- 第十一章荧光分析.ppt
- 网络安全的培训总结-网络安全的培训总结报告.doc
- AI人工智能.pptx
- 甲供、甲控物资管理工作流程图.docx
- 高强混凝土、高性能混凝土施工技术(工程实例).doc
- 工程项目成品、半成品保护作业指导书.doc
- 管道安装工艺流程图.doc
- 制浆造纸废水的处理.doc
- 于基单片机的语音识别系统-学位论文.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


