贾铭 张金巍
(1.苏州泽达兴邦医药科技有限公司,苏州 215000;2 天士力制药集团股份有限公司,天津 300410)
现代中药生产工艺主要包括提取、过滤、浓缩、醇沉、分离、层析、收膏、干燥等过程,以及配套的乙醇回收等几个工序组成。建立中药生产控制系统可以从产品的源头上解决中药产品工艺和成分的均一、稳定要求,更好地与国家GMP 规范相融合、有利于保证产品质量。
现代中药生产工艺繁琐、参数变量大,特别是原材料成分和企业工艺的控制制约了不少先进企业的发展,对生产过程的计算机控制与管理提出了迫切要求。现代中药生产中,提取是非常关键的起始阶段,一般采用批量生产方式,批量生产过程要求生产线具有良好的操作柔性,即在同一生产线上按批量生产单一或经清洗后满足多种不同产品的生产。本文所述的中药生产控制系统采用OPTO22 公司的PAC 控制系统,对提取、过滤、浓缩、沉淀、分离等工序进行了自动化设计,取得了良好的效果。
由于本控制系统采用OPTO22 公司的PAC 控制系统,因此使用了OPTO22 集成的组态软件进行了组态,实现了使用图形界面进行现场设备的监测与控制,实现了生产操作的自动化。同时,在进行工艺总结或生产过程回顾时,需要查看生产过程数据,进行统计和分析,由于集成的ioDisplay 组态软件历史数据存储功能简陋,只能保存为文本文档,对于存储以后的查询,十分不便,因此主要依靠人工填写的生产记录来追溯历史过程。人工填写的生产记录,记录点少,间隔时间长,仅靠少量的数据不足以对整个生产过程做全面的评估、分析。因此控制系统迫切的需要增加控制点数据记录功能。
根据数据处理过程,大致分为三步,首先将原始数据“读出来”,然后将数据“存进去”,最后再将数据“取出来”。要将数据从控制系统中“读出来”,关键是实现PAC 数据通讯。“存进去”即数据存进数据库中,“取出来”即数据从数据库中取出来,这两步的关键是实现数据库操作。最后“取出来”功能,还涉及表格、趋势图的自动生成。
总结分解的目标如下:
(1)实现PAC 控制系统数据通讯。
(2)实现数据存、取等数据库操作。
(3)数据查询及数据呈现。
要实现“读出来”、“存进去”和“取出来”三个过程,首先需要选择软件开发平台。本着轻量级化,软硬件需求环境低的原则,选择使用Visual Basic[1]6.0 开发平台。然后需要选择数据库平台,要同时满足轻量级化和C/S(客户端/服务器)架构,架设一个数据库服务器可满足多个操作员站访问,选择使用SQL Server[2]2000 数据库。
下面针对每个分解目标拟定实现方案。
3.2.1 实现PAC 控制系统数据通讯
要实现PAC 控制系统的通讯,主要有两种途径。第一是从PAC 硬件中读取数据,这需要开发硬件驱动,费事费力。第二是从上位机软件中读取数据,这里要用到IoProject 组态软件关键的OPC 接口,下面简要介绍一下OPC 接口。
OPC[3]是OLE(Object Linking and Embedding,对象链接和嵌入)for Process Control 的缩写,它是基于微软的COM(组件对象模型)、DCOM(分布式组件对象模型)技术,为实现控制系统开放互通的一项标准。OPC 在硬件供应商和软件开发人员之间搭上了一座桥梁,它提供了一种机制从数据源提供数据并且以一种标准的方式将这些数据传送的任意客户端应用软件[4]。OPC 也为实现控制网络与信息网络之间的信息交互提供了较为方便的途径,见图1。
3.2.2 实现数据存、取等数据库操作
“存进去”这一需求,需要在Visual Basic 6.0 开发平台与SQL Server 2000 数据库中架设一座桥梁,ADO组件可以充当了这一角色,下面简要介绍一下ADO 组件。
ADO (ActiveX Data Objects,ActiveX 数据对象)是Microsoft 提出的应用程序接口(API)用以实现访问关系或非关系数据库中的数据。Microsoft 和其它数据库公司在它们的数据库和Microsoft 的OLE 数据库之间提供了一个“桥”程序,OLE 数据库已经在使用ADO 技术。
3.2.3 数据查询及数据呈现
DBGrid 是强大的表格工具,MSChart 是功能强大的ActiveX 组件,通过编写适当的代码可将查询的数据自动生成表格和趋势图。
4.1.1 OPC 接口架构
OPC接口共有6个对象,他们是OPCServer服务器、OPCGroups 组集合、OPCGroup 组、OPCItems 标签集合、OPCItem 标签、OPCBrowser 浏览器,见图2。
图1 OPC 接口示意图
图2 OPC 接口架构
6 个对象的作用,见表1。
4.1.2 OPC 接口运行过程
OPC 接口有特定的运行过程,见图3。
4.1.3 定义OPC 接口对象
Dim OPCServer1 As OPCServer / 定义OPCServer服务器
Dim Groups1 As OPCGroups /定义OPCGroups 组集合
表1 OPC 接口对象
Dim WithEvents Group1 As OPCGroup / 定义OPCGroup 组
图3 OPC 接口运行过程
Dim Item1 As OPCItem /定义OPCItems 标签
Set OPCServer1 = New OPCServer /创建OPCServer服务器实例
OPCServer1.Connect ("Opto22.OpcServer.2")/ 连接Opto22 控制系统
Set Groups1 = OPCServer1.OPCGroups / 创建OPCGroups 组集合实例
Set Item1 = Group1.OPCItems.AddItem(ItemID,ClientHandle) /创建OPCItem 标签实例
4.1.4 数据获取方式
OPCServer 服务器提供了同步和异步两种方法。同步的方式客户端必须等待返回的结果,效率很低,此种方式一般在故障诊断时使用。异步的方式使客户端可以在访问数据后继续下一步操作,在结果返回时,OPC 服务器会通知客户端,这种方式访问效率高。
采用异步方式,我们可以利用OPCGroup 组的DataChange 事件,自动获取PAC 控制系统数据当满足一定的条件时,OPC 服务器返回结果,激发相应的事件来通知客户端程序做相应的处理,系统资源耗费较少。
事件的结构代码如下:
Event DataChange(TransactionID As Long, NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)
至此,已经完成了与PAC 控制系统的通讯。
4.2.1 定义ADO 组件对象并连接数据库
Dim Connection1 As New ADODB.Connection / 定义Connection 连接对象
Dim Recordset1 As New ADODB.Recordset / 定义Recordset 数据集对象
Dim Command1 As New ADODB.Command / 定义Command 命令对象
Connection1.ConnectionString= "Provider = SQLOLEDB.1; Persist Security Info=False;_
User ID= 用户名;Initial Catalog= 数据库;Data Source=数据源" /定义Connection 连接对象连接字符串
Connection1.Open / 打开Connection 连接
Command1.ActiveConnection = Connection1 / 设置Command 命令使用Connection 连接
4.2.2 将记录时间、数值、控制点位号及生产批号存入数据库表
Dim String1 As String /定义字符串
String1 = "insert into 生产数据表(记录时间,数值,控制点位号,生产批号) _
values('Str(Item1.TimeStamp)', Item1.Value, ClientHandle, curBatchId)" / 设置insert 字符串语句
Command1.CommandText = String1 / 设置Command 命令为已设置完的insert 字符串语句
Command1.Execute /Command 命令执行
4.3.1 数据查询主要依靠强大的select 查询语句,格式如下:
Select 记录时间,数值,控制点位号 from 生产数据表 where 生产批号=201401001
4.3.2 数据呈现
数据呈现的界面,见图4。
借助Excel 强大的数据处理功能,能够快速生产各种图表,进行统计、分析,Excel 输出功能很多软件都具备,且受欢迎,Excel 输出关键代码如下:
Set ExcelObject = CreateObject("Excel.Application") /创建Excel 对象
Set ExcelObject = GetObject(, "Excel.Application") / 激活Excel 对象
Set ExcelBook = ExcelObject.Workbooks.Add / 在Excel 中添加一个工作簿
图4 数据查询界面图
Set ExcelSheet = ExcelBook.ActiveSheet / 在Excel中激活一个工作表
ExcelSheet.Cells(1, 1) = "时间" / 第1 行第1 列写入“时间”作为表头
ExcelSheet.Cells(1, 2) = "数值" / 第1 行第2列写入“数值”作为表头
定义循环,将数据库中存储的“记录时间”、“数值”输出到Excel 工作表中
Dim i As Integer
For i = 2 To RecordSet1.RecordCount
ExcelSheet.Cells(i, 1) = RecordSet1.Fields. Item("记录时间")
ExcelSheet.Cells(i, 2) = RecordSet1.Fields. Item("数值")
RecordSet1.MoveNext Next i
4.3.3 表格显示功能
Set DataGrid1.DataSource=RecordSet1 /设置表格的数据源为查询语句返回的记录集
4.3.4 趋势图显示功能
/设置MSChart 的行关联RecordSet 记录集
MSChart1.RowCount = RecordSet1.RecordCount
/定义循环 ,将数据库中存储的“数值”生成趋势图
Dim i As Integer
For i = 1 To RecordSet1.RecordCount
MSChart1.Row = i
MSChart1.Data = RecordSet1.Fields.Item("数 值")
RecordSet1.MoveNext
Next i
使用Visual Basic 开发平台和SQL Server 数据库,运用OPC、ADO 等关键技术进行OPTO22 PAC 中药生产控制系统数据库二次开发,大幅度提升了原系统历史数据管理能力,系统具备数据自动存储、查询、Excel 输出、表格和趋势图自动生成功能,便于进行生产过程数据的统计分析、历史数据追溯,很大程度上,提高了产品质量,收到了良好的效果。系统轻量级化,安装文件仅四十多兆,安装环境要求低,可安装于原系统工程师站,不增加硬件投入。
[1] OPC 基 金 会,Data Access Automation Interface Standard 2.02 版[M]. 1999.
[2] 龚沛曾, 杨志强, 陆慰民. Visual Basic 程序设计教程(第3 版) [M].北京:高等教育出版社,2007.
[3] 刘启芬, 顾韵华, 郑阿奇. SQL Server 使用教程(第3 版)[M].北京:电子工业出版社,2012.
[4] 孙汉卿,吴海波.现场总线技术[M].北京:国防工业出版社,2014.