1、Intouch与SQL交互基础:ODBC数据源配置、SQL Access Manager介绍、绑定列表与绑定列

各位同学,咱们今天聊点实在的。Intouch 跟 SQL 数据库怎么搭上线?说白了,就是让上位机能把现场数据存进数据库,或者从数据库里把历史数据读回来。这个能力在工厂里太重要了——你想想看,没有数据库,你的数据就只能存在本地,一断电全没了。

我最早做这个的时候,也踩过不少坑。有一次在水泥厂调试,数据死活写不进去,折腾了两天,最后发现是 ODBC 数据源名字写错了。嗯,这种低级错误,犯过一次就记住了。

1.1 ODBC 数据源配置

ODBC 是什么?Open Database Connectivity,开放数据库连接。它是 Windows 系统里的一套标准接口。Intouch 通过 ODBC 跟 SQL Server、Oracle、MySQL 这些数据库打交道。

配置步骤其实不复杂,我习惯这么操作:

  1. 打开 Windows 的「ODBC 数据源管理器」(64位和32位要分清,Intouch 是32位应用,必须用32位的 ODBC 管理器)
  2. 选择「系统 DSN」选项卡,点击「添加」
  3. 选择对应的数据库驱动(比如 SQL Server Native Client)
  4. 填写数据源名称(这个名称后面在 Intouch 里要用到)
  5. 配置服务器地址、数据库名称、登录方式

⚠️ 重要提醒: 我曾经在项目里遇到过 Intouch 死活连不上数据库,查了半天发现是 ODBC 驱动版本不对。Intouch 是32位程序,必须用32位的 ODBC 管理器去配置。64位的 ODBC 管理器配出来的数据源,Intouch 根本认不到。

配置完成后,记得点「测试数据源」按钮。如果提示连接成功,那这一步就过了。如果失败,检查防火墙、SQL Server 是否允许远程连接、登录名密码是否正确。

1.2 SQL Access Manager 介绍

SQL Access Manager 是 Intouch 自带的一个工具。它的作用是什么?说白了,就是帮你在 Intouch 和数据库之间搭一座桥。

你不需要写复杂的 SQL 语句,只需要在 SQL Access Manager 里配置好「绑定列表」和「绑定列」,Intouch 就会自动帮你生成 SQL 语句,执行插入、查询、更新操作。

我个人习惯把 SQL Access Manager 看作是 Intouch 的「数据库翻译官」。它把 Intouch 里的标记名(Tagname)翻译成数据库里的字段名,把 Intouch 的数值翻译成 SQL 语句里的值。

核心概念: SQL Access Manager 管理的是「绑定关系」。它告诉 Intouch:当某个事件触发时,要把哪些数据写到数据库的哪些字段里。

1.3 绑定列表与绑定列

这两个概念是今天的关键。我尽量用大白话讲清楚。

绑定列表(Bind List):你可以把它理解成一个「数据包」的模板。这个模板里定义了:我要往哪张表里写数据?我要写哪些字段?每个字段对应 Intouch 里的哪个标记名?

绑定列(Bind Column):就是绑定列表里的具体条目。每个绑定列定义了一个字段的映射关系——数据库字段名、Intouch 标记名、数据类型。

举个例子:

绑定列表名称:PLC_Data_Insert
目标表名:dbo.ProductionData
触发条件:OnChange(值变化时触发)

绑定列:
  - 数据库字段:TimeStamp → Intouch标记:$SystemTime → 类型:DateTime
  - 数据库字段:Temperature → Intouch标记:Tag_Temp → 类型:Float
  - 数据库字段:Pressure → Intouch标记:Tag_Pressure → 类型:Float
  - 数据库字段:Status → Intouch标记:Tag_Status → 类型:Integer

配置好之后,当 Tag_Temp 的值发生变化,Intouch 就会自动执行一条 INSERT 语句,把当前的时间、温度、压力、状态写入数据库。

💡 我的经验: 绑定列表的名字不要乱起,我习惯用「表名_操作类型」的命名方式,比如 ProductionData_Insert、AlarmLog_Select。这样项目大了之后,维护起来一目了然。

这里有个容易搞混的地方——绑定列表里的「触发条件」有几种选择:

触发条件 说明 适用场景
OnChange 值变化时触发 连续数据采集
OnTrue 值为真时触发 报警记录
OnFalse 值为假时触发 状态复位记录
OnKey 按键触发 手动保存

我个人最常用的是 OnChange。为什么?因为工厂里的数据是实时变化的,温度、压力、流量这些模拟量,每时每刻都在变。用 OnChange 可以保证每次变化都被记录下来。

但要注意一个问题——如果数据变化太频繁,比如每秒钟变化几十次,那数据库的写入压力会很大。我曾经在一个化工项目里遇到过,PLC 扫描周期是 100ms,Intouch 每 100ms 就往数据库写一条记录,结果 SQL Server 的日志文件一天就涨到了 10GB。

怎么解决?两个办法:

  • 在 Intouch 里做死区处理:变化幅度超过一定阈值才触发写入
  • 用定时写入:每隔几秒批量写入一次,而不是每次变化都写

好了,咱们用一张图来总结今天的内容:

Intouch 标记名变量 SQL Access Manager 绑定列表 + 绑定列 SQL 数据库 数据表 标记名映射 SQL 语句 查询结果返回 Intouch 与 SQL 数据库交互架构 ODBC 数据源 → SQL Access Manager → 绑定列表/绑定列 → 数据库 核心流程:Intouch 标记名 → 绑定列映射 → SQL 语句生成 → 数据库写入/查询 触发条件:OnChange / OnTrue / OnFalse / OnKey

这张图把今天的内容串起来了。从左到右,Intouch 的标记名通过 SQL Access Manager 里的绑定列表和绑定列,映射到数据库的字段,最终完成数据的读写。

最后说一句,ODBC 配置好之后,记得在 Intouch 的「应用程序管理器」里设置好 SQL 访问的登录信息。这个很多人会忘,结果运行时一直报错「无法连接数据源」。

好了,今天的基础内容就这些。下一节咱们会动手实操,写一个完整的例子,从配置到运行,一步步走一遍。


专注资料整理