WINCC报警记录输出到EXCEL

wincc报警记录如何输出到EXCEL格式文件?除了已有文档或帖子说的使用WINCC选件做,能通过脚本编程直接实现吗?有做过的请给个例程。

最佳答案

可以用C脚本,我已经照此例子实验,可以自动生成EXCEL文件
给你转个论坛的帖子做参考
取之于“民”用之于“民”,几段代码,希望对后来者有帮助,不要见笑。
1、记录脚本:同一卡片号的每一根钢的数据记录,有多少根,记多少行
#include "apdefap.h"
int gscAction( void )
{
#pragma code ()
char FileName[20] = " ";
double genshu,row,col;
__object* pExcel = NULL; 
genshu=GetTagDouble("记数根数"); 
SetTagDouble("根数记录",genshu);
row=genshu+4;
if((GetTagBit("钢温记录信号")==1))

{

pExcel = __object_create("Excel.Application.9"); //9表示用的是office 
2000
pExcel->Visible =0;

pExcel->Workbooks ->Open ("e:\\LZEQ_HMI\\JILU.xls");//Cells(row,col)

pExcel->Worksheets("sheet1")->Cells(row,1)->Value=GetTagWord("记数根数


"); 

pExcel->Worksheets("sheet1")->Cells(row,2)->Value=GetTagChar("开始时间


");

pExcel->Worksheets("sheet1")->Cells(row,3)->Value=GetTagWord("1#高温计


温度记录");

pExcel->Worksheets("sheet1")->Cells(row,4)->Value=GetTagFloat("1#水箱流


量记录");

pExcel->Worksheets("sheet1")->Cells(row,5)->Value=GetTagWord("2#高温计


温度记录");

pExcel->Worksheets("sheet1")->Cells(row,6)->Value=GetTagFloat("2#水箱流


量记录");

pExcel->Worksheets("sheet1")->Cells(row,7)->Value=GetTagWord("3#高温计


温度记录");

pExcel->Worksheets("sheet1")->Cells(row,8)->Value=GetTagFloat("3#水箱流


量记录");

pExcel->Worksheets("sheet1")->Cells(row,9)->Value=GetTagWord("4#高温计


温度记录");

pExcel->Worksheets("sheet1")->Cells(row,10)->Value=GetTagWord("5#高温计


温度记录");

pExcel->Worksheets("sheet1")->Cells(row,11)->Value=GetTagFloat("4#水箱


流量记录");

pExcel->Worksheets("sheet1")->Cells(row,12)->Value=GetTagWord("6#高温计


温度记录");

pExcel->Worksheets("sheet1")->Cells(row,13)->Value=GetTagWord("7#高温计


温度记录");

pExcel->Worksheets("sheet1")->Cells(row,14)->Value=GetTagFloat("5#水箱


流量记录");

pExcel->Worksheets("sheet1")->Cells(row,15)->Value=GetTagWord("8#高温计


温度记录");

pExcel->Worksheets("sheet1")->Cells(row,16)->Value=GetTagChar("系统时间


");

SetTagBit("钢温记录信号",0);

}

pExcel->ActiveWorkbook->Save;

pExcel->Workbooks->Close();

pExcel->Quit();

__object_delete(pExcel);

return 0;


2、存储脚本。每一卡片号的钢记录为一张以卡片号为名的Excel表

#include "apdefap.h"


int gscAction( void )

{

#pragma code ("kernel32.dll")

VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);

#pragma code ()

char FileName[20] = " ";

char* Name;

float  guige,hao;

#pragma code("kernel32.dll")

BOOL DeleteFileA(LPCTSTR lpFileName);//声明API函数。

#pragma code()

SYSTEMTIME sysTime;

__object* pExcel = NULL; 

GetLocalTime(&sysTime);

hao=GetTagFloat("卡片号_22");


//Name=GetTagChar("卡片号_22");

if (hao==0)

{

Name=GetTagChar("系统时间");


}

else

{

Name=GetTagChar("卡片号_22");


}


guige=GetTagFloat("轧制规格_22");

if (guige>1000)

{

guige=guige/100;

SetTagFloat("成品规格记录",guige);

}

else

{

SetTagFloat("成品规格记录",guige);

}

if ((guige>100)&(guige<1000))

{

guige=guige/10;

SetTagFloat("成品规格记录",guige);

}

else

{

SetTagFloat("成品规格记录",guige);

}


if((GetTagBit("转存")==1))

{

sprintf(FileName,"e:\\LZEQ_HMI\\记录\\%s.xls"  ,Name);

pExcel = __object_create("Excel.Application.9"); //9表示用的是office 


2000

pExcel->Visible = 0;

pExcel->Workbooks ->Open ("e:\\LZEQ_HMI\\JILU.xls");

pExcel->Worksheets("sheet1")->Range("A2")->Value=GetTagChar("形状");

pExcel->Worksheets("sheet1")->Range("A1")->Value=GetTagChar("控冷");

pExcel->Worksheets("sheet1")->Range("C2")->Value=GetTagFloat("成品规格


记录");

pExcel->Worksheets("sheet1")->Range("F2")->Value=GetTagChar("开始日期


1");

pExcel->Worksheets("sheet1")->Range("J2")->Value=GetTagChar("系统日期


");

pExcel->Worksheets("sheet1")->Range("C3")->Value=GetTagDouble("卡片号


_22");

pExcel->Worksheets("sheet1")->Range("F3")->Value=GetTagChar("钢种_22");

pExcel->Worksheets("sheet1")->Range("I3")->Value=GetTagChar("炉号_22");

pExcel->Worksheets("sheet1")->Range("L3")->Value=GetTagChar("来料规格


_22");

pExcel->Worksheets("sheet1")->Range("O3")->Value=GetTagChar("本卡片号根


数_22");

pExcel->ActiveWorkbook->SaveAs(FileName);

pExcel->Workbooks->Close();

pExcel->Quit();

__object_delete(pExcel);

DeleteFileA("e:\\LZEQ_HMI\\JILU.xls");//调用API函数。

pExcel = __object_create("Excel.Application.9"); //9表示用的是office 


2000

pExcel->Visible =0;

pExcel->Workbooks ->Open ("e:\\LZEQ_HMI\\运行数据库初始\\JILU.xls");

pExcel->ActiveWorkbook->SaveAs("e:\\LZEQ_HMI\\JILU.xls");

pExcel->Workbooks->Close();

pExcel->Quit();

__object_delete(pExcel);

SetTagBit("转存",0);

}

return 0;

 

3、记录卡片号查询代码

char FileName[256];


sprintf(FileName,"C:\\Program Files\\Microsoft 


Office\\Office\\Excel.exe e:\\LZEQ_HMI\\记录\\%s.xls",GetTagChar("查询


卡片号"));


ProgramExecute(FileName);

提问者对于答案的评价:
根据你的思路试试,但愿成功!谢谢

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc268758.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2019年6月11日 上午6:16
下一篇 2019年6月11日 上午6:16

相关推荐