在自动化项目应用中,通常一个动作由(0_1或1_0)触发时包含两个动作点,即从起始点到结束点。如果我们的程序设计不当,现场执行元件可能会因扫描因素及硬件问题导致动作快速重复执行,这种情况存在很大风险。今天我们来讨论一下沿的开发与应用(上升沿、下降沿),如果有不足之处,请及时指出。
我们将使用TIA V16 博途开发环境来实现这一功能。
功能要求:程序尽量简洁
项目环境:TIA V16
为了满足博途仿真的要求,我们选择了支持v4.0版本的simatic cpu1215fc进行硬件组态。
硬件组态部分在此不再详细说明。
软件部分:
- 创建沿的函数功能块(FB1),并创建背景数据块。这里只需两行代码:
#R_T(CLK:=#Start); #OUT := #R_T.Q;
- 为创建的沿(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;
通过仿真,我们实用地实现了项目的设计与应用。
最终的沿的稳定采集是十分必要的,减少程序代码量,精益求精。
谢谢大家!
作者简介
蔡双春
电气工程师
剑控专家组成员