回复:我开一贴,欢迎抬扛(其实抬扛不是目的)

已锁定

Zaxife

  • 帖子

    2450
  • 精华

    31
  • 被关注

    78

论坛等级:至圣

注册时间:2008-07-24

普通 普通 如何晋级?

发布于 2021-12-12 09:49:19

11楼

emmmmmmm.....

如果学过C语言编程,L区就类似函数的堆栈(调用函数时先申请一片连续的RAM、退出函数后释放这片RAM),用来作为传递数据的。比如调用子程序时通过L区传递参数,就可以一个子程序无限次使用,传递参数都不会出错。使用L区传递参数是为了规范化编程、提升程序执行效率、节省ROM......好处很多。

Smart的L区,在调用子程序时,就先把实参、形参MOVE到对应的L区,然后子程序内部的其他L区不是形参?实参?那么编译器是不知道从哪里个V?M?C?T?等内存获取值的,所以子程序内部使用的其他L区就是上一个子程序退出时的值。所以,很多人都强调L区先赋值再使用,这样就可以避免L区找不到家的问题,程序就不会出错。

子程序执行完成后在退出子程序前,再把INOUT、OUT的L区数据MOVE到对应的V?M?C?T....

举个栗子,L区就是一个砧板,厨师不管且什么菜都把菜先从篮子里拿到砧板上来切,切完后还是放回篮子里。为了赶时间,懒的厨师就懒得洗砧板,这样会导致切出来的菜相互串味(L区没赋值导致运算结果错误)。良心的厨师在每次切菜前?后都洗砧板(L区先赋值),切出来的菜就不会相互串味。


至于单按钮启停?这个极少用到,讨论也没啥意思。我想说的是,单按钮启停你虽然方便了正常启停,但是故障停止就会比较麻烦,所以这种非严谨逻辑能不用就不用,估计不知道是哪个外行绑架程序员的恶果吧。

启停控制逻辑,还是RS更香。



最后,扯一下题外话。

SMART的底层编译器估计还是用S7 200的编译器,这个编译器是上个世纪九十年代的编译器了,就类似汇编编译器而已,没有数据结构、没有类,所以STEP7、博途那种数据结构、FB静态数据高级功能是没有的。如果硬要用SMART来实现博途那样的高级编程方式,会比直接使用博途付出更大的代价、更多的时间、更容易出错....

形象的来说,就是想用C语言的编程方式来写汇编代码,这种用高级语言编程思想来写汇编代码的编程方式是个正常程序员都要造~反的。

算了,就扯这么多了。

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9433条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

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