WinCC与Mysql原来可以这样玩

该博客介绍了如何在WinCC 7.5中使用VBS脚本集成Excel对象,实现与MySQL数据库的连接,读取和插入实时数据。通过ADODB连接数据库,创建和调用函数完成数据插入操作,并展示了如何从数据库取出数据填充到Excel表格,最终保存和展示数据。整个过程详细说明了VBS脚本在SCADA系统中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 环境

1 软件&环境需求

  • win10 OS
    
  • mysql 5.6~5.7
    
  • mysql ODBC connector
    
  • navicate
    
  • wincc 7.5 集成VBS
    

2 VBS脚本

2.1 wincc中集成Excel对象

Excel 对象的根对象是 Excel.application
excel.application->workbook->sheet->cell

' 在Wincc的起始画面的打开画面事件中写入下面脚本
' 创建 Excel Application并加入DataSet,以便在不同画面或画面窗口中访问。
Sub OnOpen() 

Dim xlApp
Dim DSExist
Dim i

On Error Resume Next '出现错误继续执行
'检查 Excel 是否已运行,若无则新建应用,以防止重复运行 Exce
Set xlApp = GetObject("Excel Application")
If Typename(xlApp) <> "Application" Then
	Set xlApp = CreateObject("Excel.Application")
End If

'检查 DataSet 中是否已有 xlApp,若无则添加
With HMIRuntime.DataSet
	For i = 1 To .Count
		If StrComp(.item(i).Name,"xlApp",1) = 0 Then
			DSExist = 1
			i = .Count
		End If
	Next
	If DSExist = 0 Then .Add "xlApp",xlApp
End With
 	
End Sub

2.2 链接数据库,并插入实时数据(ADODB)

2.2.1 测试代码
Option Explicit
Function action
On Error Resume Next
Dim conn, rs, com, sql
Dim water, power, medicine
Dim a
Dim b
a = Now
b = CStr(a)


water = HMIRuntime.Tags("report1.water").Read
power = HMIRuntime.Tags("report1.power").Read
medicine = HMIRuntime.Tags("report1.medicine").Read


Set conn = CreateObject("ADODB.Connection")
	conn.ConnectionString = "Driver={MySQL ODBC 8.0 Unicode Driver};server=localhost;database=test;uid=root;pwd=root;option=3"
	conn.CursorLocation = 3
	conn.Open
	'Msgbox conn.state


Set rs = CreateObject("ADODB.RecordSet")
	'sql = "select * from report"
	sql = "insert into report (addr, time, power, water, medicine) values(1,"&"'"& b & "'"& "," & power & "," & water & "," & medicine & ")"
	'sql = "insert into report (addr, time, power, water, medicine) values(1,2,3,4,5)"
	'Msgbox sql
	'Msgbox sql
	conn.Execute sql	
	'rs.Open sql,conn,1,3
	'Msgbox (rs.state)

Set conn = Nothing
Set rs = Nothing

End Function
2.2.2 封装成函数
Sub insert(sql)
Dim conn
On Error Resume Next
Set conn = CreateObject("ADODB.connection")
With conn
	.ConnectionString = "Driver={MySQL ODBC 8.0 Unicode Driver};server=localhost;database=test;uid=root;pwd=root;option=3"
	.CursorLocation = 3
	.Open
	.Execute sql 	
End With
Set conn = Nothing
End Sub
2.2.3 动作中调用函数进行插入
Option Explicit
Function action
On Error Resume Next
Dim addr : addr = "PAC加药间I"
Dim medicine_A : medicineA = HMIRuntime.tags("FT0404_F.3_Feedback").Read/3600
Dim medicine_B : medicineA = HMIRuntime.tags("FT0405_F.3_Feedback").Read/3600
Dim medicine_total : medicine_total = medicine_A + medicine_B

Dim sql
sql = "insert into report (addr, time, power, water, medicine) " &_
	   "values(" &"'"& addr &"'" &","&"'"& CStr(Now) & "'"& "," & "Null" & "," & "Null" & "," & 1 & ")" &"," &_
	   "("&"'"&addr&"'"&","&"'"& CStr(Now) & "'"& "," & "Null" & "," & "Null" & "," & 1 & ")"
'Msgbox sql
insert(sql)


End Function

3 取出数据,填充excel,存储并展示

Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)                                 
On Error Resume Next
Dim conn,rs,sql
Dim excel

Set conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.RecordSet")
	conn.ConnectionString = "Driver={MySQL ODBC 8.0 Unicode Driver};server=localhost;database=test;uid=root;pwd=root;option=3"
	conn.CursorLocation = 3
	conn.Open
	'Msgbox (conn.State)
	sql =   "select addr, concat(Year(Time),'-',Month(Time),'-',Day(Time),' ',Hour(Time), ':00', ':00') As Time ,avg(power), avg(water), avg(medicine)" &_
			"from report group by Year(Time), Month(Time), Day(Time), Hour(Time);"
	'Msgbox sql
	rs.Open sql,conn,1,3
	'Msgbox(rs.State)
	Dim m 
	m = rs.RecordCount
	'Msgbox(m)




Dim xlApp, xlPath, xlFile, xlBook, xlSheet
Dim i,t
Dim objFSO, objFlexGrid, objProcessBar

Set objFSO = CreateObject("Scripting.FileSystemObject")

xlPath = HMIRuntime.ActiveProject.Path & "\Excel"

If Not objFSO.FolderExists(xlPath) Then
	objFSO.CreateFolder(xlPath)
End If

Set objFSO = Nothing


Set xlApp = HMIRuntime.DataSet("xlApp").Value
Set xlBook = xlApp.Workbooks.Add
xlApp.Visible = False
Set xlSheet = xlBook.WorkSheets(1)


With xlSheet
	.Activate
	.Columns(1).ColumnWidth = 15
	.Columns(2).ColumnWidth = 30
	.Columns(3).ColumnWidth = 10
	.Columns(4).ColumnWidth = 10
	.Columns(5).ColumnWidth = 10
	.Range("A:E").HorizontalAlignment = 3
	.Range("A:E").Borders.LineStyle = 1
	.Range("A1:E1").Interior.ColorIndex = 37
	
	.Cells(1,1) = "工艺段"
	.Cells(1,2) = "时间"
	.Cells(1,3) = "电能消耗"
	.Cells(1,4) = "水源消耗"
	.Cells(1,5) = "药品消耗"
	rs.MoveFirst
	For i = 1 To m
		.Cells(i+1, 1) = rs.Fields(0).Value
		.Cells(i+1, 2) = rs.Fields(1).Value
		.Cells(i+1, 3) = Round(rs.Fields(2).Value,1)
		.Cells(i+1, 4) = Round(rs.Fields(3).Value,1)
		.Cells(i+1, 5) = Round(rs.Fields(4).Value,1)
		rs.MoveNext
	Next
	.Cells(m+2, 1) = "合计"
	.Cells(m+2, 3) = "=SUM(C2:C"&m&")"
	.Cells(m+2, 4) = "=SUM(D2:D"&m&")"
	.Cells(m+2, 5) = "=SUM(E2:E"&m&")"
	

End With
	
t = Now
xlFile = Right("20"&Year(t),4)&"."&Right("0"&Month(t),2)&"."&Right("0"&Day(t),2)&"."&Right("0" & Hour(t),2)&"."&Right("0"&Minute(t),2)&"."&Right("0"&Second(t),2)&"."&"htm"
Msgbox(xlPath & xlFile)
xlBook.SaveAs xlPath&"\"&xlFile,44
xlApp.WorkBooks.Close
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

Dim wbCtrl

Set wbCtrl = ScreenItems("控件1")

wbCtrl.MyPage = xlPath&"\"&xlFile


End Sub
### 配置 MySQL Workbench WinCC 连接 为了实现 MySQL Workbench 和 Siemens WinCC连接,通常需要完成以下几个方面的设置: #### 1. **安装必要的驱动程序** WinCC 支持通过 ODBC 接口访问外部数据库。因此,在配置之前,需确保已安装适用于 MySQL 数据库的 ODBC 驱动程序[^2]。可以通过下载并安装 `MySQL Connector/ODBC` 来满足此需求。 #### 2. **配置 ODBC 数据源** 在 Windows 系统中,打开“ODBC 数据源管理器”,进入“系统 DSN”选项卡,并按照以下步骤操作: - 单击“添加”按钮。 - 在弹出窗口中选择 `MySQL ODBC Driver` 并单击“完成”。 - 输入数据源名称 (DSN),例如 `WinCC_MySQL_DSN`。 - 设置主机名/IP 地址、端口号(默认为 3306)、用户名和密码。 - 测试连接以验证配置是否成功[^3]。 #### 3. **配置 WinCC 中的数据连接** 在 WinCC 软件中,执行如下操作来建立 MySQL 数据库的链接: - 启动 WinCC 工程编辑器。 - 创建一个新的项目或者加载现有项目。 - 在左侧导航栏找到“变量记录”部分下的“过程归档”功能模块。 - 右键点击空白区域,选择“新建 -> 归档目标”。 - 在弹出对话框中指定使用的存档类型为“关系型数据库”。 - 下一步会提示输入 ODBC 数据源名称;这里应填写前面定义好的 DSN (`WinCC_MySQL_DNS`)。 - 完成向导后保存更改[^4]。 #### 4. **测试连接** 最后一步是确认整个流程工作正常。可以在 WinCC 组态界面下运行模拟环境,观察是否有错误消息显示以及能否正确读取写入到关联表内的数值变化情况。 ```sql -- 示例 SQL 查询用于验证连接状态 SELECT NOW() AS ConnectionTest; ``` 以上即完成了从基础准备至实际应用层面关于如何将 MySQL Workbench 结合进 Siemens WinCC 自动化系统的全过程描述。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kobe_OKOK_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值