技术论坛

 S7-200Smart子程序编程思路之一

返回主题列表
作者 主题
holdkcsxyz
至圣

经验值:10665
发帖数:1478
精华帖:21
楼主    2022-08-05 10:21:07
主题:S7-200Smart子程序编程思路之一 精华帖 

最近做了一些PPT性质的工作,因此在论坛学习总结了子程序局部变量编程的八股式套路之一:


01:子程序接口只用一个类似函数指针接口变量(IN双字)用来组织子程序内部的数值型以及指针型或二级指针型数据,由于指针本身就是一个和系统位数相关的二进制数,这样无论多大的子程序做成库时基本都不用分配库内存,因为就一个函数指针式参数,当然指针偏移量的安全性也是要仔细考虑的-见间接寻址的帖子例程;


02:子程序的第一个网络把N个指针内的变量BKMOVE复制到临时局部变量L区变量(把全局变量全部传进来);


03:子程序的最后一个网络把N个临时局部变量L区变量BKMOVE复制到指针内的变量(把局部变量全部还回去);


04:最省事的话就像02/03讲的:全部传进来包括 IN/IN_OUT/OUT型;全部还回去也包括IN/IN_OUT/OUT型,比如传进来的L0.0=I0.0;用完后再还回去I0.0=L0.0(理论上这个还回去是多余的,因为I0.0不需要被赋值,但为了省事也没有关系),当然全局与局部的互传都要通过指针方式-见结尾杂谈的帖子例程;


05:想时序优越,空间紧凑可以人为有组织的区分 IN/IN_OUT/OUT型,分批传进来,分批还回去;(比如以前提到的把IN_OUT安排在IN之前就可以节省部分时间).


06:沿指令需要额外分配的全局变量缓存区,也一块传进来,一块还回去;


07:PLC基本是单线程的,因此多个复用子程序通过控制公共全局的FOR循环次数来实现;


08:时钟靠统一公共全局时钟变量,绝对时钟的话,最好安排六个字节时钟来实现-见结尾杂谈帖子例程;


09:子程序的L区可以分批传进来,分批还回去;只要还回去了又可以在同一个子程序内从LB0开始再用L区,几乎是无限的,或者全用指针实时传进来,实时还回去,除了大概8个字节的L区腾挪空间外,基本不占用L区;


10:稍多的数据想紧凑分配的话可以用二级(指针的指针)或多级指针来实现,指针比较大小可以节省一部分时序,以前延长输出的帖子有个采样取针和采样尾针比较的分享-见延长输出例程。


这些呆板套路本身不必被重视,或遵守,但当你暂时没有太好的方法时,也可以简单的套用.

post_jingbian_commit.aspx
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。