斑竹大侠们帮忙!急!

已锁定

asdf1234

  • 帖子

    209
  • 精华

    1
  • 被关注

    2

论坛等级:游侠

注册时间:2004-04-30

普通 普通 如何晋级?

斑竹大侠们帮忙!急!

1444

11

2006-06-12 21:59:42

目的:10秒采集一次过程变量的值,求一天的最大值、最小值和平均值,加上变量描述、单位、采集日期和时间后,并保存为(日期.CSV)。

思路:在一个周期为10秒的动作中采集并处理数据,程序如下:

#include "apdefap.h"

int gscAction( void )
{
#pragma code ("kernel32.dll")

VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);


#pragma code ()

/*存放变量的值*/

typedef struct data {
double var1;
double var2;
double var3;
double var4;
}Data;

char varName[4][20] = {"hj1","hj2","hj3","hj4"}; /* 变量的名称 */
char varDes cription[4][100]={"des cription1","des cription2","des cription3","des cription4"}; /* 变量描述 */
char varPer[4][10] = {"km/h","km/h","km/h","km/h"}; /* 单位名称 */

char fileName1[100] = "d:\\records.txt"; /* 存放变量记录的文件名称 */
char fileName2[100] = ""; /* 要保存的excel文件名称 */

char total[100] = "";
char col[10] = "";
char fix[3][10] = {"_AVG","_MAX","_MIN"};

Data data;

double varValue[4]; /* 变量值 */
double varSum[4]; /* 变量值的和 */
double varMin[4]; /* */
double varMax[4];
double varAvg[4];


FILE * fd = NULL;
int nCount ;//一个变量采集的次数
int i;
int dataLen = sizeof(Data);

SYSTEMTIME sysTime;

__object* pExcel = NULL;

GetLocalTime(&sysTime);

pExcel = __object_create("Excel.Application"); //打开excel文件
pExcel->Visible = 0; /* 隐藏 */

pExcel->Workbooks ->Open("d:\\book1.xls"); /* 打开excel文件模板 */

/** Get Var Value **/
/* */
for (i=0;i<4;i++)
{
varValue [i] =GetTagFloat (varName[i]);
}



nCount++;
/** Get Var Min **/

for ( i = 0 ; i < 4 ; i++ )
{
varMin[i] = varValue[i];
}

/** Get Var Max **/

for ( i = 0 ; i < 4 ; i++ )
{
varMax[i] = varValue[i];
}

/** Get Var Sum **/

for ( i = 0 ; i < 4 ; i++ )
{
varSum[i] = varValue[i];
}

/* open records file */

if ( (fd = fopen ( fileName1 , "a" )) == NULL )
{
printf ("open file %s failed\n" , fileName1);
}

/* read records */

while ( (fread ( &data , dataLen , 1 , fd )) )
{
nCount++;

varSum[0] = varSum[0] + data.var1;
varSum[1] = varSum[1] + data.var2;
varSum[2] = varSum[2] + data.var3;
varSum[3] = varSum[3] + data.var4;

if ( data.var1 > varMax[0] )
{
varMax[0] = data.var1;
}
if ( data.var2 > varMax[1] )
{
varMax[1] = data.var2;
}
if ( data.var3 > varMax[2] )
{
varMax[2] = data.var3;
}
if ( data.var4 > varMax[3] )
{
varMax[3] = data.var4;
}

if ( data.var1 < varMin[0] )
{
varMin[0] = data.var1;
}
if ( data.var2 < varMin[1] )
{
varMin[1] = data.var2;
}
if ( data.var3 < varMin[2] )
{
varMin[2] = data.var3;
}
if ( data.var4 < varMin[3] )
{
varMin[3] = data.var4;
}
}

varAvg[0] = varSum[0] / nCount;//取平均值
varAvg[1] = varSum[1] / nCount;
varAvg[2] = varSum[2] / nCount;
varAvg[3] = varSum[3] / nCount;

/* store record to file */

data.var1 = varValue[0];
data.var2 = varValue[1];
data.var3 = varValue[2];
data.var4 = varValue[3];

if ( !(fwrite ( &data , dataLen , 1 , fd)) )
{
printf ("write data to file %s failed\n" , fileName1);
}

fclose ( fd );

/* write data to excel file */

/* 输出变量名称 */

for ( i = 0 ; i < 4 ; i++ )
{
strcpy ( total , "" );
strcat ( total , varName[i]);
strcat ( total, fix[0] );
sprintf ( col , "A%d" , i * 3 + 1 );

pExcel->Worksheets("sheet1")->Range(col)->Value=total;

strcpy ( total , "" );
strcat ( total , varName[i]);
strcat ( total, fix[1] );
sprintf ( col , "A%d" , i * 3 + 2 );
pExcel->Worksheets("sheet1")->Range(col)->Value=total;

strcpy ( total , "" );
strcat ( total , varName[i]);
strcat ( total, fix[2] );
sprintf ( col , "A%d" , i * 3 + 3 );
pExcel->Worksheets("sheet1")->Range(col)->Value=total;

}

/* 输出日期 */

for ( i = 0 ; i < 4 ; i++ )
{
strcpy ( total , "" );
sprintf(total,"%04d-%02d-%02d %02d:%02d:%02d",sysTime.wYear,sysTime.wMonth,sysTime.wDay,sysTime.wHour,sysTime.wMinute,sysTime.wSecond);
sprintf ( col , "B%d" , i * 3 + 1 );

pExcel->Worksheets("sheet1")->Range(col)->Value=total;

strcpy ( total , "" );
sprintf(total,"%04d-%02d-%02d %02d:%02d:%02d",sysTime.wYear,sysTime.wMonth,sysTime.wDay,sysTime.wHour,sysTime.wMinute,sysTime.wSecond);

sprintf ( col , "B%d" , i * 3 + 2 );
pExcel->Worksheets("sheet1")->Range(col)->Value=total;

strcpy ( total , "" );
sprintf(total,"%04d-%02d-%02d %02d:%02d:%02d",sysTime.wYear,sysTime.wMonth,sysTime.wDay,sysTime.wHour,sysTime.wMinute,sysTime.wSecond);

sprintf ( col , "B%d" , i * 3 + 3 );
pExcel->Worksheets("sheet1")->Range(col)->Value=total;

}

/* 输出三种值 */

for ( i = 0 ; i < 4 ; i++ )
{
strcpy ( total , "" );
sprintf( total , "%f" , varAvg[i]);
sprintf ( col , "C%d" , i * 3 + 1 );

pExcel->Worksheets("sheet1")->Range(col)->Value=total;

strcpy ( total , "" );
sprintf( total , "%f" , varMax[i]);
sprintf ( col , "C%d" , i * 3 + 2 );
pExcel->Worksheets("sheet1")->Range(col)->Value=total;

strcpy ( total , "" );
sprintf( total , "%f" , varMin[i]);
sprintf ( col , "C%d" , i * 3 + 3 );
pExcel->Worksheets("sheet1")->Range(col)->Value=total;
}

/* 输出描述 */

for ( i = 0 ; i < 4 ; i++ )
{
strcpy ( total , "" );
strcat ( total , varDes cription[i]);
sprintf ( col , "D%d" , i * 3 + 1 );

pExcel->Worksheets("sheet1")->Range(col)->Value=total;

strcpy ( total , "" );
strcat ( total , varDes cription[i]);
sprintf ( col , "D%d" , i * 3 + 2 );
pExcel->Worksheets("sheet1")->Range(col)->Value=total;

strcpy ( total , "" );
strcat ( total , varDes cription[i]);
sprintf ( col , "D%d" , i * 3 + 3 );
pExcel->Worksheets("sheet1")->Range(col)->Value=total;

}

/* 输出单位 */


for ( i = 0 ; i < 4 ; i++ )
{
strcpy ( total , "" );
strcat ( total , varPer[i]);
sprintf ( col , "E%d" , i * 3 + 1 );

pExcel->Worksheets("sheet1")->Range(col)->Value=total;

strcpy ( total , "" );
strcat ( total , varPer[i]);
sprintf ( col , "E%d" , i * 3 + 2 );
pExcel->Worksheets("sheet1")->Range(col)->Value=total;

strcpy ( total , "" );
strcat ( total , varPer[i]);
sprintf ( col , "E%d" , i * 3 + 3 );
pExcel->Worksheets("sheet1")->Range(col)->Value=total;

}

sprintf(fileName2,"d:\\%04d-%02d-%02d.csv",sysTime.wYear,sysTime.wMonth,sysTime.wDay);/* 产生文件名 */


printf ("fileName2 is %s" , fileName2);

pExcel->ActiveWorkbook->Delete(fileName2); /* 删除之前保存的文件 */

pExcel->ActiveWorkbook->Save(fileName2);/* 保存成日期名 */


pExcel->Workbooks->Close( "d:\\book1.xls" );/* 关闭文件 */

pExcel->Quit(); /* 退出 */


__object_delete(pExcel);

return 0;



问题: 1、 程序运行过程中10秒增加一个EXCEL进程,进程越来越多,估计运行几小时系统就会死机
2、为什么无法保存(日期.CSV)文件?

请斑竹大侠们帮忙指点一下。

斑竹大侠们帮忙!急! 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32643条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。