西门子S7-300/S7-1200每日数据初始化的方法

      我们在开发PLC数采功能程序时,碰到有些数据需要每日初始化的场景,例如日产量、生产时间等,需要每日重新初始化(笔者一般把这些数据记录到PLC的DB块里,每月循环记录,上位机再读写DB块,这样可有效避免有时上位机不开机或故障,无法及时记录当日数据的场景出现,需要时就可从PLC读出补齐当月记录)。

      在开发PLC数采功能时,遇到某条产线需要每日产量计数、生产时间计数、统计产线OEE的情景。产线每日生产时间8:00-24:00,功能要求每日上班后(8:00)开始对当日产量计数、生产时间记时、产线OEE计算并上传上位机数采系统。

      原考虑每日准时(例如每日8:00开工时),读取当日系统时间准时初始化,但这样设备如果8:00后开机就无法完成初始化任务。

      还考虑设计每日开机上电后利用西门子PLC的OB100组织块(每次上电执行一次)来完成初始化,这样又会带来如果昨日不关机今日无法初始化的情况,还有一种班中停电后再开机、故障维修重新上电,OB100又重新初始化造成数据不准或丢失的情况。

       因此我们在设计程序时要多考虑现场场景的多样性,避免以上各种不可预见的情况的发生,我们可以利用每日日期数的自变量来实现每日数据初始化。

      以下为实例说明:

一、S7-1200

      1、 首先我们在DB数据块“DAY_DATA(DB16)”中建立一个名为#Day_Sign的int型变量用于记录日期数值;然后在编写初始化FC功能块时,首先利用RD_LOC_T函数读取实时日期及时间,为临时变量#day赋值为当日日期。

             #temp := RD_LOC_T(#now_time);
             #day := #now_time.DAY;

       2、设置两个条件;一为判断实时是否大于8:00,二为#day是否等于#Day_Sign。

             IF   #temp2 <= #temp1   AND   #temp1 < #temp3    AND     "DAY_DATA".Day_Sign <> #day THEN

       3、条件成立则数据初始化(此例为置零),并将#day赋值给#Day_Sign,使#Day_Sign等于当日日期。

            "OEE_data".OEE_day[#day].Unit1_Input := 0;
            "OEE_data".OEE_day[#day].Unit1_Output := 0;
            "OEE_data".OEE_day[#day].Unit2_Input := 0;
            "OEE_data".OEE_day[#day].Unit2_Output := 0;
            "DAY_DATA".Day_Sign := #day;

       4、数据初始化完成后,将#day赋值给#Day_Sign,使#Day_Sign等于当日日期,当日不再数据初始化,例程如下图。

 二、S7-300

       S7-300稍微麻烦点,涉及到”Date_And_Time"的数据类型及BCD转码。

      1、 编写初始化FC块时,首先利用"READ_CLK"函数读取实时日期及时间,读取到本FC块临时变量#datenow(数据类型为"Date_And_Time")。

           

       2、S7300的时间的数据类型为”Date_And_Time“,S7-300复杂数据类型之一,该数据类型以BCD码的形式存放日期时间信息,总长度为8个字节,分别存贮年、月、日、时、分、秒、毫秒、星期,我们把#datenow作为本FC块第一个临时变量,因此日期数以BCD码格式存储在LB2字节中,需要用到"BCD_I"函数将日期转换为int数据格式,然后判断实时是否大于8(即大于8:00),以及#day是否等于#Day_Sign。

           

        3、以上条件成立后,则开始数据初始化,我们可以用SFC20块或SFC21块来完成,SFC20块名称为  "BLKMOV”,功能为copy整块连续数据,如果数据初始化需要带非零原始值,SF20块就非常合适;SFC21块名称为 "FILL",功能是填充一段连续数据,此例中用SFC21将DB900.DBB44开始的连续20位BYTE全部置零;

        4、数据初始化完成后,将#day赋值给#Day_Sign,使#Day_Sign等于当日日期(本段程序略),当日不再数据初始化。

         

         通过以上两个例子,我们完成了每日数据初始化的任务,又有效避免了延迟开机、班中故障、停机等等对数据初始化造成的影响。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值