大家都知道,在STEP7中建立FB功能块设置参数地址时,软件自动按照IN、OUT、IN-OUT的顺序分配背景数据块的地址。我在做程序标准功能块的过程中,希望直接使用FB的背景数据块作为上位机接口地址,这样上位机建标签的时候只需要更改DB编号就可以复制同样的设备。但是作为一个标准程序一方面要预留一定的扩展空间,为以后增加功能参数使用,另一方面又希望以后扩展功能的时候不能影响其他已经存在的参数地址,这就与STEP7自动分配地址的机制有冲突,除非一开始就预留足够的备用参数,否则以后增加参数是会改变后面参数的地址。
针对这个需求我还在找答案板块求助过,但是没有得到满意的答案。经过自己几天的琢磨和实验,算是有了两个还算满意的解决方式,分享出来供大家讨论,也欢迎各位大咖分享自己的使用经验。
第一种解决方式当然就是为后续扩展预留地址(不是预留参数,因为这样会在FB块里显示很多当前无用的参数引脚)原理就是利用地址分配时BYTE、INT、DINT、REAL等参数地址总是从偶数字节开始,而我为后续扩展预留的参数主要是BOOL类型,当需要预留地址时就在BOOL变量后面插入一个INT类型变量(其他非bool类型均可),这样前面奇数字节就被空下来供后续扩展使用比如:
IN1 BOOL 0.0
IN2 BOOL 0.1
IN3 INT 2
这样0.2~1.7之间的地址都可以预留下来供以后扩展使用。这种方式在以后扩展bool变量时可满足要求,但是扩展其他类型变量时就需要再合理排列上位需要读写的参数顺序才能保证新增参数不会影响其他参数的地址。
第二种方式就是使用UDT自定义数据结构,将需要上位机读写的变量编辑成UDT在FB的IN-OUT参数中调用,并使用UDT建立上位机接口数据DB,通过合理定义UDT的参数顺序,并在定义上位机接口DB时预留一定的扩展地址,可保证后续扩展参数时不影响其他参数地址。此方法的缺点是UDT做修改时会影响到FB接口定义和上位接口DB的结构,都需要重新验证或者重新编辑下载。
总之上位机绝对地址寻址的方式在实现标准化数据接口方面比标签寻址的方式麻烦不少,各位大咖有什么使用心得欢迎分享。