Ifix
与数据库通讯
概述
Intellution
公司提供的驱动程序几乎可以与大多数智能终端交
换数据
,
用户能够快速直观地建立面向过程的实时窗口
,
具有监控、
报
警、历史趋势、
统计等功能。基于微软工业标准的开放式数据库互连
(ODBC)
,
最新版
iF
IX
可以支持多种关系型数据库
,
如
Oracle
Ò、
Sybase
和
Microsoft
Ò
SQL Server
。通过使用自带的系统配置工具
SCU, iFIX
可设置
SCA2DA
服务器从一个过程数据库访问多个关系数据库。
iF IX
过程数据库原理如下
: SCADA
服务器在启动时会载入一个过程数据
库。
过程数据库是由一系列的不同类型的数据块组成
,
从
I/O
驱动器或
者
OPC (OLE for process control)
服务器中读取的各个生产数据项
就记录在相应类型的数据块中
,
例如一个模拟量寄存器块
(AR
块
)
可以
记录某个温度值
,
一个数字量寄存器块
(DR
块
)
可以记录某个开关的状
态。两个或两个以上的数据块就构成一个数据链
,
通过应用数据块和
数据链使得
iF IX
过程数据库能完成一些特殊的处理数据任务
,
例如
下面要讲的
SQT
块与
SQD
块组成的数据链就可以实现与外部关系型数
据库的通信。
iFIX
与关系型数据库的通信
iFIX
与关系型数据库的通信使用了结构化查询语言
( SQL)
。
SQL
是
关系数据库使用的标准语言
,
用来检索、更新和管理数据。尽管它为
应用提供了公共的语法
,
但不提供公共应用程序接口
(AP
I)
。开放式
数据库互连
(ODBC)
是
Microsoft
的标准
AP
I,
用来访问、显示和修改多
种关系数据库数据
[ 2 ]
。
iF IX
允许使用两种方法通过
ODBC AP I
提供访问
SQL
数据源
:
①
iF IX SQL
接口选项
,
又称为
iF IX ODBC;
②
Microsoft Visual Basic for App lications
中利用
DAO
或
RDO
。
尽管可以使用
VBA
或
iF IX ODBC
访问
SQL
数据源
,
但是它们各自有不同
的特点。在多数情况下
,
用
VBE ( visual basic editor)
写脚本可以
更快和更容易地访问和处理
SQL
数据源。而
iF IX ODBC
不需要具备
VBA
脚本知识
,
就能执行所有的
SQL
任务
[ 1 ]
。如果想确定数据库收
到确定性的数据
,
应当使用通过
iF
IXODBC
可获得的数据库块。当使用
数据库块时
,
数据在每个扫描时间内被及时送到数据库。
iF IX ODBC
在与
SQL
数据源的通信中更加可靠
,
易于查找出错原因
,
且配置简单
,
不用编写大量程序。
数据库块
iFIX
ODBC
主要由
SQL
任务、
SQL
触发
(
SQT)
数据库块、
SQL
数
(
SQD)
数据库块
3
个部分组成。
其中
SQT
块用于指定
SQL
命令的名称
,
可被基于
时间或者事件的调度所触发
; SQD
块则定义了需采集传送的数据块和
数据传送的方向。当
SQT
块被触发后
, SQL
任务从
SQT
块读取
SQL
命令名。根据接收到的
SQL
命令名
,
SQL
任务从关系数据库中用户已建
立的
SQLL IB
表中查找与其对应的
SQL
命令。
SQL
命令指定了命令的具
体作用以及作用的数据表。
SQL
任务从
SQD
块读取指定的块并从
iFIX
数据库读和写这些标签相关的值
,
执行
SQL
命令插入数据到关系数据
库或从关系数据库选择数据。
如果
SQL
命令是一个
SELECT
命令
,
检索的
数据被写到
SQD
块定义的
iF IX
标签中。对于用户来说
,
具体要做的任
务就是配置
iFIX
的
SCU
和过程数据库的
SQL
块
,
并且在关系数据库中正
确建立相应的表。
配置过程
一方面与
PLC
之间通过
OPC
驱动程序执行扫描、报警等主要任务
,
另一
方面将从
PLC
中接收到的实时工业数据记录在
SQLServer
中。
SCADA2
和
SCADA1
互为冗余
,
配置完全相同
,
大大提高了整个系统的可靠性。
Terminal Server
作为
iClient
节点
,
将
SCADA1
提供的工业数据通过生
动的画面发布给使用者
,
用户可由因特网拨入
VPN,
使用
Windows
操作
系统自带的远程桌来访问
,
从而实现了远程监控。
SCADA1
与
SQL Server
的配置过程如下
:
(1) SQL Server
的配置。
①安装
MS SQL Server 2000
建立对象数据库。
②在对象数据库中建立数据表。
根据工业数据记录的要求建立多个相
应数据表。表的列名要易于理
解
,
方便使用者的查询分析。
③根据数据表的结构建立
SQLL IB
表。
SQLL IB
表中保存需要执行的
SQL
命令
,
仅包含两列
: SQL
命令名列和
SQL
命令列
,
分别用来保存
SQL
命令名和
SQL
命令内容。每个
SQL
命令必须以“
;
”作为结束
符
,
且
SQL
命令的长度不能超过
255
B,
否则
iF
IX
无法识别
(
这就要求数
据表的列数不能太多
,
列名不能过长
)
。
④建立
SQLERR
表。
SQLERR
表用来记录
iF IX
与
MS SQL Server
通信发
生的错误代码。具体方法见
(2) SCADA1
的配置。
①建立数据源。配置为系统
DNS
时
,
系统安全级别更高。
②配置
SCU
。分为两步
:
首先
,
添加
SQL
账户。
把建立好的
ODBC
数据源加入
SQL
账户对话框
,
填写
的用户名应具有读写数据库的权限。
其次
,
配置
SQL
任务。
启动
SQL
支
持
,
在数据库
ID
域中填写
ODBC
数据源的名称
; SQL
命令表域和错误记
录表域分别填写
SQLL IB
和
SQLERR
。点击确定后
, SQL
任务自动作为
服务被添加到
SCU
的启动任务表中。
③配置过程数据库。建立相应的
SQT
块和
SQD
块
,
确保
SQD
块与相应
SQT
块组成数据链。
SQT
块的
SQL
名域填写在
SQLL
IB
表中的命令名
,
数据库
ID
域填写
ODBC
数据源名
,
根据需要选择相应的触发条件。
SQD
块作为相
应
SQT
块的下一块
,
每块最多可记录
20
个数据块名
,
若要记录的数据块
名超过
20
个
,
可新建一个
SQD
块
,
作为老
SQD
块的下一块。
(1)
如何确定
SQT
块的触发条件。
SQT
块支持两种触发方式
:
时间触发和事件触发。
通过设置起始时间和
时间间隔
,
iFIX
可以持续以一固定时间间隔向数据库里写入数据。但
这种方式不能顾及实际现场生产状况
,
即使生产处于停机状态仍记录
不需要的数据
,
将浪费大量磁盘空间。本例采用事件触发。在过程数
据库中基于
SIM
驱动程序建立一个虚拟数字量输入块
,
在正常生产时
,
此数字量输入块能够以固定时间间隔切换自身值
;
在生产停止时
,
此
数字块值不变
(
这在
PLC
中很易做到
)
。通过将此数字块设置为
SQT
块
的触发块
,
实现了高效的数据记录。
(2)
如何记录
SQT
块的触发时间。
数据分析师不仅要知道某些事件发生时生产的状态
,
而且往往需要知
道某事件的发生时间
,
这就要求在数据库中记录下每次读写数据库的
时间
,
但
iF IX
自身并没有时间纪录功能。
iF IX
开发工程师开发了一
种
TDS( time date stamp )
块
,
安装这种数据块后
,
在
iF IX
过程数据
库中就多了一种
TDS
块
,
可同样以虚拟数字量输入块作为此
TDS
块的触
发块
,
记录数字块值变化瞬时的具体时间。从而巧妙实现了记录事件
的同时也记录下事件发生的时间。为事后分析数据提供了方便。
(3)
如何查找通信中的错误。
关系数据库中的
SQLERR
表虽然可以记录实时的通信出错信息
,
但记
录的错误码不易理解
,
对于没有经验的使用者毫无用处
,
且一旦数据
库管理系统本身出错
, SQLERR
表便无能为力了。
iF IX
自身提供的任
务控制工具
,
可以在线控制
SQL
任务的启动和停止
,
可以显示出错信
息
,
对于调试者更加容易使用。