1. 简介
写完《TIA博途与S7-1500编程指南》后,发现许多S7-1500编程方法和推荐使用的方式发生了变化,尤其是变址寻址方面。借着现在不能外出的机会,对比总结了一下S7-300/400和S7-1500变址寻址的使用方式和方法并与大家分享学习心得。
S7-300/400使用的是绝对地址寻址,即使使用符号名称也是为了便于程序的阅读;而S7-1500正好相反,底层只支持符号寻址(早期做了一个测试发现的),即使使用绝对地址寻址也必须带有符号名称,感觉就是为了S7-300/400程序的移植。
S7-300/400推荐的编程语言是STL,因为STL指令执行效率高并且支持变址寻址,而其它语言(除SCL,SCL是可选软件,必须购买)例如LAD、FBD是不支持的,所以我们经常可以看到进口设备的程序中,大部分的专有技术程序块FB、FC是STL编写的,原因是程序块的开发者使用地址寄存器和变址寻址功能灵活方便,程序块的通用性比较强,例如特殊的地址偏移功能,可以在不同的编程环境中调用(直接调用或者使用多重背景),而一些连锁程序是使用LAD编写的,这部分程序通常是由程序块的使用者编写,没有特殊的要求。所以一套程序中既有STL又有LAD,这样混合的编程方式比较常见。S7-1500中使用的是符号寻址,推荐使用SCL和LAD方式编程(慢慢忘掉STL吧,STL使用的状态字、DB和地址寄存器在S7-1500中都是虚拟的,我认为都是为了S7-300/400程序移植到S7-1500中而存在的)。
变址寻址主要的应用就是地址循环迭代,从而完成批量处理,如果S7-300/400支持数组的“index”是变量的寻址方式(SCL支持,但是后台程序中也是使用大量的指针进行转换的,所以S7-300/400系统底层不支持这种方式),那么编程就容易了,所以S7-300/400只能使用变化地址指针的方式迭代地址。现在S7-1500系统支持可变“index”的数组寻址方式,数组长度也可以是变化的,所以相应的一些使用方式就会发生变化,另外推荐的“UDT”和“Variant”数据类型也更适合面向对象的程序开发。
好了,为了清楚地搞清变址寻址方式,我们从头开始介绍和探讨。首先看一下哪些存储区(没有使用地址区的原因就是还包括程序块的寻址)可以进行间接寻址,通常的情况下可以绝对地址寻址的都可以进行进间接寻址,可以绝对地址寻址的区域参考表1。
表1 绝对地址寻址区域
绝对地址访问DB区,可以直接引用数据块的号码,例如DB1.DBX120.0,但是间接寻址的方式只能访问数据块中的数据区,必须使用OPN指令打开。这也是不想参考别人程序的原因(不好看明白),在程序中都是DBW[XX]这样的引用,都不知道打开的是哪一个数据块。为了两个数据块间的运算,使用DI作为第二个打开的数据块,DI可以是背景数据块,但是最常用的还是作为第二个打开的数据块了。
这些区域的变址寻址都是使用指针完成的,S7-300/400的指针类型参考图1,指针的类型比较多,对应者不同的应用,指针大概按照存储指针的方式和参数类型进行划分。指针类型多而且还必须使用STL调用,这也是大家常常抱怨的地方,这也没有办法,主要是应用的种类太多了,等介绍完了以后在回头看这样的划分,这也可能是最好的了。
图1 S7-300/400指针类型
------------------------------------------------------------------------------------------------------------
下一篇:【2】16位地址指针——从S7-300_400到S7-1500看变址寻址的改变系列故事之二
汇总帖:技术Π活动故事、视频与案例分享汇总