在自动化项目应用中,通常一个动作由(0_1或1_0)触发时包含两个动作点,即从起始点到结束点。如果我们的程序设计不当,现场执行元件可能会因扫描因素及硬件问题导致动作快速重复执行,这种情况存在很大风险。今天我们来讨论一下沿的开发与应用(上升沿、下降沿),如果有不足之处,请及时指出。

我们将使用TIA V16 博途开发环境来实现这一功能。

功能要求:程序尽量简洁

项目环境:TIA V16

沿的实例化开发与应用

为了满足博途仿真的要求,我们选择了支持v4.0版本的simatic cpu1215fc进行硬件组态。

沿的实例化开发与应用

硬件组态部分在此不再详细说明。

软件部分:

  1. 创建沿的函数功能块(FB1),并创建背景数据块。这里只需两行代码:
#R_T(CLK:=#Start);
#OUT := #R_T.Q;
  1. 为创建的沿(R_trig)再创建一个函数功能块(FB2),充分利用嵌套功能减少系统DB块的占用,以缩短扫描周期,更快地使用沿。
//沿的多实例化
#R_0(Start:="data".in_put[0],     OUT=>"data".trig_o[0]);
#R_1(Start := "data".in_put[1],     OUT => "data".trig_o[1]);
#R_2(Start := "data".in_put[2],     OUT => "data".trig_o[2]);
#R_3(Start := "data".in_put[3],     OUT => "data".trig_o[3]);
#R_4(Start := "data".in_put[4],     OUT => "data".trig_o[4]);
#R_5(Start := "data".in_put[5],     OUT => "data".trig_o[5])

需要说明的是,由于沿的TRIG数据类型不支持局部或全局的陈列。

以下是沿触发应用于数据采集的防抖采集功能(FC):

IF "data".index_0 >= 1000 THEN    
    "data".index_0 := 0;
END_IF;
//上升沿触发数据入库并偏移(未抖动)
IF "data".trig_o[0] THEN    
    //计次    
    "data".INC := "data".INC + 1;    
    //赋值并入库并偏移    
    "data".in_port :="赋值入口";    
    "data".Static_1["data".index_0] := "data".in_port;    
    "data".index_0 := "data".index_0 + 1;
END_IF;

通过仿真,我们实用地实现了项目的设计与应用。

沿的实例化开发与应用

最终的沿的稳定采集是十分必要的,减少程序代码量,精益求精。

谢谢大家!

作者简介

蔡双春

电气工程师

剑控专家组成员