技术论坛

 【3】16位地址指针使用示例——从S7-300/400到s7-1500系列故事之三

返回主题列表
作者 主题
空果仁
侠圣

经验值: 4925
发帖数: 210
精华帖: 47
楼主    2020-03-09 13:25:56
主题:【3】16位地址指针使用示例——从S7-300/400到s7-1500系列故事之三 精华帖 

       说实在的,这个程序总感觉编起来特别别扭,首先,不能使用 UC    FC [XX]等程序块调用的指令,因为给出的应用是相同程序块的多次调用;其次是在程序块的接口参数中不能定以TIMER类型,例如控制对象使用FC编写,FC的接口参数如图3所示。

                                             


图3

  使用OB1调用赋值时,只能赋值常数而不能是变量,如图4所示。



图4

   所以FC的接口参数只能是INT类型变量,由于接口参数不能存储16指针,还必须通过temp临时变量进行中转,在FC中的编写的程序如图5所示。



图5

   FC中的程序非常简单,如果输入TRIG1为1,使能定时器T[#T1_TEMP1] 10秒定时,定时器T[#T1_TEMP1] 为1,然后将结果传送到输出OUT1,10秒后计时停止,OUT1复位,等于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。



图7

FC作为辅助功能,例如数据转换、控制对象调用前的预处理或者调用后的后期处理,也不支持批量调用,通常批量处理的是控制对象,控制对象使用FB编写,所以FB支持批量调用,可以作为数组的数据元素,参考图8。



图8

还是上面的应用,使用S7-1500,编写就变得非常简单,首先创建一个FB块,编写相关的控制程序,参考图9。


图9

然后在一个FB块中方循环调用该FB块,示例程序参考图10。



图10

可以看到使用S7-1500处理程序块的批量调用非常简单,并且数组的使用与编程语言无关。


----------------------------------------------------------------------------------------------------------

上一篇:【2】16位地址指针——从S7-300_400到S7-1500看变址寻址的改变系列故事之二

下一篇:【4】存储器32位地址指针——从S7-300_400到S7-1500看变址寻址的改变系列故事之四

汇总帖:技术Π活动故事、视频与案例分享汇总


来自西门工业子技术支持 高级专家
CoolCool的猪
至圣

经验值: 16693
发帖数: 1307
精华帖: 2
1楼    2020-03-10 14:17:28
主题:回复:从S7-300_400到S7-1500看变址寻址的改变-3

 1500还是更加??

同一个问题ID下,已经先回答此问题的人,如再参考我答案而修改自己答案的,就是王八蛋!
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。