×
Siemens Industry Online Support
Siemens AG
文档类型 常问问题 文档编号 26283062, 文档发布日期 2017年6月23日
(21)
评估

在 WinCC (TIA Portal) 和WinCC flexible 中如何通过脚本访问 SQL 数据库?

推荐文档: 西门子工程师推荐本文档!
  • 文档
  • 涉及产品
SQL数据库在过程层和更高层次的企业网络控制层之间的数据是可以进行交换的。本FAQ的解答了如何配置和使用WinCC(TIA Portal)和WinCC flexible Runtime 作为客户端通过脚本与SQL服务器通信 。 WinCC (TIA Portal)/WinCC flexible 一般通过脚本访问 SQL 数据库,除了归档变量和报警信息。为了访问 SQL 数据库,SQL server中必须创建数据库实例。WinCC (TIA Portal)/WinCC flexible PC Runtime 作为 SQL 客户端运行。

WinCC (TIA Portal)/WinCC flexible 一般通过脚本访问 SQL 数据库,除了归档变量和报警信息。为了访问 SQL 数据库,SQL server中必须创建数据库实例。WinCC (TIA Portal)/WinCC flexible PC Runtime 作为 SQL 客户端运行。

警告


注意:

这篇FAQ描述了当使用WinCC (TIA Portal) V13时的过程,该过程与WinCC flexible是相同的,

理论上,基于 Windows CE 的面板不能访问 SQL 数据库。

必要条件:

  • SQL server1
  • Windows 中必须创建 SQL 数据源
  • WinCC (TIA Portal) 或 WinCC flexible Advanced ES
  • WinCC (TIA Portal) 或 WinCC flexible PC Runtime

1 SQL server 必须和操作系统相匹配,同时也必须和 WinCC (TIA Portal)相匹配。

注释:
样例只是一个建议的方法,当然,可能也会有其它更好的解决方案。

更多的相关说明:
在各类书籍文献和互联网上可以找到更多关于 SQL 命令和访问 SQL 数据库的信息。

创建数据源
为了创建一个对 ODBC 数据源的访问,必须首先创建一个数据源。在 Windows 控制面板的“管理工具 > 数据源(ODBC)”中创建数据源。以下的例子中使用的数据源是“Database_1”;连接到 SQL server “WINCCFLEXIBLE”。 

如何创建一个数据源和数据库- 参见条目 ID 24677043.




图. 01

SQL数据库的管理和使用


以下各节说明如何使用SQL数据库,使用VB脚本的摘录。这些脚本也在本条目的项目下载中。

1. 管理
在 SQL 数据库中可以创建一个或多个不同结构的数据表。 

  • 1.1 创建 SQL 数据库:脚本“Create_database”
    为防止脚本中万一发生错误需要使用“On Error Resume Next”指令。这样一旦错误发生,程序会自动跳到错误的下一行执行。

    为了创建到 SQL 数据库的连接需要使用对象“ADODB.Connection”。“ADODB.Recordset”用于创建、编辑或者删除数据库或者表,例如。

    只有知道这个数据源的提供者和名字该数据源才能被打开。到数据源连接的建立需要使用“conn”对象的“Open”方法实现。

    如果连接过程中出现超时,会产生以下错误,输出系统错误,脚本立即停止。

    通过 SQL 命令“CREATE DATABASE”创建并命名一个新的数据库;这些通过“conn”对象的“Execute( SQL Table )”方法实现。

    如果数据库已经存在,则执行相应的创建错误判断程序。“Close”方法用于断开和数据源的连接。



    图. 02


    SQL 语法:
    CREATE DATABASE <数据库名>
     
  • 1.2 删除 SQL 数据库: 脚本"Delete_database"
    理论上,其脚本结构和“Create_database”脚本相同。可以使用 SQL 命令“DROP DATABASE”删除数据库和数据库名称。



    图. 03


    SQL 语法:
    DROP DATABASE <数据库名> 

2. 表
在任何一个 SQL 数据库中都可以创建一个具有单独结构的数据表。表01的数据结构创建如下:
 

表的数据结构
1234
数据类型

SMALLINT

Char(30)SMALLINTSMALLINT
表 01 - 表的数据结构

表的数据结构可以以任何方式组合。附件的样例程序使用的就是上面的数据结构。

  • 2.1 创建表: 脚本"Create_new_table"
    为了打开数据源中的一个数据源以便连接数据库,脚本中需要下面的两个对象:“ADODB.Connection”用于建立连接和“ADODB.Recordset”用于编辑数据源。

    “Open”中的“Initial Catalog”参数用于建立和数据源中特定数据库的连接。“Database_1”,在Windows中创建的数据源,用参数“DSN” 表示。

    使用 SQL 语法“CREATE TABLE”创建 SQL 表,以及表的名称和布局(数据结构)。




    图. 04


    SQL 语法:
    CREATE TABLE <表名称> (列名 类型,...)  

    注意:
    对于“CREATE TABLE”命令还有其它可选的扩展参数。
     
  • 2.2 复制表:脚本 "Copy_table"
    连接访问需要用到对象“ADODB.Connection”和“ADODB.Recordset”。

    使用 SQL 命令“SELECT * INTO”和扩展参数“FROM”,可将特定表中的所有数据复制到一个新表中。语法“SELECT *”和命令“SELECT ALL”意义相同,通过“FROM”命令表示在前一个表中的所有数据。目的表通过“INTO”定义。

    注意:

    SQL 语句“SELECT”可以随意的和其它命令参数组合使用。更多的信息请参考相关文献或者互联网。




    图. 05


    SQL 语法:
    SELECT <表达式> INTO <新表的名称> FROM <已有表的名称>

    注意:

    对于 SQL 命令“SELECT”还有其它的命令可以选择组合使用。
     
  • 2.3 删除表:脚本 "Delete_table"
    为了删除表,用户必须连接相应的数据源。使用命令“DROP TABLE”从数据库中删除表及其名称。




    图. 06


    SQL 语法:
    DROP TABLE <表名称>

    注意:
    删除表时没有确认删除表的提示信息。当表删除后,表中的所有数据也无可挽回的被删除。

3. 数据记录
每个 SQL 表都包含一定数量的数据记录。数据记录的结构取决于数据表的结构。

  • 3.1 读数据记录: 脚本"Read_data_record_from_a_table"
    如上所述,通过两个 ADODB 对象读数据记录。

    最初使用 SQL 语句“SELECT * FROM”和数据表的名称可以查询出数据库中该表的所有数据记录。
     

     Column 1Column 2Column 3
    >>Data 10Data 20Data 31
    >>Data 11Data 21Data 32
    >>Data 12Data 22Data 33
    表 02 - SQL 命令“SELECT * FROM”的执行结果

    使用扩展命令“WHERE”和特定的列/数据记录号,仅选择表中特定的数据记录。
     

     Column 1Column 2Column 3
     Data 10Data 20Data 31
    >>Data 11Data 21Data 32
     Data 12Data 22Data 33
    表 03 - 扩展命令“WHERE Column 1 = 11”的执行结果




    图. 07


    SQL 语法:

    SELECT <表达式> FROM <表名> WHERE <条件>

    注意:

    对于 SQL 命令“SELECT”还有其它可选的命令组合。

    使用“if”语法结构或者“rst.EOF”和“rst.BOF”可以判断数据记录是否存在。如果选择数据记录不存在,使用“rts.MoveFirst”指向第一条数据记录。

    使用下面的语法可以传输列名:

    szColumnName_1 = rst.Fields(1).Name

    使用下面的语法可以用来得到数据记录中特定的数据:

    nDataRecord_2 = rst.Fields(2).Value




    图. 08

     
  • 3.2 写数据记录: 脚本"Write_data_record_into_a_table"
    访问中使用到的对象和从 SQL 表中读数据记录使用的对象相同。
    在数据源提供者已经存在的情况下,通过 SQL 命令“SELECT * FROM”"联合表名和扩展项“WHERE”选择适当的数据记录。




    图 09


    SQL 语法:
    SELECT <表达式> FROM <表名> WHERE <条件>

    注意:
    对于 SQL 命令“SELECT”还有其它可选的扩展参数。

    如果数据记录不存在,指针将复位到表的第一行。如在3.1中查询“EOF = End of File”和“BOF = Begin of File”用于检测数据记录是否存在。
    为了添加数据记录需要使用 SQL 命令“INSERT INTO”和SQL表名。另外,输入表中的所有参数通过“VALUES”指定,使用逗号作为分隔符。
    通过“conn”对象的“Execute”方法执行 SQL 语句。




    图. 10


    SQL 语法:
    INSERT INTO <表名> VALUES <值, ...>
     
  • 3.3 编辑数据记录:脚本 "Edit_data_record"
    访问数据源需要两个 ADODB 对象。一旦使用“Open”方法打开数据库,如果数据存在则选择特定的数据记录。



    图. 11


    SQL 语法:
    SELECT <表达式> FROM <表名> WHERE <条件>

    注意:
    对于 SQL 命令“SELECT”还有其它可选的扩展参数。

    使用查询“EOF”和“BOF”如果数据记录存在,脚本首先赋值给表中指定的列。
    使用 SQL 语句“UPDATE”结合扩展命令“Set”和 SQL 表名可以实现对数据记录元素的赋值,该 SQL 语句通过“conn.Execute(SQL_表)”执行。




    表. 12


    SQL 语法:
    UPDATE <表名> SET <列名 = 新值, ...>

    注意:

    该 SQL 命令也可能使用扩展的“WHERE < >”表达式。
     
  • 3.4 删除数据记录: 脚本"Delete_data_record"
    为了连接 SQL 数据库需要两个 ADODB 对象。
    为了从一个数据库中删除数据记录,该 SQL 数据库必须被打开。通过比较记录数和相应的列,使用“DELETE FROM”结合 SQL 表的详细内容以及“WHERE”扩展参数来删除特定的数据记录。使用连接中的语句“conn.Execute(SQL 表)”执行删除特定数据记录的操作。




    图. 13


    SQL 语法:
    DELETE FROM <表名> WHERE <条件>

    注意:

    选择的数据记录在删除时没有确认信息。

4. 数据记录表
SQL 也可以用于显示一个 SQL 表中全部或多个数据记录的内容。为了连接数据库需要使用到“ADODB.Connection”和“ADODB.Recordset”两个对象。

  • 4.1 从表中读取所有数据:脚本 "Show_all_entries_of_a_table"
    SQL 数据库中的数据记录并不一定是按照顺序存储的。因此,为了按照顺序显示必须对数据进行排序。如果希望按照列来排序,那么必须知道列名。由于本样例中列名作为变量,所以列名也必须明确的读出来。

    为了完整的读出 SQL 表,当“Execute”方法执行“SELECT * FROM”加 SQL 表名语句时就会返回整个表的内容。

    表的内容被分配到对象“rst”。可以通过该对象指定被排序后表的列名。使用带有“ORDER BY”加列名的 SQL 命令可以实现将表按照列升序排列。




    图. 14


    SQL 语法:
    SELECT <表达式> FROM <表名> ORDER BY <列名> ASC

    注意:
    指令“ASC”指按照升序分类,指令“DESC”指按照降序分类。除非另有说明默认按照升序分类。SQL 指令“SELECT”可与其它语法结合使用。

    表中的记录是使用“Do...Loop Until”循环和“MoveNext”指令输入的。指令“rst.MoveFirst”将指针指向到表的第一个条目。

    在本例中的表最多可以同时输出6条记录,在 WinCC flexible 中可以使用箭头按钮实现对表的选取。变量"Tab"的值会在零和条目数减去显示的数据记录数量之间变化。当选择的表发生变化,SQL 表的指针也发生移动。这是通过指令“MoveNext”来实现的。




    图. 15


    下面的语法用于访问数据记录中的单个数据:

    Value_1_0 = rst.Fields(0).Value
    Value_1_1 = rst.Fields(1).Value
    Value_1_2 = rst.Fields(2).Value



    图. 16

    4.2 将所有数据写入表:脚本 "Write_all_entries_in_a_table"
    一旦数据源被打开,可以使用 SQL 命令“SELECT * FROM”加表名并结合参数“WHERE”实现对特定数据的读取,通过特定列的内容和数据记录的详细信息相比较来选择数据。




    图. 17


    SQL 语法:
    SELECT <表达式> FROM <表名> WHERE <条件>

    注意:
    SQL 命令“SELECT”可以和其它指令一起使用。

    如果数据记录包含在表中,SQL 命令“UPDATE”用于使用新的参数覆盖数据记录。如果数据记录不包含在表中,使用 SQL 命令“INSERT INTO”添加。



    图. 18

           如在3.1中查询“EOF = End of File”和“BOF = Begin of File”用于检测数据记录是否存在。


下载
下面的下载中包含WinCC (TIA Portal) V14 和 WinCC flexible 2008 的样例,包含以上所有示例及相关的脚本。

 Registrierung notwendig  Project WinCC (TIA Portal) V14 (589,0 KB) 

 Registrierung notwendig  Project WinCC flexible 2008 (2,6 MB)


安全注意事项
西门子对工厂的安全操作,解决方案,机器,设备和/或网络功能提供产品和工业安全解决方案。它们在一个全面的工业安全理念中是重要的组成部分。西门子的产品和解决方案在这方面会持续发展。西门子建议保持定期了解产品更新。

对于西门子产品和解决方案的安全运行,有必要采取适当的安全措施(例如单元保护的概念,)和每个组件集成在整个工业安全概念,是最先进的。这个也应该包括所使用的第三方产品。关于工业安全可用的更多信息:

https://www.siemens.en/industrialsecurity.

为了持续了解产品更新,可以安排在西门子工业在线支持接收关于所用产品的相关信息。更多信息可供使用:

Product Support > Save Filter Settings.


更多关键字
数据库、数据库访问、结构化查询语言


评估文档
无评估
请求和反馈
您想要做什么?
注意:反馈总是与当前的条目/产品相关。您的消息将被转发给我们在线支持团队的技术编辑们。如果我们需要就您的反馈提供答复,您将在几天内收到答复。如果没有其它问题,您将不会收到答复。