从S7-300_400到S7-1500看变址寻址的改变?首先,不能使用UC???FC[XX]等程序块调用的指令,因为给出的应用是相同程 序块的多次调用;其次是在程序块的接口参数中不能定以TIMER类型,例如控制对象使用FC编写,FC的接口参数如图3所示。?图3使用 OB1调用赋值时,只能赋值常数而不能是变量,如图4所示。图4所以FC的接口参数只能是INT类型变量,由于接口参数不能存储16指针 ,还必须通过temp临时变量进行中转,在FC中的编写的程序如图5所示。图5FC中的程序非常简单,如果输入TRIG1为1,使能定时 器T[#T1_TEMP1]10秒定时,定时器T[#T1_TEMP1]为1,然后将结果传送到输出OUT1,10秒后计时停止,OU T1复位,等于TRIG1为1后,OUT1产生一个10秒的脉冲,相同程序,TRIG2为1后,OUT2产生一个5秒的脉冲。然后调用该 FC,参考图6。使用LOOP指令生成20次循环调用,每次使用的定时器号加1,这样FC的第一个定时器使用范围T1~T20,第二个定时 器T100~T120。触发位和输出位使用了32位指针,为了显示方便,在程序中被屏蔽。图6?程序编写的总体感觉:对所用指令都非常熟悉 的情况下,花费时间大概1个多小时,而且程序结果不清晰。如果不是后续还有类似的应用,直接调用FC二十遍反而更容易。这也是大多数工程 师没有体验到的,要么没有遇到,要么次数少就直接调用了,我见到最多调用过一百多编的,并且接口参数还比较多,真是累眼睛呀。基于对象的编 程方式,一个对象使用FB进行控制比较方便。如果将上面的FC换为FB会怎么样呢?大家都知道调用FB块需要生成实例数据块,循环调用就不 行了,不能只用一个实例数据块,所以只能使用UC或者CC调用,结果就是既没有接口参数也不生成实例数据块,只能使用全局变量进行数据交换 ,这样还使用什么FB块呀!总之就是繁琐。1.2?存储器16位地址指针-S7-1500的处理方式如果使用上面的编程方式,在S7- 1500中也可以实现,主要是移植的考虑。如果重新编程肯定有更简单的方式。S7-1500中批量的处理都使用数组的方式,S7-300/ 400中使用的定时器(T)和计数器(C)由于在S7-1500不能作为数组中的数据元素,所以就不推荐使用了,取而代之的是IEC定时器 和IEC计数器,它们可以在数据块中直接定义,参考图7。图7FC作为辅助功能,例如数据转换、控制对象调用前的预处理或者调用后的后期处 理,也不支持批量调用,通常批量处理的是控制对象,控制对象使用FB编写,所以FB支持批量调用,可以作为数组的数据元素,参考图8。图8 还是上面的应用,使用S7-1500,编写就变得非常简单,首先创建一个FB块,编写相关的控制程序,参考图9。图9然后在一个FB块中方 循环调用该FB块,示例程序参考图10。图10可以看到使用S7-1500处理程序块的批量调用非常简单,并且数组的使用与编程语言无关。 |
|