首页 理论教育 PAC编程基础指南单脉冲指令用法

PAC编程基础指南单脉冲指令用法

时间:2023-10-26 理论教育 版权反馈
【摘要】:还有两条ONS之后拓展的单脉冲指令,这就是前沿触发指令OSR和后沿触发指令OSF,跟ONS指令不一样的是,它们是输出指令。指令的输出位类似ONS产生的单脉冲,存在一个扫描周期,供后面的梯级逻辑使用,指令存储位的作用则跟ONS指令完全一样。

PAC编程基础指南单脉冲指令用法

ONS指令又称为一次性扫描有效指令,属于输入指令类型,系统将识别并放置在梯级的左边,ONS指令一般不会单独使用,总是跟在梯级条件后面,将前面梯级条件的宽脉冲变为ONS指令后面梯级条件的单脉冲,以确保输出指令只执行一次。其波形如图4-10所示。

ONS指令的编写,要求指定一个位地址作为ONS的存储位,用来记录本梯级条件已经一次扫描有效,自第一次执行完毕后,将存储位设置为1,每次梯级扫描将检查此位,当检查存储位为1,则令梯级条件不成立,不会执行后面的输出指令。存储位的复位,靠梯级条件的后沿执行,以准备下一次梯级条件的到来。

还有两条ONS之后拓展的单脉冲指令,这就是前沿触发指令OSR和后沿触发指令OSF,跟ONS指令不一样的是,它们是输出指令。指令的输出位类似ONS产生的单脉冲,存在一个扫描周期,供后面的梯级逻辑使用,指令存储位的作用则跟ONS指令完全一样。

如图4-11或图4-12所示的编程,当宽脉冲的梯级条件使能OSR指令,在梯级条件的前沿触发一个输出脉冲,这个脉冲将用于某一个需要脉冲触发的输出指令的梯级条件,同时存储位Push_Storrage置位,保存已触发状态,以确保只能执行一次,在OSR指令的梯级条件的后沿,即梯级条件消失时,存储位Push_Storage被复位,准备下一次的触发动作。

978-7-111-36030-8-Chapter04-10.jpg

图4-10 ONS指令的波形

978-7-111-36030-8-Chapter04-11.jpg

图4-11 前沿触发脉冲

978-7-111-36030-8-Chapter04-12.jpg

图4-12 前沿触发脉冲

如图4-13或图4-14所示的编程,当宽脉冲梯级条件Press使能OSF指令,在梯级条件的后沿,触发一个输出脉冲,这个脉冲将用于某一个需要脉冲触发的输出指令的梯级条件,同时存储位Press_Storage置位,保存已触发状态,以确保只能执行一次。在OSR指令的梯级条件的前沿,即新的梯级条件的到来,存储位Press_Storage被复位,准备下一次的触发动作。

OSR指令和OSF指令跟ONS指令有相似之处,但也有它们自己的特点,它们在宽脉冲的前沿和后沿触发,如果试图精确捕获宽脉冲的前沿触发时间点或后沿触发时间点,这两条指令就发挥作用了,这在现场实际中可能非常有用。

ONS指令和OSR/OSF指令有什么不同之处呢?ONS紧跟在一个梯级条件之后,专用来限制这个梯级条件的执行,比如说确保输出指令只执行一次。OSR和OSF指令却能够产生一个独立的输出单脉冲,这个输出单脉冲标签可以被多个梯级引用,在同一个例程中的梯级引用是可靠的,如果在例程之外引用,会有不确定性,因为这个脉冲只能保持一个扫描周期,例程之间的调用,特别是条件式调用,是难以保证在一个扫描周期内执行动作的同步。

一再强调的不可重复使用数据标签的提醒在这里同样重要,ONS指令、OSR指令和OSF指令的存储位的数据标签是不可重复使用的,否则会有不可预料的后果。存储位记录了对应指令执行曾经一次扫描有效的状态,只有梯级条件的后沿(ONS和OSR)和前沿(OSF)才能令它复位,共用数据标签将使得记录的状态混乱,从而引起执行动作的混乱。

尽管我们是如此地强调,ONS指令必须紧跟在一个梯级条件后面,作为这个梯级条件执行的限制,如果有一天你看到有个例程的梯级逻辑编程如图4-15所示,就会感到迷惑了。这个梯级并不是不能执行,它会执行一次,这相当于梯级条件永远成立,但是它自己这个永远成立的梯级条件是没有后沿去复位存储位Reset_ONS的。

也许不远处的角落就藏着一个对它的解锁操作,如图4-16所示,在某个特定的条件下来执行这个复位,这样的编程就颇有点技巧了,只有对ONS指令的本质很清楚才能识破这点,我们可以通过搜索功能来找到这个隐藏着的复位。(www.xing528.com)

978-7-111-36030-8-Chapter04-13.jpg

图4-13 后沿触发脉冲

978-7-111-36030-8-Chapter04-14.jpg

图4-14 后沿触发脉冲

978-7-111-36030-8-Chapter04-15.jpg

图4-15 无条件ONS指令

978-7-111-36030-8-Chapter04-16.jpg

图4-16 ONS复位

如图4-17所示是一个牵强附会的编程,但这个实验让我们看清了ONS指令的实际作用,一般不建议你编写这样的梯级逻辑,我们还有更为直截了当的做法,除非你真的有一个奇怪的需求被迫如此。

还有,你不要指望预扫描会帮助一个无条件梯级的ONS指令的存储位复位,为防止误触发,规定ONS指令的预扫描是将存储位置位的。

978-7-111-36030-8-Chapter04-17.jpg

图4-17 计数梯级逻辑

考虑到内存使用的节约,ONS指令的存储位又没有特殊的描述意义,通常会让多个ONS指令共同使用一个双整字,如StoreONS.0是这个字的0位,用来做一条ONS指令的存储位,这样一个双整字就可以满足32条ONS指令的存储。稍加留心,会发现以上这个实例中OSR指令和OSF指令的标签是相当的耗内存的,作为单独标签的每个布尔量都消耗了一个数据基本单元,如图4-18所示。好好规划的话,我们可以让OSR指令和OSF指令存储位共用双整字标签,如同ONS指令做法一样,而每条指令的脉冲输出位完全可以是各自被控对象的用户自定义标签中的一个布尔量子元素。

978-7-111-36030-8-Chapter04-18.jpg

图4-18 单独标签的内存消耗

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈