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

已锁定

yanxiao

版主

  • 帖子

    12206
  • 精华

    47
  • 被关注

    189

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

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

1728

42

2021-12-11 22:01:04

最近论坛有两个热点,一个关于L区使用的,另一个是“单按钮启停”实现方法的。

我开一贴,欢迎继续讨论。


1、半于L区


L区,是个“临时”变量区,“动态”分配。这个“动态”其实是假的,“临时”也时相对的。

Smart总共准备了13个L区,主程序独占一个L区,8级子程序,每一个调用深度分配一个固定的L区;

所有中断程序固定占一个,中断调用的三级子程序,每一级再固定各占一个。

有没有遗漏的?


主程序独占的L区,相当于主程序独占的一个静态存贮区。鉴于作用范围,仅主程序可访问;

一级调用子程序,共享同一个L区。如果一级调用的子程序间能“友好”协商,也可以把这个L区当作静态的、”非临时“变量使用。注意,这是200系列的特色,其它PLC请勿参照。

比如,有3个一级调用的不同的子程序,甲、乙、丙,达成“协议”,甲固定使用LB10-19,乙固定使用LB20-29,丙固定使用LB30-39,其它一级子程序决不使用这些保留空间。甲、乙、丙三个子程序完全可以把这些保留给自己的L区当作私有空间,“静态地”、“非临时”使用,说白点,就是可以在L区留下数值,跨周期使用。

各级L区,都可以参照上述方式,共享L区的“静态”、“非临时”空间。

前面有人偿试的自动分配背景数据,不就是利用了L区这个“假动态”,假临时的特性?


再来,L区的先赋值后使用的问题。

这个不是L区的特权,其它的M、V、I、Q等都是一样的原则。除了I区系统会帮你填写特定的值,其它区的初值,都须要你去赋予的。

赋初值,不一定是使用指令。像V区,可以下载数据块决定初值。

是不是不赋初值,程序一定会“出错”呢?

如果你心知肚明,程序一定不会“出错”,所谓出错,是你先糊涂或犯错。

所谓没有使用“IN/OUT”定义参数,造L变量没有初值,那是L的问题吗?不是。



2、关于“单按钮启停”

这其它是两个问题的复合,把它分开来,会看得更清楚。

前半个问题是“单按钮”,后半个问题是“启停”。


这里所谓的“单按钮”,其实指“一次按钮”动作。

当有人按下按钮时,可以提取若干信息:

一个是按下动作,一般用取前沿的方式获取按下动作;

一个是抬起动作,一般用取后沿的方式获取抬起动作;

一个是按下状态,直接取按钮状态即可;

再一个还可以提取按下的时间,可以利用按下的时间执行特定的功能。

在“单按钮”问题里面,取前沿就行了。


另一“启停”的问题,表现为对某一个“位变量”取反,改变其状态。Q点只是一个代表,特例。

任何能有条件地(受控)实现某个“位变量”状态翻转,就能实现“启停”问题。


先不论方法的繁简,功能实现是第一步。

有了不同的方法,再比较他们的优缺点。当然优缺点也不是绝对的,适用场合不同而异。



有人“抬杠”再贴具体程序。


我开一贴,欢迎抬扛(其实抬扛不是目的) 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9142条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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