一、场景
在生产现场经常会有这样的场景,下位机PLC需要将一些数据上传给上位机或者MES,通常就是将一些数据存储到数据库。
面对此场景的业务需求,使用KEPWare的ODBC Clint、Link Tag的功能来实现。
其常见的信号交互流程如下图所示。
二、步骤
步骤一:
在数据库中建立用来存储PLC相关数据的Table,表如下所示。
说明:1、ID为自增长列。CreateTime默认值为getdate(),即每次新建数据时,CreateTime默认是以当时本地的时间来记录。
2、Table的名称为TestTable。
步骤二:
创建一个往TestTable中插入一行记录的存储过程。
USE [TESTDB] GO /****** Object: StoredProcedure [dbo].[INSERT_TESTTAB] Script Date: 2019/6/12 14:54:03 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= ALTER PROCEDURE [dbo].[INSERT_TESTTAB] -- Add the parameters for the stored procedure here @p1 int, @p2 int, @p3 int output AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here INSERT INTO [TESTDB].[dbo].[TestTable] (VALUE1,VALUE2) VALUES(@p1,@p2) ; set @p3=1; return 1; END
说明:1、输入参数p1、p2对应着需要插入到TestTable中的Value1、Value2
2、输出参数p3用来获取执行结果(为什么不适用返回值来作为执行结果呢?后面会有说明)
步骤三:
在KEPWare中创建模拟PLC数据的Tag(如果有实物PLC可以直接配置实物的PLC驱动来进行)
a、新建Channel的时候Driver选择Simulator的驱动,此驱动可以完成数据的模拟。
b、新建4个Tag。
步骤四:
a、在KEPWare中新建ODBC Client,来连接数据库。(具体的操作细节可以百度 KEPWare ODBC)
b、在Access method selection中选择Stored Procedure
c、在Stored Procedure selection中选择刚刚创建的名称为INSERT_TESTTAB的存储过程。
d、配置完成KEPWare会自动生成Tag。
说明:1、Execute:每次写完成的时候,Execute stored procedure (on write complete).都会执行,而不是从flase变为true执行这点需要特别注意。
2、input_p1、input_p2对应着存储过程p1、p2的输入参数,input_output_p3为p3的输出参数。
3、output_RETURN_VALUE对应着存储过程的返回值。注意output_RETURN_VALUE为只读的Tag。
步骤五:
在KEPWare中新建Link Tag将ODBC Client的Tag和模拟PLC的Tag关联。
三、测试
按上述流程图进行测试。
将1写入到Value1、1写入到Value2,然后将Request置位,然后执行完存储过程,Response会被置1。结果在数据库中成功插入了一条数据,如下所示。