




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用VBS实现WINCC的用户归档输出到EXCEL表格的方法和例(2009-12-30 16:47:45) 用VBS实现WINCC的用户归档输出到EXCEL表格的方法和例子程序求用VBS实现WINCC的用户归档输出到固定格式的EXCEL表格的方法和例子程序!我主要问题在SQL数据库的查询语句不会。看见论坛里有关用VBS实现EXCEL的数据查询和导出,我现在想要完成如下功能:每分钟将数据归档,用户可以输入任意的时刻时间查询从任意时刻开始的之后每隔1小时的数据(有点像日报里的24个小时)。我现在对于VBS查询数据库的语句不懂,望大大赐教!谢谢SQL查询语句Dimstrcasstringstrc=provider=WinCCOLEDBProvider.1;catalog=CC_RebdI_09_06_22_10_38_35R;datasource=ComputerNameWinCC这个连接字符串可以在SQl2000中看到Dimcc1Setcc1=CreateObject(adodb.connection)cc1.ConnectionString=strccc1.CursorLocation=3cc1.openDimrstAsObjectSetrst=CreateObject(adodb.recordset)dimssqlasstringssql=Tag:R,Archive_3DB1DBD0,2009-7-2900:00:00.0000,2009-7-2923:59:59.999,timestep=3600,258Archive_3I_DB1DBD0归档和变量2009-7-2900:00:00.0000,2009-7-2923:59:59.999时间段timestep=3600,258每阁多少秒拿一个数据(3600=1小时),258表示每个时间段取最后一个数据rst.Openssql,cc1这样查出来的数据就是一天的每小时的数据对rst记录集处理就可以得到你要的数据=FunctionactionDimobjExcelAppDimi,TimeM,TimeNow,TimeSSetTimeM=HMIRuntime.Tags(TimeM)i=1+TimeM.ReadTimeNow=CStr(Year(Now)&年&CStr(Month(Now)&月&CStr(Day(Now)&日&CStr(Hour(Now)&-&CStr(Minute(Now)&:&CStr(Second(Now)TimeS=Second(Now)SetobjExcelApp=CreateObject(Excel.Application)objExcelApp.Visible=FalseobjExcelApp.Workbooks.OpenE:ExcelTest.xlsobjExcelApp.Cells(i,2).Value=123.47objExcelApp.Cells(i,1).Value=TimeNowobjExcelApp.DisplayAlerts=FalseobjExcelApp.ActiveWorkbook.SaveobjExcelApp.Workbooks.CloseobjExcelApp.quitSetobjExcelApp=NothingEndFunction以上代码用于往指定的Excel表格中写数据。该动作每分钟触发一次,依次往表格中写入60个数据,当进入下一个小时后,大概是因为表格中已存在数据所以在写入前会弹出对话框提醒是否覆盖还是另存,加入objExcelApp.DisplayAlerts=False语句后就不存在这个问题了,对此要谢谢谢谢版主:城外之人。WINCC与EXCEL数据交换 hjyhjy,2010-11-09 16:55:28WINCC与EXCEL数据交换代码Sub X6309X94AE13X0000X0000_OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y) Dim objExcelAppSet objExcelApp=createobject(excel.applcation)objExcelApp.Visible=TrueobjExcelApp.Workbooks.OpenE:a.xlsobjExcelApp.cells(4,3).Value=ScreenItems(b).OutputvalueobjExcelApp.ActiveWorkbook.SaveobjExcelApp.Workbooks.CloseobjExcelApp.QuitSet objExcelApp=NothingEnd Sub谢谢,已经解决,单词写错了objExcelApp.cells(4,3).Value=ScreenItems(b).Outputvalue这里也有问题 在wincc中怎么做才能把报表生成按日期的Excel文件2011-07-19 09:45在wincc 中怎么做才能把报表生成按日期的Excel 文件VBS脚本实现,就是把文件名称以变量的形式表示。参考关闭保存Dim patch,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.SaveAs patchobjExcelApp.Workbooks.CloseobjExcelApp.QuitSet objExcelApp= Nothing对于Excel报表,用VBS最灵活,Excel 定义好格式后wincc来填空,平均累计值就用Excel 的功能。Dim excelappDim aa,bb,ccSet excelapp = CreateObject(Excel.Application)Set aa = HMIRuntime.tags(tag1)excelapp.visible = FalseTrueexcelapp.workbooks.open D:excel.xlsbb = Now getcurrent_datetime()aa.ReadMsgBox CStr(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) + .xlsMsgBox ccexcelapp.DisplayAlerts = False 对打开的文件,直接保存时,避免弹出对话框窗口,而是直接覆盖excelapp.activeworkbook.saveas cc 根据当前日期时间,另存为新的文件excelapp.activeworkbook.save 对打开的文件,直接保存excelapp.activeworkbook.saveAs D:excelcopy.xls 直接另存为新的文件excelapp.workbooks.closeexcelapp.quitSet excelapp = Nothing这个报表的数据采集没有难度;唯一的难度在于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 本身功能是强大的,可以通过脚本来完成复杂报表功能。目前我也是这么做的。报表的思路如下:1、用excel我们也做一个符合自己实际需要报表(日报)的空白模板,我称它为Day_Report.xls;相信各位大侠的excel表格都比我做的精美;我不懂关系数据库,但各位大侠肯定比我精通excel 各单元格之间的加、减、乘、除,甚至更加复杂的运算,并把运算结果放在你需要放置的单元格内,关系数据之间的运算,要在excel模板里面预先设置好。我们要充分利用excel强大的数据处理能力!2、在WinCC 里面写一个全局脚本,在每天的00:00:01触发,执行复制Day_Report.xls并以此刻的年月日加载到模板文件名里面,将复制新生产的“Day_Report年月日.xls”存盘到你指定的目录。这样当天的空白日报文件也就有了。全局脚本代码如下:(本人测试通过,仅供参考)#include apdefap.hint gscAction( void )#pragma code (kernel32.dll)/调用动态链接库VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);#pragma code ()#pragma code(Shell32.dll)/调用动态链接库VOID ShellExecuteA(HWND, LPCTSTR , LPCTSTR , LPCTSTR , LPCTSTR , INT);#pragma code()char FileName30 = ; char DateTime30 = ;SYSTEMTIME sysTime;_object* pExcel = NULL; /建立 pExcel 指针 用来对 EXCEL 进行操作HWND handle=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);return 0;3、再写一个全局脚本,整点触发,把你需要记录的变量写到“Day_Report年月日.xls”相应的单元格里面并存盘;这样就完成了报表的数据存储和打印。也就是说,我们可以在电脑里面存放一份报表,并打印一份报表。同样也实现了数据的存储。相关脚本代码如下:(当时是以分钟来做测试的,仅供参考;注意此段代码缺少对其它excel进程的判断,在此脚本执行前,不要有其它excel应用!切记哦!呵呵。)#include apdefap.hint gscAction( void )int i;#pragma code (kernel32.dll)/调用动态链接库VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);#pragma code ()#pragma code(Shell32.dll)/调用动态链接库VOID ShellExecuteA(HWND, LPCTSTR , LPCTSTR , LPCTSTR , LPCTSTR , INT);#pragma code()char FileName30 = ;SYSTEMTIME sysTime;_object* pExcel = NULL; /建立 pExcel 指针 用来对 EXCEL 进行操作HWND handle=NULL;handle=FindWindow(NULL,WinCC-运行系统 - );GetLocalTime(&sysTime);/*SetTagWord(Minute,sysTime.wMinute);i=GetTagWord(Minute)+3;if (i26) GetTagWord(Minute) ;else if (iVisible = 0;/控制生成的excel 文件是否可见,当1 时,生成excel文件时可见.pExcel-Workbooks -Open (FileName);pExcel-Worksheets(sheet1)-Range(X1)-Value=GetTagChar(ServerName);/Return-Type: char*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家庭教育成功案例课件
- 家庭安全应急培训课件
- 家庭使用电安全知识培训课件
- 呼吸道传染病医院感染预防与控制培训考试题(附答案)
- 茶艺师初级模拟试题+答案
- 托幼机构应急防护避险逃生自救的基本方法试题(附答案)
- 2025年7月输血培训试题及答案
- 安全培训的句子课件
- 2025年患者VTE风险评估与护理制度考试试题(附答案)
- 扬尘治理措施方案【范本模板】
- 企业员工反恐知识培训课件
- 室内花卉基础知识培训课件
- 2025年湖北省武汉市中考语文试卷(含解析)
- 保障农民工权益的课件
- 2025年excel基础操作测试题及答案
- 生物质热电联产项目投标书
- 商贸公司备用金管理制度
- spc培训教学课件
- 变电站建设重点与风险控制措施
- 房屋维护管理办法细则
- 2025年中国远洋渔业行业发展运行现状及投资潜力预测报告
评论
0/150
提交评论