将功能块转换为用户自定义功能以节省程序步骤
这些功能的主要目的是简化功能(FUN)替换功能块(FB)的操作。单独子例行程序中的多个FB实例替换为某个子例行程序中的某个功能。
功能块 |
转换后的功能 |
并非所有的Panasonic指令都可以在一个常用功能中使用。不能在一个常用功能中使用的指令示例:
一些高速计数器指令,如F166_HighSpeedCounter_Set、F165_HighSpeedCounter_Cam
一些定位指令,如F166_PulseOutput_Set、F171_PulseOutput_Trapezoidal
必须仔细检查此项。
需要的程序代码少得多
需要的中继(R)少得多
可在使用内存DUT数组的循环中使用
需要额外的开发和维护工作
必须很仔细地测试转换后的功能
需要用户执行更多操作
监控更加困难,因为您没有可监控的实例,只监控上一个调用
可能需要更多数据寄存器(DT)
PLC性能降低,扫描时间增加
与定时器FB相比,定时器功能的行为可能略有不同。
很仔细地测试新功能的行为是否与FB的行为相对应,特别是在多次调用新功能时。
应仅在确实需要时使用功能而不是功能块。
应仅在确实需要时尽量使用功能而不是功能块。
很仔细地分析应转换哪个功能块,以最小的工作量获得最大的效益。
决定是否应转换某功能块的主要标准是:该功能块多久调用一次?该功能块需要多少步骤?
这是计算可以节省多少程序代码步的公式。
当前情况如下:
一个给定的功能块
调用X次
使用Y步=>总步数:X*Y步
使用TON、SR、脉冲标志
给定的FB可以替换为需要以下步数的功能:
调用X次来复制两次内存DUT数据的额外步数,即大约X*2*7步(例如对于两个FP10_BKMV)
Y*一个常用功能调用的2步(假设有一些额外步骤)
以下项的常用调用:
TON_FUN使用xxx步
SR_FUN使用xxx步
R_TRIG_FUN使用xxx步
此计算示例只给出大概数字。
一个给定的功能块
调用30次
使用750步=>总步数:30*750步=22500步
使用TON、SR、脉冲标志
给定的FB可以替换为需要以下步数的功能:
调用30次来复制两次内存DUT数据的额外步数,即30*2*7步=420步(例如对于两个FP10_BKMV)
750*一个常用功能调用的2步=1500步(假设有一些额外的步骤)
以下项的常用调用:
TON_FUN使用200步
SR_FUN使用35步
R_TRIG_FUN使用35步
总步数:420步+1500步+200步+35步+35步=2190步
结果:使用此功能节省了大约22500步-2190步=20310步。
从用户功能块XXX转换为功能XXX_FUN的过程
建议保留命名约定。
假设:具有数据类型XXX_FUN_INSTANCE_DUT的VAR_IN_OUTdutXXX的函数XXX在所有示例中使用
操作 |
原始的编程示例 |
转换后的编程示例 |
---|---|---|
调用 |
||
FB POU头 |
FUN POU头 |
|
DUT XXX_FUN_INSTANCE_DUT |
||
置位(S) 复位(R) |
||
KEEP |
||
条件赋值,计算 |
||
增加/减少变量值 |
||
脉冲标志 |
||
在功能末尾:如果需要,将一些内存变量赋给相应的输出变量: |
||
SR |
||
RS |
||
TON |
||
TM_100ms |
假设:具有数据类型XXX_FUN_INSTANCE_DUT的VAR_IN_OUTdutXXX的函数XXX在所有示例中使用
操作 |
原始的编程示例 |
转换后的编程示例 |
---|---|---|
置位(S) 复位(R) |
|
|
KEEP |
|
|
条件赋值,计算 |
|
|
增加/减少变量值 |
|
|
脉冲标志 |
|
|
在功能末尾:如果需要,将一些内存变量赋给相应的输出变量: |
|
|
SR |
|
|
RS |
|
|
TON |
|
|
TM_100ms |
|
|