一本正经“消灭”双线圈问题

已锁定

yanxiao

版主

  • 帖子

    12164
  • 精华

    47
  • 被关注

    186

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

一本正经“消灭”双线圈问题

7061

61

2022-12-08 23:26:29

star star star

我目前还经常用单片机(MCU)设计一些简单的控制装置,程序是不带操作系统的,直接用C或汇编,对于IO节点,一般是直接操作,没有刻意设计缓存机制,因此,每一个对输出点(Q点)的操作均直接反应在外面。这种简单的输出结构,有双线圈问题吗?我的答案是没有。理由是,持双线圈观点的人认为,双线圈之所以成为问题,是因为“某些Q点操作”无法反应到外面,那么,象这种“直肠子”式的输出结构,不存在这个问题。


我不知道现在还有没“直肠子”输出结构的PLC,如果没有例外,假定PLC的输出Q点都是经过缓存,在某一个时间点才COPY到外界输出。


另外,双线圈问题仅限于输出Q点。虽然Q点和内部的M点等内存位变量没有本质区别,但把双线圈问题扩展到内存M类位变量,其“荒谬性”显而易见。


我使用的程序例子以Smart200的STL语言写成,尽量保持与LAD格式互相转换的结构,不习惯STL语言的,可以COP程序到STEP 7-MicroWIN SMART编程软件,STL显示模式入贴入,再转成LAD显示即可。


双线圈问题,我也不知道从何处入手“破解”。

先从例子入手吧。

假如要实现如下的逻辑式:

Q0.0=(I0.0 and I0.1) or I0.2


1、一步到位的写法:

网络1

LD     I0.0                        // 读取I0.0

A      I0.1                        // 完成 I0.0 and I0.1

O      I0.2                        // 上面的结果再 or I0.2

=      Q0.0                        // 输出


2、分两步,使用中间变量的写法

网络1

LD     I0.0                        // 读取I0.0

A      I0.1                        // 完成 I0.0 and I0.1

=      M0.0                        // 中间变量临时存贮

网络2

LD     M0.0                        // 读取 I0.0 and I0.1 的结果

O      I0.2                        // 再 or I0.2

=      Q0.0                        // 输出


3、分两步,“双线圈”写法

网络1

LD     I0.0                        // 读取I0.0

A      I0.1                        // 完成 I0.0 and I0.1

=      Q0.0                        // 中间变量临时存贮

网络2

LD     Q0.0                        // 读取 I0.0 and I0.1 的结果

O      I0.2                        // 再 or I0.2

=      Q0.0                        // 输出


这三种写法“几乎”等价,“完全”等价是有条件的。

最可能有人提出不等价的情况,是与中断程序的互动,比如中断程序需要读取Q0.0的状态,可能会读取到Q0.0的中间临时值,这个怎么解释呢?

我认为,中断程序与主程序的时序上的关系是不可预测的,如果中断程序和主程序共享变量值,始终有一个数据完整性的问题。如果没有考虑数据完整性,写的程序迟早会埋下定时炸弹。


插入中间变量M0.0,貌似绕开了“双线圈”问题。

我在开始就已经假定了,PLC的Q点是缓冲型的,只在特定的时间点把Q点值COPY到外界输出(有意使用立即输出指令的除外),在用户程序执行阶段,Q点并不与外界相连,此时的Q点是“自由”的。


强调程序“封装”的人,我想他会尽量减少程序对“环境”的影响。

使用Q0.0自身作中间临时变量,相比启用一个额外的M0.0,对环境影响更小,应该是更可取的使用方式。


暂时说这些。各位可以举各种例子来说明问题。

切记:举例子程序时,先说明程序要实现的功能。

无程序功能说明,讨论程序如何如何,无任何意义。


一本正经“消灭”双线圈问题 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9004条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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