乐趣区

WinCC中访问SQL SERVER数据库

有两种身份验证方式可以连接到 SQL Server 数据库,它们是 Windows 身份验证和 SQL 身份验证。在本文中,WinCC 将使用 Windows 身份验证进行连接,但我展示了使用 SQL 身份验证连接到 SQL Server 的连接字符串。注意:在本文中,我假设您已经安装了 SQL Server。我使用过 SQL Server 2008,但这里完成的所有步骤对 SQL Server 2005 都有效。在本文中,我创建了一个数据库,因此我们可以进行读取和插入。对于许多实际情况,工厂或系统已经有一个数据库。因此,唯一需要的就是在 WinCC 中操作。
创建 SQL Server 数据库
在“Database”上单击鼠标右键,然后单击“New Database…”(新建数据库)

在“Database name:”上键入“SQL_WINCC”(或您想要的任何名称)

在“Database> SQL_WINCC”下,右键单击“New Table …”(新表),然后创建这些列,如下图所示。

最后将其命名为“Table_1”。

SQL_WINCC 会是这样 …

注意:我没有在“Table_1”中创建索引或主键,因为 SQL Server 配置不是本文的重点!但在实际系统中,强烈建议创建它们。
创建 WinCC 应用程序
打开 WinCC 项目管理器,然后单击“New”(新建)

选择“Single-User Project”,然后选择“OK”(确定)。

将其命名为“WinccSql”,然后“Create”(创建)。

WinCC Explorer 看起来会是这样

创建内部标签
在“WinccSql”下的 WinCC 项目管理器中,双击“Tag Management”(变量管理)
单击“Tag Management > Internal Tags”(标记管理 > 内部标记)并创建这 12 个标记。

这些标签将在主屏幕中使用。其中一些保存来自 SQL Server 的数据,而其他的保存插入到 SQL Server 的数据。
配置屏幕
在“WinccSql”下的 WinCC 项目管理器中,双击“Graphics Designer”(图形编辑器)。将打开一个名为“NewPdl_1”的空白页面,就像这样。

使用“矩形”,“静态文本”和“I / O 域”对象可以像这样放置它们。

在“属性 > I / O 域 > 输出 / 输入 > 输出值”中,必须将它们附加到标签,如下所示:

附加到变量“TAG_STRING_INSERT”,“TAG_STRING_11”和“TAG_STRING_21”的对象将“属性 > I / O 域 > 输出 / 输入 > 数据格式”更改为 STRING。
创建 VB 脚本
介绍
与数据库通信的最简单方法是使用 VB-Script,它基本上需要 4 个步骤。

连接配置
命令配置
记录集配置
管理从数据库返回的数据

连接配置基本上具有以下参数:

数据提供商 Provider
数据服务器(服务器名称)
初始目录(要连接的数据库)
认证

在本文中,我使用此连接字符串:
Provider=SQLOLEDB;Data Source=MAWINWINCC;InitialCatalog=SQL_WINCC;Trusted_connection=yes;
“Trusted_connection”表示连接将通过 Windows 身份验证完成。对于 SQL 身份验证,连接字符串将如下所示:
Provider=SQLOLEDB;Password=1234567890;Persist Security Info=True;User ID=sql_user;Initial Catalog=SQL_WINCC;Data Source=MAWIN\WINCC
“Insert”按钮的 VB 脚本
单击“插入”按钮并浏览到“事件 > 静态文本 > 鼠标 > 鼠标单击 > VBS 操作”。现在在那里复制这个脚本。
‘connection 对象
Dim cn
‘recordset 记录集对象
Dim rs
‘command 命令对象
Dim mc
Dim sql
Dim column1
Dim column2
Dim column3
Dim column4

Set cn = CreateObject(“ADODB.Connection”)
Set rs = CreateObject(“ADODB.Recordset”)
Set mc = CreateObject(“ADODB.Command”)

‘ 相当于是 adUseClient 枚举值,表示用在客户端中
cn.CursorLocation = 3

‘ 连接字符串
cn.ConnectionString = “Provider=SQLOLEDB;Data Source=MA1815\WINCC;Initial Catalog=SQL_WINCC;Trusted_connection=yes;”

‘ 打开连接
cn.Open

‘Read the tags that will be inserted into database
column1 = HMIRuntime.Tags.Item(“TAG_STRING_INSERT”).Read
column2 = HMIRuntime.Tags.Item(“TAG_INT_1_INSERT”).Read
column3 = HMIRuntime.Tags.Item(“TAG_INT_2_INSERT”).Read
column4 = HMIRuntime.Tags.Item(“TAG_INT_3_INSERT”).Read

‘SQL 语句
sql = “INSERT INTO TABLE_1 (COLUMN_1, COLUMN_2, COLUMN_3, COLUMN_4) VALUES (‘” & column1 & “‘, ” & column2 &”, ” & column3 & “, ” & column4 & “)”

‘ 配置命令对象
Set mc.ActiveConnection = cn

‘ 表示命令中的文字是一个 SQL 语句
mc.CommandType = 1

mc.CommandText = sql

‘ 执行命令
rs.Open mc, , 2, 1

‘ 关闭连接
cn.Close
点击 OK 按钮
Select 按钮的脚本
单击“选择”按钮并浏览到“事件 > 静态文本 > 鼠标 > 鼠标单击 > VBS 操作”。现在在那里复制这个脚本
Dim cn ‘connection 连接对象
Dim rs ‘record set 记录集对象
Dim mc ‘command 命令对象
Dim i

Dim sql
Dim column1
Dim column2
Dim column3
Dim column4

Set cn = CreateObject(“ADODB.Connection”)
Set rs = CreateObject(“ADODB.Recordset”)
Set mc = CreateObject(“ADODB.Command”)

‘ 相当于是 adUseClient 枚举值,表示用在客户端中
cn.CursorLocation = 3

‘ 连接字符串
cn.ConnectionString = “Provider=SQLOLEDB;Data Source=MA1815\WINCC;Initial Catalog=SQL_WINCC;Trusted_connection=yes;”

‘ 打开连接
cn.Open

‘ 在本文中,我为了方便起见,限制在 2 个寄存器内,但您可以从 SQL 中读取一些数据,然后将它们写入网格中,比如
sql = “SELECT TOP 2 COLUMN_1, COLUMN_2, COLUMN_3, COLUMN_4 FROM TABLE_1”

‘ 配置 Command 对象
Set mc.ActiveConnection = cn

‘ 表示 CommandText 中的是一个 SQL 语句
mc.CommandType = 1

mc.CommandText = sql

‘ 执行 SQL 命令
rs.Open mc, , 2, 1

‘ 假如找到了至少一条记录
If rs.RecordCount > 0 Then

rs.MoveFirst

‘ 循环以获取从数据库读取的所有数据
For i = 1 To rs.RecordCount

‘ 从数据库中读取数据
column1 = rs(0)
column2 = rs(1)
column3 = rs(2)
column4 = rs(3)

‘TAG_STRING_11 或 TAG_STRING_21 或 … TAG_STRING_n1
HMIRuntime.Tags.Item(“TAG_STRING_” & i & “1”).Write column1

‘TAG_INT_12 或 TAG_INT_22 或 … TAG_INT_n2
HMIRuntime.Tags.Item(“TAG_INT_” & i & “2”).Write column2

‘TAG_INT_13 或 TAG_INT_23 或 … TAG_INT_n3
HMIRuntime.Tags.Item(“TAG_INT_” & i & “3”).Write column3

‘TAG_INT_14 或 TAG_INT_24 或 … TAG_INT_n4
HMIRuntime.Tags.Item(“TAG_INT_” & i & “4”).Write column4

‘ 继续下一条
rs.MoveNext
Next

End If

‘ 关闭记录集
rs.Close

‘ 关闭连接
cn.Close
现在,单击“OK”。完成了!
现在运行 WinCC!:)

退出移动版