




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WinCC实现报表的不同方法及其应用专题探讨之方案汇总请问版主,在wincc中怎么做才能把报表生成按日期的Excel文件?用VBS脚本实现,就是把文件名称以变量的形式表示。参考关闭保存Dimpatch,filenamefilename=CStr(Year(Now)&CStr(Month(Now)&CStr(Day(Now)&CStr(Hour(Now)+CStr(Minute(Now)&CStr(Second(Now)patch=d:&filename&demo.xlsobjExcelApp.ActiveWorkbook.SaveAspatchobjExcelApp.Workbooks.CloseobjExcelApp.QuitSetobjExcelApp=Nothing对于Excel报表,用VBS最灵活,Excel定义好格式后wincc来填空,平均累计值就用Excel的功能。DimexcelappDimaa,bb,ccSetexcelapp=CreateObject(Excel.Application)Setaa=HMIRuntime.tags(tag1)excelapp.visible=FalseTrueexcelapp.workbooks.openD:excel.xlsbb=Nowgetcurrent_datetime()aa.ReadMsgBoxCStr(bb)excelapp.cells(1,1).value=rrrrrr111111excelapp.cells(1,2).value=CStr(bb)excelapp.cells(2,2).value=CStr(aa.value)excelapp.cells(3,2).value=CInt(aa.value)excelapp.cells(4,2).value=CSng(aa.value)excelapp.cells(5,2).value=CDbl(aa.value)excelapp.cells(6,2).value=CLng(aa.value)excelapp.cells(3,3).value=ScreenItems(33).outputvalueexcelapp.cells(4,4).value=ScreenItems(35).outputvaluecc=D:excel+Mid(CStr(bb),1,4)+Mid(CStr(bb),6,2)+Mid(CStr(bb),9,2)+Mid(CStr(bb),12,2)+Mid(CStr(bb),15,2)+Mid(CStr(bb),18,2)+.xlsMsgBoxccexcelapp.DisplayAlerts=False对打开的文件,直接保存时,避免弹出对话框窗口,而是直接覆盖excelapp.activeworkbook.saveascc根据当前日期时间,另存为新的文件excelapp.activeworkbook.save对打开的文件,直接保存excelapp.activeworkbook.saveAsD:excelcopy.xls直接另存为新的文件excelapp.workbooks.closeexcelapp.quitSetexcelapp=Nothing我先上传一个报表吧!考虑到WINCC中实现此报表难度较大,通过是其他工程师利用VB程序编制而成的!这个报表的数据采集没有难度;唯一的难度在于4班3倒后,每个月班的出勤日是不一样的,这样对于月报来说,计算出本月每个班的出勤日是需要些算法的。数据的存储很重要。呵呵其实凌波微步大侠的这个报表就体现了这一点。说实话,这个报表用WinCC完全可以实现。关键就是如何存储数据。方法一WinCC支持VBS脚本,其实通过VBS和VB本质是没有区别的,都是通过ADO方式,存储数据格式化数据的存储。WinCC的用户归档说白了就是WinCC提供的一个操作数据库表的工具。我们可以通过用户归档,创建数据库表。然后存储数据。显示的话通过报表系统的连接外部ODBC数据库,通过SQL脚本格式化输出。就ok了。方法二这个报表的关键就在于如何确定班别和数据之间的关系。四班三运转在连续生产的行业是很常见的。我的解决思路钦庋模?首先确定班别和数据的对应关系。在WinCC归档的方式中有一种是通过事件触发的。那么我们可以通过不同的用户登录来确定归档的启动或者停止,WinCC中对应一个变量可以生成几个归档变量,那么我们就能确定班次和数据的关系。比如:一个变量A,在归档中我们可以建两个归档变量和它对应,一个是aa,一个是bb。A班用户登录时启动aa的归档,停止bb的归档;B班用户登录时启动bb归档,停止aa归档,依次类推。至于得到数据的方法,可以使用WinCC的标准归档查询实现。数据的显示,通过WinCC报表的变量直接连接显示。觉得和VB相比,方法各有千秋。但是这样就省去了多加一个应用程序了。呵呵,看到各位大侠对报表做了很多方面的深刻讨论,也让我学习了很多。不过本人功底差,对数据库基本不懂。确实用数据库存储数据是比较安全的,但通过数据库来查询得出的“报表”,应该称之为查询结果吧。失去了报表本身的意义了。较长一段时间,我也在思考和寻找WinCC里面做复杂报表的方法。WinCC自带的报表编辑器确实功能有限,还好WinCC本身功能是强大的,可以通过脚本来完成复杂报表功能。目前我也是这么做的。我个人认为,在WinCC里面做复杂报表,并不急于去组态和编程;而是先弄清楚原始手工报表的制作过程。报表也就是时间和各类数据的交集的一张表格,手工报表就是通过人工将数据填入相应的格子里面,手工报表就是这么朴素。不过手工报表有n张相同的纸,拿在手上就好像一本书,或者像一块大砖头。呵呵!目前我报表的思路如下:1、用excel我们也做一个符合自己实际需要报表(日报)的空白模板,我称它为Day_Report.xls;相信各位大侠的excel表格都比我做的精美;我不懂关系数据库,但各位大侠肯定比我精通excel各单元格之间的加、减、乘、除,甚至更加复杂的运算,并把运算结果放在你需要放置的单元格内,关系数据之间的运算,要在excel模板里面预先设置好。我们要充分利用excel强大的数据处理能力!2、在WinCC里面写一个全局脚本,在每天的00:00:01触发,执行复制Day_Report.xls并以此刻的年月日加载到模板文件名里面,将复制新生产的“Day_Report年月日.xls”存盘到你指定的目录。这样当天的空白日报文件也就有了。全局脚本代码如下:(本人测试通过,仅供参考)#includeapdefap.hintgscAction(void)#pragmacode(kernel32.dll)/调用动态链接库VOIDGetLocalTime(LPSYSTEMTIMElpSystemTime);#pragmacode()#pragmacode(Shell32.dll)/调用动态链接库VOIDShellExecuteA(HWND,LPCTSTR,LPCTSTR,LPCTSTR,LPCTSTR,INT);#pragmacode()charFileName30=;charDateTime30=;SYSTEMTIMEsysTime;_object*pExcel=NULL;/建立pExcel指针用来对EXCEL进行操作HWNDhandle=NULL;handle=FindWindow(NULL,WinCC-运行系统-);GetLocalTime(&sysTime);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(d:Day_Report.XLS);pExcel-ActiveWorkbook-SaveAs(FileName);/存盘/pExcel-ActiveWorkbook-PrintPreview();/可以预览/pExcel-ActiveWorkbook-PrintOut();/直接打印pExcel-Workbooks-Close();/关闭文件pExcel-Quit();/退出Excel_object_delete(pExcel);return0;3、再写一个全局脚本,整点触发,把你需要记录的变量写到“Day_Report年月日.xls”相应的单元格里面并存盘;这样就完成了报表的数据存储和打印。也就是说,我们可以在电脑里面存放一份报表,并打印一份报表。同样也实现了数据的存储。相关脚本代码如下:(当时是以分钟来做测试的,仅供参考;注意此段代码缺少对其它excel进程的判断,在此脚本执行前,不要有其它excel应用!切记哦!呵呵。)#includeapdefap.hintgscAction(void)inti;#pragmacode(kernel32.dll)/调用动态链接库VOIDGetLocalTime(LPSYSTEMTIMElpSystemTime);#pragmacode()#pragmacode(Shell32.dll)/调用动态链接库VOIDShellExecuteA(HWND,LPCTSTR,LPCTSTR,LPCTSTR,LPCTSTR,INT);#pragmacode()charFileName30=;SYSTEMTIMEsysTime;_object*pExcel=NULL;/建立pExcel指针用来对EXCEL进行操作HWNDhandle=NULL;handle=FindWindow(NULL,WinCC-运行系统-);GetLocalTime(&sysTime);/*SetTagWord(Minute,sysTime.wMinute);i=GetTagWord(Minute)+3;if(i26)GetTagWord(Minute);elseif(iVisible=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(TAG1);pExcel-Worksheets(sheet1)-Cells(7,i)-Value=GetTagFloat(TAG2);pExcel-Worksheets(sheet1)-Cells(8,i)-Value=GetTagFloat(TAG3);pExcel-Worksheets(sheet1)-Cells(9,i)-Value=GetTagFloat(TAG4);pExcel-Worksheets(sheet1)-Cells(10,i)-Value=GetTagFloat(TAG5);pExcel-Worksheets(sheet1)-Cells(11,i)-Value=GetTagFloat(TAG6);pExcel-ActiveWorkbook-Save;/As(FileName);/存盘/pExcel-ActiveWork
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科普防疫知识策划活动方案
- 高压线路停电应急预案方案
- 最美建筑拍摄方案设计意图
- 经典心理咨询方案
- 咨询合同的利润分配方案
- 山西企业咨询公司方案
- 提高自己的营销方案设计
- 物流咨询交流服务方案
- 咨询客服服务方案
- 房产资产优化咨询方案
- 2025年医疗工作人员定向招聘考试笔试试题(含答案)
- 第二单元混合运算单元测试卷(含答案) 2025-2026学年人教版三年级数学上册
- 2025年中央一号文件客观题及参考答案
- 出境人员行前安全培训课件
- 2025年河北沧州市中心医院、沧州博施康养集团公开招聘辅助岗工作人员113名考试参考试题及答案解析
- 俄乌局势进展
- 2025甘肃兰州兴蓉环境发展有限责任公司招聘内控管理岗等岗位5人笔试模拟试题及答案解析
- 用电安全与消防知识培训课件
- 2025年法考真题及答案
- 基孔肯雅热防护知识科普课件
- 2025年思想政治教育实践考试试题及答案解析
评论
0/150
提交评论