基于KEPWare实现PLC与MES的握手通讯以及简单逻辑处理

一、场景

在生产现场经常会有这样的场景,下位机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。结果在数据库中成功插入了一条数据,如下所示。

原文地址:https://www.cnblogs.com/cherish836138981/p/11005134.html