发布于 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;
。。。
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。