TwinCAT DB Server:从PLC直接操作数据库

自动化设备的单机性能不断提升之后,企业对质量追踪、生产数据统计和分析提出了新的要求,需要设备的控制系统与企业局域网通讯。由于倍福PLC本身就是一台“计算机”——Window操作系统和自带1个或者两个以太网口——可以直接接入工厂局域网。PLC在局域网中的位置如图所示:

PLC接入局域网之后,企业还必须投入配套的软件,才能采集PLC数据进行质量追踪和其它统计分析。配套软件可能是第三方组态软件,也可能是用高级语言开发的专门程序,也可能是企业的ERP或者MES系统。配套软件可以在线分析PLC数据并即时响应,但更普遍的应用是先把PLC数据放到数据库——比如SQL或者Oracle——配套软件以后再离线分析。

PLC数据如何进入数据库呢?通常是用C#或者VC编程一个桥接程序,采集PLC数据送到SQL或者Oracle等数据库。在实际的项目实施过程中,编写数据分析软件或者实施MES系统的IT工程师,并不熟悉PLC或者TwinCAT PLC或者TwinCATADS通讯,而自动化工程师或者电气工程师,又不熟悉C#或者VC,更少熟悉C#或者VC中的数据库编程。所以到底是IT工程师还是自动化工程师来编写这个桥接程序,怎样编写才能运行效率高并且稳定可靠,成了个不大不小的问题。

为此,倍福公司提供了扩展软件包TwinCAT Database Server,它可以取代C#或者VC高级语言应用程序,让PLC工程师无须编写高级语言代码,就可以实现TwinCAT PLC到Database的数据桥接。如图所示:

TwinCAT Database Server推出市场至少已经10年以上,成熟稳定,在各行各业大量使用。需要澄清的是,它本身不是数据库,而是提供TwinCAT PLC到数据库的桥接,通过它不仅可以把PLC数据送到普通的数据库,比如SQL、Oracle、Access等,还可以送到WinCE系统上的Compact的数据库,还可以送到Excel或者ASCII文件中,甚至还可以用XML文件用作数据库。

(*TwinCAT对云技术的支持,仅简介,无例程*)

此外,对于大型和超大型的企业,其生产园区可能分布在不同城市甚至不同的国家,随着网络云技术的发展,这些大型和超大型企业,甚至可以通过云服务器直接访问分布全国甚至全球的各个分厂里的自动化设备的数据——既能收集数据又能发布指令——以实现全球范围的生产排期,工厂生产与主要原材料和部件的采购仓储以及销售运输过程的自动对接,关键设备状态监测和及时检修等等。当然,这有赖于自动化设备的控制系统对云技术的支持,以及企业本身对云平台的建设。

倍福也提供多种云技术的解决方案,既可以单台控制器访问云数据,也提供云中转软件TwinCAT IoT Gateway让倍福控制器和第三方控制都可以过该软件访问云数据,还提供IoT云数据分析的软件TwinCATIoT Ananysis。此外还提供IO数据可以直接上云端的IoT耦合器。如图所示:

虽然云技术、工业4.0、智慧工厂等概念在2017年前就很热门,倍福也提供多种解决方案,但目前在国内应用案例还不多,作者也缺乏这方面的实际项目经验。国内更为普遍的应用,还是PLC与数据库的直接通讯,即TwinCATDatatbase Server。本章就主要介绍它的原理和用法。

1,工作原理

TwinCAT DatabaseServer的软件模型如下:

Database Server启动时会装载配置文件“C:\TwinCAT\Boot\CurrentConfigDataBase.xml”,该文件包含3部分内容:

XML Database Declaration配置数据库的信息,包括类型、文件名、表等;

XML Device Declaration配置PLC信息,包括NetID和Port;

XML SymbolGrp Declaration配置变量表,包括变量来源PLC和去向DB。

该XML文件还定义了DB Server的启动模式是AutoStart或者Manual。AutoStart时XML SymbolGrpDeclaration中配置的变量表会周期性地自动写入到数据库。PLC程序中可以调用功能块来中止或者重启这个动作。Manual模式则是由PLC程序调用不同的FB进行数据库操作:插入记录、创建或删除Database或者Table、查询数据,或者执行任意SQL语句。从图上可以看出,Manual模式时不需要SymbolGrpDeclaration。

在PLC程序中操作DB的Table表时,只识别ID号,只有在XML文件中配置过的表,PLC才能操作,上图中的“XMLConfiguration File Editor”就是配置这个XML文件的可视化工具。事前必须用这个工具定义好ID对应Database类型、路径、文件和表,还可选增加授权访问的用户名和密码等信息。

TwinCAT Database Server随TwinCATService一起启动,安装DB Server的PC上必须安装TC2,其Level可以是任意级别:32位Demo版或者64位Engineering版本都可以。DB Server工作时TwinCATService必须要在Config或者Runing模式。

图中的TwinCATDatabase Servver、PLC和DB可以是在同一台计算机,也可以分布在多台计算机上,但是都在一个局域网内。拓朴结构有以下4种:

第1种:数据库保存在1台PC上,TwinCAT Database也装在同一台PC上。

用于中型企业相对单一功能的数据库。

第2种:数据库保存在多台PC上,TwinCAT Database也装在单独的1台PC上。

这种数据库系统结构复杂,通常大型企业会配有专门的软件部门维护这些数据库,并配合有复杂的数据分析软件。

第3种:在PLC上安装小型数据库和TwinCAT Database Server或者TwinCATDatabase Server CE,可以单机使用,也可以多台联网。

这种系统的数据库通常用于保存一些本地生产数据,数据库文件可以传输储存供日后分析。

第4种:大型的独立于PLC的数据库,在每台PLC上都安装TwinCAT Database Server或者TwinCAT Database Server CE。

大型企业,出于安全或者成本考虑,不能提供安装TwinCAT软件和TwinCATDatabase Server的IPC。而实际上,每控制器上都安装DBServer,软件费用也不低。

3TwinCAT Database Server的安装和配置3.1PC机安装Database过程3.2CE系统安装Database过程3.3软件配置和调试4从PLC调用功能块访问数据库4.1TcDatabase.lib提供的功能块

PC安装TwinCAT Database Server后,在TwinCAT\PLC\Lib目录下就会有TcDatabase.Lib,用户也可以从配套文档中复制该文件并在PLC程序中引用,如图所示:

其中最常用的是通过SQL语句插入数据记录的功能块FB_DBRecordInsert_EX和查询功能块FB_DBRecordSelect_EX,如果TwinCAT Database Server采用AutoStart方式,PLC程序中还要使用FB_DBCyclicRdWrt来开始和中止自动连续插入数据。

对于正式的数据库SQLServer和Oracle,还可以预定义多个带参数的Procedure,PLC可以触发这些Procedure的执行。与此相关的FB有:

FB_DBStoredProcedures:触发Procedure,

FB_DBStoredProceduresRecordArray:触发Procedure并接收返回的多条记录

FB_DBStoredProceduresRecordReturn:触发Procedure并接收返回的1条记录

是否返回或者返回几条记录,取决于Procedure的预定义的功能,而在数据库中生成这个Procedure时,可以指定其Input、Output和InOut参数。

另外还有实现以下功能的FB:

打开和关闭到数据库的连接:FB_DBConnectionOpen和FB_DBConnectionClose

创建数据库和创建数据表:FB_DBCreate和FB_DBTableCreate

上图中所有的FB都可以在TwinCAT Information System中找到相关解释:

4.2通过SQL语句触发数据库操作的FB

向数据库插入记录功能块

读取数据库记录的功能块

4.3从PLC启动DB侧预定义的Procedure

对于正式的数据库SQLServer和Oracle,还可以预定义多个带参数的Procedure,PLC可以触发这些Procedure的执行。注意TwinCATDatabase Server并不能生成或者修改数据库中的Procedure。

与Procedure相关的FB有:

FB_DBStoredProcedures:触发Procedure,不返回数据

FB_DBStoredProceduresRecordArray:触发Procedure并接收返回的多条记录

FB_DBStoredProceduresRecordReturn:触发Procedure并接收返回的1条记录

是否返回或者返回几条记录,取决于Procedure的预定义的功能。而Procedure是在数据库中生成的。FB调用Procedure时需要指定参数,参数可以声明为Input、Output和InOut类型,这样复杂的SQL指令可以在数据库里面预先编辑好,而TwinCAT Database Server只要触发它就行了。

接口参数数组ArrParalist有多少个元素,就可以把多少个PLC变量送给数据库,假如把一个变量的值赋给一个字段,这样插入一条几十个字段的记录就比用SQL语句高效得多,并且是按值传送,而不是转换成ASCII传送。

这个方法的好处是传送效率高,缺点是只有正式的数据库才支持,并且用户要懂得数据库里生成Procedure的方法,并事先生成。

4.4自动连续向数据库插入记录

中止和重启自动连续插入记录的FB

在bExcute的上升沿触发目标机器NetId上的TwinCATDatabase Server自动读写记录的动作,而在下降沿则中止自动记录数据的过程。不需要指定DBId,XML配置文件中声明过的全部变量列表都会自动记录,从源PLC到目标DB。

4.5如何把变量的值合成进SQL语句

TwinCAT Database Server最常用的功能就是把PLC变量的值插入数据库的某个Table的一条记录,在10.4.2013版的TcDatabase.Lib中提供了FB_DBRecordInsert_EX。

这个FB其实是接受一个Cmd,这个Cmd最长可以是9999个字节,用户只要指定Cmd的起始地址pCmdAddr和字节数cbCmdSize,TwinCAT会自己发出一个最长9999字节的字符串,即SQL命令,其中应包括插入记录的每个字段的值,而每个字段就对应了一个PLC变量。那么如何把多个PLC变量的值嵌入到一个SQL语句,成为一条合法的SQL命令?TcUtilities.Lib中的FB_FormatString就用于合成字符串:

这个FB最多一次把10个变量的值合成到字符串,如果超出10个字段,就要分两次合成。下面举例来说明它的用法:

上面的代码中要注意两点:

注意sFormat末尾的占位符$'%D$',以,结尾,表示SQL语句未完待续

各Arg的转换F_xxxx函数必与变量类型严格匹配,注意不支持Bool型变量转换

最需要强调的是sFormat的格式和占位符的用法:

5,Database通讯例程

5.1 Access通讯例程

5.2 SQL通讯例程

5.3 Oracle通讯例程

5.4启动SQL中Procedure的例程

5.5 报错处理

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180113G00YPN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券