首页 理论教育 FB在多重数据块中的寻址

FB在多重数据块中的寻址

时间:2023-06-17 理论教育 版权反馈
【摘要】:如果在FB1、FB2中使用POINTER或ANY类型地址指针进行拆分时,如果不考虑在多重背景数据块DB中的位置,将会造成错误,例如在FB1中定义输入接口参数FB1_POS,数据类型为POINTER,FB1中的程序如下:同样在FB2中定义输入接口参数FB2_POS,数据类型为POINTER,在FB2中的程序如下:在FB10中,将FB1、FB2作为静态变量使用,见表8-6所示。在FB1、FB2程序中,没有考虑接口数据区在多重背景数据块的偏移地址而造成地址冲突。

FB在多重数据块中的寻址

在一些编程应用中,一些功能计算或包含部分工艺的函数或函数块往往由开发人员编写,例如编写FB,通常情况下不会考虑在程序中的调用次序。工程人员在程序中调用这些已经开发完成的FB,实现整个的控制任务。在一个FB中,将实现固定功能的FB作为静态变量使用,生成多重背景数据块DB,每个实现固定功能FB的接口参数都会占用多重背景数据块的空间,如图8-5所示。

978-7-111-28718-6-Chapter08-45.jpg

图8-5 生成多重背景数据块

在FB10中,将具有独立控制功能的FB1、FB2作为静态变量调用,FB10在OB1中调用生成背景数据块DB、DB10,在背景数据块中包含FB10、FB1、FB2的接口参数,每个FB块接口参数在DB10中的位置与在FB10静态变量中的次序有关。

如果在FB1、FB2中使用POINTER或ANY类型地址指针进行拆分时,如果不考虑在多重背景数据块DB中的位置,将会造成错误,例如在FB1中定义输入接口参数FB1_POS,数据类型为POINTER,FB1中的程序如下:

978-7-111-28718-6-Chapter08-46.jpg

同样在FB2中定义输入接口参数FB2_POS,数据类型为POINTER,在FB2中的程序如下:

978-7-111-28718-6-Chapter08-47.jpg

在FB10中,将FB1、FB2作为静态变量使用,见表8-6所示。

8-6 FB10的接口参数

978-7-111-28718-6-Chapter08-48.jpg(www.xing528.com)

FB10的程序如下:

978-7-111-28718-6-Chapter08-49.jpg

978-7-111-28718-6-Chapter08-50.jpg

在OB1中,调用FB10,并生成DB10,程序如下:

978-7-111-28718-6-Chapter08-51.jpg

希望将P#100.0赋值到MD20中,将P#120.0赋值到MD24中,但程序执行后MD20和MD24存储的地址指针同为P#M100.0,这是由于FB1中的指令LP##FB1_POS与FB2中的指令LP##FB2_POS同时指向多重背景数据块DB10中FB1接口数据区的首地址DB10.DBX0.0,以地址DB10.DBX0.0开始的POINTER指针变量存储的地址指针为P#M100.0;FB2接口数据区在DB10的首地址为DB10.DBX6.0,以地址DB10.DBX6.0开始的POINTER指针变量存储的地址指针为P#M120.0。在FB1、FB2程序中,没有考虑接口数据区在多重背景数据块的偏移地址而造成地址冲突。系统将每一个FB接口数据区在多重背景数据块中的偏移地址自动存储于地址寄存器AR2中,利用TAR2功能可以实现地址偏移。在FB1中实现地址自动偏移的示例程序如下:

978-7-111-28718-6-Chapter08-52.jpg

在FB2中,按上述的方法编写程序,将P#M120.0装载到MD20中,这样FB1、FB2在FB10中作为参数的次序没有限制。

提示:

使用间接寻址编程灵活、节省程序空间,但是不容易入门。在实际编程应用中,可选择比较简单、容易上手、易于监控的编程方法。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈