组态王(KingView)作为国内广泛应用的工业监控组态软件,其强大的数据存储与查询功能离不开与数据库的集成,将组态王连接到数据库(如 SQL Server, MySQL, Oracle, Access 等)可以实现历史数据的长期存储、复杂查询、报表生成以及与上层管理系统(如MES, ERP)的数据交互,本文将详细讲解在组态王中设置数据库连接的完整流程和关键注意事项。
核心目标: 配置组态王工程,使其能够将实时数据、报警信息、操作记录等写入指定的数据库表中,并能从数据库中查询所需数据用于画面显示、报表或脚本逻辑。
设置流程详解:
第一步:前期准备工作 (关键!)
- 数据库环境就绪:
- 在目标服务器或本机上安装并运行你计划使用的数据库管理系统(如 Microsoft SQL Server, MySQL Server, Oracle Database Server 等),对于轻量级应用,Microsoft Access 文件也可用。
- 创建目标数据库: 在数据库管理系统中创建一个新的、专门用于存储组态王数据的数据库(例如命名为
KingView_Data
)。 - 设计数据表结构:
- 根据你需要存储的数据类型(实时值、报警记录、操作日志等),在目标数据库中创建相应的数据表。
- 定义表字段: 为每个表定义清晰的字段(列),包括字段名、数据类型(如
int
,float
,varchar
,datetime
等)、长度、是否允许为空、主键等。RealTimeData
表可能包含:TagName
(字符串),Value
(浮点数),TimeStamp
(日期时间),Quality
(整数)。AlarmLog
表可能包含:AlarmID
(整数),TagName
(字符串),AlarmType
(字符串),AlarmValue
(浮点数),AlarmTime
(日期时间),AckTime
(日期时间),Operator
(字符串)。
- 创建数据库用户并授权:
- 为组态王访问数据库创建一个专用的数据库用户账号(
kv_user
),避免使用高权限的sa
或root
账号。 - 授予该用户必要的权限: 至少需要
SELECT
(查询),INSERT
(插入数据),UPDATE
(更新数据,如果需要修改记录),DELETE
(删除数据,如果需要) 权限,并且权限作用范围应限定在组态王使用的数据库(KingView_Data
)和相关的表上,确保该用户具有连接数据库服务器的权限。
- 为组态王访问数据库创建一个专用的数据库用户账号(
- 确认 ODBC 驱动 (重要):
- 组态王主要通过 ODBC (Open Database Connectivity) 标准接口连接数据库,这意味着:
- 运行组态王开发环境(工程浏览器)和运行系统(View)的计算机上,必须安装与目标数据库类型匹配的 ODBC 驱动程序。
- 对于 SQL Server,通常使用
SQL Server Native Client
或ODBC Driver for SQL Server
。 - 对于 MySQL,需要安装
MySQL ODBC Driver
(如 MySQL Connector/ODBC)。 - 对于 Oracle,需要安装
Oracle ODBC Driver
。 - Access 通常自带驱动 (
Microsoft Access Driver (*.mdb, *.accdb)
)。
- 在 Windows 操作系统的 “ODBC 数据源管理器” (
odbcad32.exe
) 中,可以查看和管理已安装的驱动。
- 组态王主要通过 ODBC (Open Database Connectivity) 标准接口连接数据库,这意味着:
第二步:在组态王中配置数据库连接 (核心步骤)
- 打开 SQL 访问管理器:
- 在组态王工程浏览器中,找到并展开 “工具” 菜单。
- 选择 “SQL 访问管理器”,这是组态王配置数据库连接的核心工具。
- 创建 ODBC 数据源:
- 在 SQL 访问管理器中,首先需要定义一个指向你准备好的数据库的 ODBC 数据源。
- 点击 “数据库” 选项卡(或在类似命名的区域)。
- 点击 “新建” 按钮。
- 在弹出的对话框中:
- 数据源名称: 输入一个有意义的名称(
MyPlant_DB
),这个名称将在组态王内部使用。 - 数据源描述: (可选)输入描述信息。
- 数据库类型: 选择你使用的数据库类型(如
SQL Server
,MySQL
,Oracle
,Access
等)。
- 数据源名称: 输入一个有意义的名称(
- 点击 “创建数据源” 或 “连接” 按钮(具体按钮文字可能因版本略有不同)。
- 这时会弹出标准的 Windows ODBC 数据源配置向导 或特定驱动的连接配置窗口。
- 配置 ODBC 连接参数:
- 在 ODBC 配置窗口中,根据数据库类型和驱动要求,填写必要的连接信息:
- SQL Server / Oracle / MySQL:
- 服务器/主机名: 数据库服务器的 IP 地址或主机名。
- 身份验证方式: 选择 “使用 SQL Server 身份验证” 或 “使用用户名和密码”(对于 MySQL/Oracle),输入在第一步创建的专用用户名 (
kv_user
) 和密码。 - 数据库名称: 选择或输入第一步创建的目标数据库名称 (
KingView_Data
)。 - 其他选项(如端口号 – MySQL 默认 3306, SQL Server 默认 1433;连接超时等)根据需要配置,通常默认即可。
- Access:
- 浏览并选择你的
.mdb
或.accdb
文件路径。
- 浏览并选择你的
- SQL Server / Oracle / MySQL:
- 强烈建议点击 “测试连接” 按钮,如果显示 “测试连接成功”,说明 ODBC 配置正确,如果失败,根据错误信息检查服务器地址、端口、防火墙设置、用户名密码、数据库名、驱动是否正确安装。
- 测试成功后,点击 “确定” 保存 ODBC 数据源配置,你定义的
MyPlant_DB
数据源会出现在 SQL 访问管理器的数据库列表中。
- 在 ODBC 配置窗口中,根据数据库类型和驱动要求,填写必要的连接信息:
- 绑定数据表与组态王变量 (数据词典):
- 在 SQL 访问管理器中,切换到 “表格” 或 “绑定表” 选项卡。
- 点击 “创建” 或 “绑定” 按钮。
- 在弹出的对话框中:
- 表名: 从下拉列表中选择你在第一步创建的目标数据库中的具体数据表(如
RealTimeData
),下拉列表的内容来源于你之前配置的 ODBC 数据源 (MyPlant_DB
)。 - 组态王表格名: 输入一个在组态王内部使用的名称(
Bind_RealTime
),代表这个绑定关系。
- 表名: 从下拉列表中选择你在第一步创建的目标数据库中的具体数据表(如
- 点击 “确定” 或 “下一步”。
- 映射表字段与组态王变量:
- 上一步完成后,会进入字段映射界面,这里列出了你选择的数据库表 (
RealTimeData
) 的所有字段 (TagName
,Value
,TimeStamp
,Quality
…)。 - 你需要为每个你希望在组态王和数据库之间交换数据的字段建立映射:
- 在 “组态王变量” 列,点击单元格旁边的 按钮。
- 在弹出的 “选择变量名” 对话框中:
- 可以选择已有的数据词典变量(内存实型、内存整型、内存字符串、I/O 实型等)。
- 也可以点击 “新建” 按钮,即时创建一个新的内存变量(推荐类型:内存实型对应浮点值,内存字符串对应文本,内存离散对应布尔值/状态,内存整数对应整数值或状态码),给新变量一个清晰的名称(如
DB_TagName
,DB_Value
,DB_TimeStamp
)。
- 选择或新建好变量后,点击 “确定”。
- 关键点:
- 数据类型匹配: 确保组态王变量的数据类型与数据库字段的数据类型兼容(浮点变量映射到
float
字段,字符串变量映射到varchar
字段,离散/整数变量映射到int
或bit
字段)。 - 时间戳处理:
TimeStamp
字段通常映射到一个内存字符串变量,组态王提供$Date
(年月日) 和$Time
(时分秒) 系统变量,或者StrFromReal()
等函数,可以在命令语言中组合成符合数据库要求的格式(如'2025-10-27 14:30:00'
)再赋值给这个字符串变量,有些数据库驱动也支持直接映射到组态王的日期时间变量(如果支持)。 - 主键/自增字段: 如果表有自增主键(如
ID
),通常不需要在组态王中映射和赋值,数据库会自动生成。
- 数据类型匹配: 确保组态王变量的数据类型与数据库字段的数据类型兼容(浮点变量映射到
- 重复以上步骤,为需要操作的每个字段建立映射。
- 映射完成后,点击 “确认” 或 “完成” 保存这个绑定表的配置,你定义的
Bind_RealTime
会出现在表格列表中。
- 上一步完成后,会进入字段映射界面,这里列出了你选择的数据库表 (
- (可选)配置数据库查询:
- 在 SQL 访问管理器中,切换到 “记录体” 选项卡。
- 记录体用于定义查询操作返回的结果集结构。
- 点击 “创建”。
- 输入记录体名称(如
QueryResult
)。 - 点击 “添加字段”。
- 输入字段名称(这个名称是组态王内部使用的,不必与数据库字段名相同,但建议相关)和选择对应的组态王变量类型(如字符串、实数、整数)。
- 添加所有你期望查询返回的字段对应的变量定义。
- 点击 “确认” 保存记录体。
第三步:在组态王工程中使用数据库连接
配置好 SQL 访问管理器后,需要在工程中实际执行数据库操作(插入、查询等),这主要通过 “命令语言” 实现:
-
写入数据 (INSERT):
- 在需要触发数据存储的地方(按钮按下命令、数据改变命令、应用程序命令 – 周期性执行或特定条件满足时),编写命令语言。
- 使用
SQLInsert()
函数:SQLInsert(绑定表格名, "设备名"); // SQLInsert("Bind_RealTime", "Device1");
- 原理:
- 在执行
SQLInsert
之前,你需要将最新的数据值、时间戳等信息,赋值给在第二步第5步中映射好的那些组态王内存变量(如DB_TagName
,DB_Value
,DB_TimeStamp
)。 - 当
SQLInsert
执行时,组态王会自动将这些内存变量的当前值,按照第二步建立的映射关系,插入到数据库对应的表和字段中。 "设备名"
参数在较新版本中通常已弃用或固定为"Local"
或留空 ,请参考具体版本手册。
- 在执行
-
查询数据 (SELECT):
-
在需要从数据库获取数据的地方(画面显示历史值、报表生成前、下拉框填充前),编写命令语言。
-
使用
SQLSelect()
或SQLSelectEx()
函数:// 使用 SQLSelect (通常配合记录体) long nCount; nCount = SQLSelect(记录体名, 绑定表格名, "设备名", "SQL WHERE 条件"); // nCount = SQLSelect("QueryResult", "Bind_RealTime", "", "TagName='Temperature' AND TimeStamp > '2025-10-01' ORDER BY TimeStamp DESC"); // nCount 返回查询到的记录条数 // 使用 SQLSelectEx (更灵活,可直接返回字符串结果) string sResult; sResult = SQLSelectEx(SQL语句, "设备名"); // sResult = SQLSelectEx("SELECT AVG(Value) FROM RealTimeData WHERE TagName='Pressure' AND TimeStamp BETWEEN '2025-10-01' AND '2025-10-31'", "");
-
原理 (
SQLSelect
+ 记录体):- 构造好查询的 SQL
WHERE
条件语句。 - 执行
SQLSelect
后,查询结果集的第一条记录(或根据游标移动)会自动填充到记录体定义的那些组态王变量中,你需要使用Fetch
相关的函数(如SQLFirst()
,SQLNext()
)来遍历多条记录。
- 构造好查询的 SQL
-
原理 (
SQLSelectEx
):- 直接执行完整的
SELECT
语句。 - 结果以字符串形式返回(通常每条记录一行,字段间用制表符分隔),你需要在脚本中自行解析
sResult
字符串来获取需要的数据。
- 直接执行完整的
-
-
其他操作 (UPDATE, DELETE):
- 使用
SQLUpdate()
,SQLDelete()
函数,用法类似SQLInsert
,但需要更谨慎,通常在特定管理功能中使用,务必注意WHERE
条件,避免误操作大量数据。
- 使用
第四步:测试与调试
- 运行组态王运行系统 (View)。
- 触发数据写入: 确保触发
SQLInsert
的条件满足(如按钮按下、周期到达),观察数据库对应的目标表,检查是否有新记录插入,字段值是否正确(特别是时间戳格式)。 - 触发数据查询: 执行查询命令,检查记录体变量是否被正确赋值,或者
SQLSelectEx
返回的字符串是否包含预期数据。 - 查看日志:
- 组态王运行系统通常会在日志窗口(或独立的日志文件)中输出 SQL 执行信息、错误信息。这是排查问题最重要的依据! 常见的错误包括:
- 连接失败 (检查 ODBC 配置、网络、防火墙、数据库服务状态、用户名密码)
- 表或字段不存在 (检查数据库表名、字段名拼写、大小写 – 有些数据库区分大小写)
- 数据类型不匹配 (检查映射的变量类型与数据库字段类型)
- 主键冲突/约束违反 (检查自增主键或唯一约束)
- SQL 语法错误 (检查命令语言中手写的 SQL 条件)
- 组态王运行系统通常会在日志窗口(或独立的日志文件)中输出 SQL 执行信息、错误信息。这是排查问题最重要的依据! 常见的错误包括:
- 数据库端监控: 可以在数据库服务器端使用工具(如 SQL Server Profiler, MySQL General Log)监控组态王实际发出的 SQL 语句,帮助精确定位问题。
关键注意事项与最佳实践 (提升E-A-T):
- 安全性:
- 最小权限原则: 务必使用专用低权限数据库账号。
- 密码保护: ODBC 数据源密码在组态王内部存储时通常是加密的,但仍需保护工程文件安全,避免在脚本中硬编码密码。
- 输入验证: 如果用户输入用于构造 SQL 条件,务必进行严格的验证和过滤,防止 SQL 注入攻击,尽量使用参数化查询(如果组态王支持)或避免直接拼接用户输入。
- 性能优化:
- 批量插入: 对于高频数据(如每秒多条),避免每条数据都执行一次
SQLInsert
,可以在内存中缓存数据,定时(如每秒或每10条)执行一次批量插入(需要将多条记录的数据先赋值给不同的变量集,或在SQL访问管理器中配置对应多行插入的绑定表结构,或使用SQLExecute
执行INSERT INTO ... VALUES (...), (...), ...
语句 – 需注意版本支持)。 - 数据库索引: 在数据库表的关键查询字段(如
TagName
,TimeStamp
)上建立索引,可以极大提高查询速度。 - 连接池: 组态王通常会自动管理连接池,确保配置的连接参数(如超时时间)合理。
- 合理规划存储频率: 不是所有数据都需要高频存储,根据数据重要性和变化率设置不同的存储周期。
- 批量插入: 对于高频数据(如每秒多条),避免每条数据都执行一次
- 可靠性:
- 错误处理: 在命令语言中检查
SQLInsert
,SQLSelect
等函数的返回值(通常成功返回0,失败返回错误码),并添加必要的错误处理逻辑(如记录错误日志、重试、报警提示)。 - 断线重连: 组态王通常具备一定的断线自动恢复能力,了解其重连机制和配置。
- 数据库维护: 定期对数据库进行备份、索引重建等维护操作。
- 错误处理: 在命令语言中检查
- 清晰性与可维护性:
- 命名规范: 为 ODBC 数据源、绑定表、记录体、相关内存变量使用清晰、一致的命名规则。
- 文档记录: 在工程内部(如注释)或外部文档中记录数据库连接配置、表结构、关键脚本逻辑。
- 测试充分: 在不同场景(正常、网络中断、数据库重启、数据异常)下充分测试数据库功能。
组态王设置数据库的核心在于通过 SQL 访问管理器 配置 ODBC 数据源 和 绑定表(建立数据库字段与组态王变量的映射),然后在 命令语言 中利用 SQLInsert
, SQLSelect
等函数执行具体的数据库操作,成功的关键在于严谨的前期准备(数据库、表、用户权限、ODBC驱动)、准确的映射配置(数据类型匹配、时间戳处理)以及完善的测试与错误处理,遵循安全性、性能和可靠性的最佳实践,可以构建出稳定高效的组态王数据库应用。
引用说明:
- 本文所述操作步骤基于组态王(KingView)软件的标准功能和通用数据库连接原理,具体函数名、界面布局或细微操作可能因组态王软件具体版本(如 6.55, 7.5, 2014, 2025 等)而略有差异。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/36212.html