回复:请问一下大家,在一个FB块 传递i DB_BLOCK 数据类型 问题?

老学童

  • 帖子

    765
  • 精华

    32
  • 被关注

    64

论坛等级:奇侠

注册时间:2011-06-22

钻石 钻石 如何晋级?

发布于 2014-08-28 14:43:02

3楼

楼主,如果我对你的问题,即“假设 两个数据块的实参是同一个DB块”没有理解错的话,你在同一个FB中定义了2个形参
Db_Block1: BLOCK_DB
Db_Block2: BLOCK_DB
而在调用FB时在2个形参上赋值同一个DB块,对吗?
我不了解你为什么要定义2个BLOCK_DB类型的形参,我见过的这种情况是编写的FB用于某个机构的主、从驱动控制,因此,主、从驱动分别用2个DB,但是,假如要用同一个FB控制“非主从”控制的机构,则可以在2个形参上给相同的DB.
任何程序都是根据工艺来编制的,不是所有FB的BLOCK_DB类型的形参都可以“是同一个DB块”,关键看编程的目的是什么。
另外,在FB中必须有2套不同的临时变量分别对应2个DB中的数据,这样才不会产生“歧义”。
例如:
。。。
VAR_TEMP
// ASSE 1
E_MotOK_1 : BOOL;
E_MS_1 : BOOL;
E_TCMinus_1 : BOOL;
E_TCPlus_1 : BOOL;
E_ExactFine_1 : BOOL;
E_Stat_1 : BOOL;
E_PositContr_1 : BOOL;
E_SpeedContr_1 : BOOL;
E_TravRequ_1 : BOOL;
E_PulseEnable_1 : BOOL;
E_RefSyn1_1: BOOL;
E_RefSyn2_1: BOOL;
E_GantCOLimit_1: BOOL;
E_GantWarn_1: BOOL;
E_SysRunStart_1: BOOL;
E_GantGroupSyn_1: BOOL;
E_GantLeadAxis_1: BOOL;
E_GantAxis_1: BOOL;


A_PosMeas1_1 : BOOL;
A_PosMeas2_1 : BOOL;
A_PulseEnable_1 : BOOL;
A_ORactive_1 : BOOL;
A_ContrEnable_1 : BOOL;
A_FDSpStop_1 : BOOL;
A_FD_OR_1 : BYTE;
A_StartGanSynRun_1 : BOOL;

// ASSE 2
E_MotOK_2 : BOOL;
E_MS_2 : BOOL;
E_TCMinus_2 : BOOL;
E_TCPlus_2 : BOOL;
E_ExactFine_2 : BOOL;
E_Stat_2 : BOOL;
E_PositContr_2 : BOOL;
E_SpeedContr_2 : BOOL;
E_TravRequ_2 : BOOL;
E_PulseEnable_2 : BOOL;
E_RefSyn1_2: BOOL;
E_RefSyn2_2: BOOL;
E_GantCOLimit_2: BOOL;
E_GantWarn_2: BOOL;
E_SysRunStart_2: BOOL;
E_GantGroupSyn_2: BOOL;
E_GantLeadAxis_2: BOOL;
E_GantAxis_2: BOOL;

A_PosMeas1_2 : BOOL;
A_PosMeas2_2 : BOOL;
A_PulseEnable_2 : BOOL;
A_ORactive_2 : BOOL;
A_ContrEnable_2 : BOOL;
A_FDSpStop_2 : BOOL;
A_FD_OR_2 : BYTE;
END_VAR
。。。
后缀为‘_1’的变量保存第1个数据块中的值,后缀为‘_2’的变量保存第2个数据块中的值。
。。。
OPN DBin1;
A DBX93.5; = E_MotOK_1;
A DBX96.7; = E_MS_1;
A DBX64.6; = E_TCMinus_1;
A DBX64.7; = E_TCPlus_1;
A DBX60.4; = E_RefSyn1_1;
A DBX60.5; = E_RefSyn2_1;
A DBX60.7; = E_ExactFine_1;
A DBX61.4; = E_Stat_1;
A DBX61.5; = E_PositContr_1;
A DBX61.6; = E_SpeedContr_1;
A DBX61.0; = E_TravRequ_1;
A DBX93.7; = E_PulseEnable_1;
A DBX101.2;= E_GantCOLimit_1;
A DBX101.3;= E_GantWarn_1;
A DBX101.4;= E_SysRunStart_1;
A DBX101.5;= E_GantGroupSyn_1;
A DBX101.6;= E_GantLeadAxis_1;
A DBX101.7;= E_GantAxis_1;

OPN DBin2;
A DBX93.5; = E_MotOK_2;
A DBX96.7; = E_MS_2;
A DBX64.6; = E_TCMinus_2;
A DBX64.7; = E_TCPlus_2;
A DBX60.4; = E_RefSyn1_2;
A DBX60.5; = E_RefSyn2_2;
A DBX60.7; = E_ExactFine_2;
A DBX61.4; = E_Stat_2;
A DBX61.5; = E_PositContr_2;
A DBX61.6; = E_SpeedContr_2;
A DBX61.0; = E_TravRequ_2;
A DBX93.7; = E_PulseEnable_2;
A DBX101.2;= E_GantCOLimit_2;
A DBX101.3;= E_GantWarn_2;
A DBX101.4;= E_SysRunStart_2;
A DBX101.5;= E_GantGroupSyn_2;
A DBX101.6;= E_GantLeadAxis_2;
A DBX101.7;= E_GantAxis_2;
。。。
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54621条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。