西门子Wincc高级应用:积累丰富的报表模版,含视频教程,实现SQL数据库高效管理
西门子Wincc积攒多种报表模版,带视频讲解,使用SQL数据库
最近在车间折腾WinCC报表的时候发现个挺有意思的事儿——这玩意儿配合SQL数据库能玩出不少花样。今天咱们就捞点干货,手把手整几个实用的报表模板。先来个最基础的日报表模板热热身。

先看数据库连接这块,WinCC的VBS脚本直接怼SQL是真的方便。比如在全局脚本里扔个连接函数:
Function ConnectDB()
Set conn = CreateObject("ADODB.Connection")
connStr = "Provider=SQLOLEDB;Data Source=车间服务器;Initial Catalog=ProductionData;User ID=sa;Password=123456;"
conn.Open connStr
Set ConnectDB = conn
End Function
这段代码里的坑主要在连接字符串格式,特别是SQL身份验证和Windows验证的切换(用Integrated Security=SSPI替代账号密码)。实际项目中建议搞个配置文件存数据库参数,别像这样硬编码密码。
数据查询这块,用存储过程比直接写SQL语句靠谱。比如获取当日生产数据的存储过程:
CREATE PROCEDURE GetDailyReport
@Date DATE
AS
BEGIN
SELECT MachineID, OutputQty, DefectRate
FROM ProductionLogs
WHERE CONVERT(DATE, LogTime) = @Date
ORDER BY MachineID
END
在WinCC里调用的时候记得用参数化查询,防止SQL注入。用VBS调用的姿势大概是这样的:
Set cmd = CreateObject("ADODB.Command")
cmd.ActiveConnection = ConnectDB()
cmd.CommandType = 4 '存储过程
cmd.CommandText = "GetDailyReport"
cmd.Parameters.Append cmd.CreateParameter("@Date", 135, 1, , Date) '135对应日期类型
Set rs = cmd.Execute
这里有个骚操作是用135这个参数类型代码直接对应SQL的date类型,比用字符串转换省事得多。

西门子Wincc积攒多种报表模版,带视频讲解,使用SQL数据库
报表展示方面,WinCC的在线表格控件配上C脚本更带劲。比如在控件的"更新时"事件里塞点动态加载数据的代码:
#include "apdefap.h"
void OnUpdate(char* lpszPictureName, char* lpszObjectName)
{
SQLRETURN rc;
HSQL hstmt;
char query[200];
sprintf(query, "EXEC GetShiftReport @Shift='%s'", GetTagChar("CurrentShift"));
rc = SQLExecDirect(hstmt, (SQLCHAR*)query, SQL_NTS);
while(SQLFetch(hstmt) == SQL_SUCCESS) {
// 填充表格行的代码
}
}
这种动态报表要注意内存泄漏问题,每次查询完必须记得SQLFreeHandle。有次现场项目就因为这个没处理,运行一周把工控机内存吃光了...

模板复用才是精髓。通过给报表控件绑定不同的XML模板文件,配合文件列表选择器控件,能实现报表样式的热切换。文件读取用WinCC自带的FileSystemObject:
Sub LoadTemplate(templateName)
Set fso = CreateObject("Scripting.FileSystemObject")
templatePath = "\\tsclient\C\ReportTemplates\" & templateName & ".xml"
If fso.FileExists(templatePath) Then
ReportControl.Object.Data = fso.OpenTextFile(templatePath).ReadAll
Else
MsgBox "模板文件丢失,请联系维护人员"
End If
End Sub
这里用了终端服务的客户端路径映射,现场部署时要注意网络权限设置。更稳妥的做法是把模板文件放在WinCC项目目录里,通过相对路径访问。
最后说个骚操作:用SQL的FOR XML PATH直接把数据拼成HTML表格,在WinCC的WebBrowser控件里直接渲染。这种方案对复杂排版特别友好,维护起来也比传统控件省事。不过要当心SQL版本差异,不同版本的XML生成语法会有微小差别。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)