最近论坛有两个热点,一个关于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点只是一个代表,特例。
任何能有条件地(受控)实现某个“位变量”状态翻转,就能实现“启停”问题。
先不论方法的繁简,功能实现是第一步。
有了不同的方法,再比较他们的优缺点。当然优缺点也不是绝对的,适用场合不同而异。
有人“抬杠”再贴具体程序。