使用论坛中提供的代码,在全局脚本中定时执行脚本,但是写入EXCEL的值都是0,不知道为何?
#include"apdefap.h"
voidOnClick(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName)
{
inti;
#pragmacode("kernel32.dll")//调用动态链接库
VOIDGetLocalTime(LPSYSTEMTIMElpSystemTime);
#pragmacode()
#pragmacode("Shell32.dll")//调用动态链接库
VOIDShellExecuteA(HWND,LPCTSTR,LPCTSTR,LPCTSTR,LPCTSTR,INT);
#pragmacode()
charFileName[30]="";
SYSTEMTIMEsysTime;
__object*pExcel=NULL;//建立pExcel指针用来对EXCEL进行操作
HWNDhandle=NULL;
handle=FindWindow(NULL,"wincc-运行系统–");
GetLocalTime(&sysTime);
//***********************************
SetTagWord("Minute",sysTime.wMinute);
i=GetTagWord("Minute")+3;
if(i>26){GetTagWord("Minute");}
elseif(i<=26)
{
sprintf(FileName,"d:\\Day_Report_%02d-%02d-%02d.xls",sysTime.wYear,sysTime.wMonth,sysTime.wDay);
pExcel=__object_create("Excel.Application");
pExcel->Visible=0;//控制生成的excel文件是否可见,当1时,生成excel文件时可见.
pExcel->Workbooks->Open(FileName);
pExcel->Worksheets("sheet1")->Range("X1")->Value=GetTagChar("@ServerName");//Return-Type:char*读取当前计算机名
pExcel->Worksheets("sheet1")->Range("X2")->Value=GetTagChar("@CurrentUser");//Return-Type:char*读取当前操作员
pExcel->Worksheets("sheet1")->Cells(6,i)->Value=GetTagChar("GI-10001");
pExcel->Worksheets("sheet1")->Cells(7,i)->Value=GetTagFloat("GI-10002");
pExcel->Worksheets("sheet1")->Cells(8,i)->Value=GetTagFloat("GI-10003");
pExcel->Worksheets("sheet1")->Cells(9,i)->Value=GetTagFloat("GI-10004");
pExcel->Worksheets("sheet1")->Cells(10,i)->Value=GetTagFloat("GI-10005");
pExcel->Worksheets("sheet1")->Cells(11,i)->Value=GetTagFloat("GI-100016");
pExcel->ActiveWorkbook->Save;//AS(FileName);//存盘~
//pExcel->ActiveWorkbook->PrinTPreview();//可以预览
//if(i>=27){pExcel->ActiveWorkbook->PrintOut();}//直接打印
pExcel->Workbooks->Close();//关闭文件
pExcel->Quit();//退出Excel
__object_delete(pExcel);
}
//WINCC:TAGNAME_SECTION_START
//syntax:#defineTagNameInAction"DMTagName"
//nextTagID:1
//WINCC:TAGNAME_SECTION_END
//WINCC:PICNAME_SECTION_START
//syntax:#definePicNameInAction"PictureName"
//nextPicID:1
//WINCC:PICNAME_SECTION_END
}
另外此段脚本的含义是什么?
SetTagWord("Minute",sysTime.wMinute);
i=GetTagWord("Minute")+3;
if(i>26){GetTagWord("Minute");}
elseif(i<=26)
最佳答案
http://www.52PLC.net/read.php?tid=4596
参考这个,带注释的
SetTagWord("Minute",sysTime.wMinute);//wincc变量Minute写入当前系统时间的分钟值
i=GetTagWord("Minute")+3;//i=当前时间的分钟值+3
if(i>26){GetTagWord("Minute");}//如果当前时间的分钟值+3大于26则读取保存的分钟值
elseif(i<=26)//否则如果分钟值+3小于等于26则。。。。。。
提问者对于答案的评价:
谢谢您的解答,也感谢其他朋友的热心帮助。zhangli0能否将代码发到我的邮箱呢,我以前注册过,但是一直登录不上。394514773@qq.com.这段程序原作者应该是使用的STEP7软件,而我使用的是PCS7所以对于GI-10001这些变量的地址写错了,改为变量归档中的实际地址后没有问题了。
最佳答案作者回复:
你直接到这个网站上去下载就好了,这是我上传的。