S7-300和S7-400的梯形图(LAD)编程供S7程序员、操作员以及维护/维修人员使用。S7-300和S7-400的梯形图(LAD)编程需要编程人员具有自动化技术的常规知识、具有计算机应用能力和其它类似于PC(例如,编程设备)的、使用MS Windows 2000专业版或MS Windows XP专业版操作系统的工作设备的知识和熟悉S7程序理论,这样才能轻松进行西门子S7-300和S7-400编程,完成各种要求的工业自动化控制。
1.1 位逻辑指令概述
位逻辑指令使用1和0两个数字。这两个数字组成了名为二进制数字系统基础。将1和0两个数字称作二进制数字或位。在触点和线圈领域中,1表示激活或激励状态,0表示未激活或未激励状态。
位逻辑指令对1和0信号状态加以解释,并按照布尔逻辑组合它们。这些组合会产生由1或0组成的结果,称作“逻辑运算结果”(RLO)。
由位逻辑指令触发的逻辑运算可以执行各种功能。可以执行下列功能的位逻辑指令:
·---| |--- 常开触点(地址)
·---(SAVE) 将RLO的状态保存到BR
·---|/|--- 常闭触点(地址)
·XOR 逻辑“异或”
·—( ) 输出线圈
·---(#)--- 中间输出
·---|NOT|--- 能流取反
RLO为1时将触发下列指令:
·---(S) 置位线圈
·---(R) 重置线圈
·SR 复位优先型SR双稳态触发器
·RS 置位优先型RS双稳态触发器
其它指令将对上升沿或下降沿过渡做出反应,执行下列功能:
·---( N )--- RLO负跳沿检测
·---( P )--- RLO正跳沿检测
·NEG 地址下降沿检测
·POS 地址上升沿检测
·立即读取
·立即写入
1.2 ---| |--- 常开触点(地址)
符号:<address>
---| |---
参数 | 数据类型 | 内存区域 | 说明 |
<address> | BOOL | I、Q、M、L、D、T、C |
选中的位 |
状态字:
BR | CC 1 | CC 0 | OV | OS | OR | STA | RLO | /FC | |
写: | - | - | - | - | - | X | X | X | 1 |
满足下列条件之一时,将会通过能流:①输入端I0.0和I0.1的信号状态为“1”时;②或输入端I0.2的信号状态为“1”时1
1.3 ---|/|--- 常闭触点(地址)
符号:<address>
---|/|---
参数 | 数据类型 | 内存区域 | 说明 |
<address> | BOOL | I、Q、M、L、D、T、C | 选中的位 |
状态字:
BR | CC 1 | CC 0 | OV | OS | OR | STA | RLO | /FC | |
写: | - | - | - | - | - | X | X | X | 1 |
满足下列条件之一时,将会通过能流:①输入端I0.0和I0.1的信号状态为“1”时;②或输入端I0.2的信号状态为“1”时。
1.4 XOR 逻辑“异或”
对于XOR函数,必须按以下所示创建由常开触点和常闭触点组成的程序段。
符号:
说明:XOR(逻辑“异或”)如果两个指定位的信号状态不同,则创建状态为“1”的RLO。
实例:
如果(I0.0=“0”且I0.1=“1”)或者(I0.0=“1”且I0.1=“0”),输出Q4.0将是“1”。
1.5 --|NOT|-- 能流取反
符号:---|NOT|---
说明:---|NOT|--- (能流取反)取反RLO位。
状态字:
BR | CC 1 | CC 0 | OV | OS | OR | STA | RLO | /FC | |
写: | - | - | - | - | - | - | 1 | X | - |
满足下列条件之一时,输出端Q4.0的信号状态将是“0”:①输入端I0.0的信号状态为“1”时;②或当输入端I0.1和I0.2的信号状态为“1”时。
1.6 ---( ) 输出线圈
符号:<address>
---( )
参数 | 数据类型 | 内存区域 | 说明 |
<address> | BOOL | I、Q、M、L、D |
分配位 |
MCR (主控继电器)依存关系
只有在将输出线圈置于激活的MCR区内时,才会激活MCR依存关系。在激活的MCR区内,如果MCR处于接通状态并且输出线圈有能流通过,将把寻址位设置为能流的当前状态。如果MCR处于断开状态,则无论能流状态如何,都会将逻辑“0”写入指定地址。
状态字:
BR | CC 1 | CC 0 | OV | OS | OR | STA | RLO | /FC | |
写: | - | - | - | - | - | 0 | X | - | 0 |
满足下列条件之一时,输出端Q4.0的信号状态将是“1”:
①输入端I0.0和I0.1的信号状态为“1”时
②或输入端I0.2的信号状态为“0”时。
满足下列条件之一时,输出端Q4.1的信号状态将是“1”:
①输入端I0.0和I0.1的信号状态为“1”时
②或输入端I0.2的信号状态为“0”、输入端I0.3的信号状态为“1”时
如果实例梯级在激活的MCR区之内:
①MCR处于接通状态时,将按照上述能流状态置位Q4.0和Q4.1。
②MCR处于断开状态(=0)时,无论是否有能流通过,都将Q4.0和Q4.1复位为0。
1.7 ---(#)--- 中间输出
符号:<address>
---(#)---
参数 | 数据类型 | 内存区域 | 说明 |
<address> | BOOL | I、Q、M、*L、D | 分配位 |
说明:---(#)--- (中间输出)是中间分配单元,它将RLO位状态(能流状态)保存到指定<地址>。中间输出单元保存前面分支单元的逻辑结果。以串联方式与其它触点连接时,可以像插入触点那样插入---(#)---不能将---(#)---单元连接到电源轨道、直接连接在分支连接的后面或连接在分支的尾部。使用---|NOT|---(能流取反)单元可以创建取反---(#)---。
MCR (主控继电器)依存关系
只有在将中间输出线圈置于激活的MCR区内时,才会激活MCR依存关系。在激活的MCR区内,如果MCR处于接通状态并且中间输出线圈有能流通过,将把寻址位设置为能流的当前状态。如果MCR处于断开状态,则无论能流状态如何,都会将逻辑“0”写入指定地址。
状态字:
BR | CC 1 | CC 0 | OV | OS | OR | STA | RLO | /FC | |
写: | - | - | - | - | - | 0 | X | - | 1 |
实例:
1.8 ---(R) 复位线圈
符号:<address>
---(R)
参数 | 数据类型 | 内存区域 | 说明 |
<address> | BOOL | I、Q、M、L、D、T、C | 复位 |
MCR (主控继电器)依存关系
只有将复位线圈置于激活的MCR区内时,才会激活MCR依存。在激活的MCR区内,如果MCR处于接通状态并且复位线圈有能流通过,将把寻址位状态复位为“0”。如果MCR处于断开状态,则无论能流状态如何,单元指定地址的当前状态均保持不变。
状态字:
BR | CC 1 | CC 0 | OV | OS | OR | STA | RLO | /FC | |
写: | - | - | - | - | - | 0 | X | - | 0 |
满足下列条件之一时,将把输出端Q4.0的信号状态复位为“0”:
①输入端I0.0和I0.1的信号状态为“1”时
②或输入端I0.2的信号状态为“0”时。
③如果RLO为“0”,输出端Q4.0的信号状态将保持不变。
满足下列条件时才会复位定时器T1的信号状态:输入端I0.3的信号状态为“1”时。
满足下列条件时才会复位计数器C1的信号状态:输入端I0.4的信号状态为“1”时。
如果实例梯级在激活的MCR区之内:
①MCR处于接通状态时,将按以上所述复位Q4.0、T1和C1。
②MCR处于断开状态时,无论RLO的状态(能流状态)如何,Q4.0、T1和C1的状态均保持不变。
1.9 ---(S) 置位线圈
符号:<address>
---(S)
参数 | 数据类型 | 内存区域 | 说明 |
<address> | BOOL | I、Q、M、L、D | 置位 |
MCR (主控继电器)依存关系
只有将置位线圈置于激活的MCR区内时,才会激活MCR依存关系。在激活的MCR区内,如果MCR处于接通状态并且置位线圈有能流通过,将把寻址位的状态置位为“1”。如果MCR处于断开状态,则无论能流状态如何,单元指定地址的当前状态均保持不变。
状态字:
BR | CC 1 | CC 0 | OV | OS | OR | STA | RLO | /FC | |
写: | - | - | - | - | - | 0 | X | - | 0 |
满足下列条件之一时,输出端Q4.0的信号状态将是“1”:①输入端I0.0和I0.1的信号状态为“1”时;②或输入端I0.2的信号状态为“0”时。
如果RLO为“0”,输出端Q4.0的信号状态将保持不变。
如果实例梯级在激活的MCR区之内:
MCR处于接通状态时,则按以上所述置位Q4.0。
MCR处于断开状态时,无论RLO状态(能流状态)如何,Q4.0状态均保持不变。
1.10 RS 置位优先型RS双稳态触发器
符号:
参数 | 数据类型 | 内存区域 | 说明 |
<address> | BOOL | I、Q、M、L、D | 置位或复位 |
S | BOOL | I、Q、M、L、D | 启用复位指令 |
R | BOOL | I、Q、M、L、D | 启用复位指令 |
Q | BOOL | I、Q、M、L、D | <地址>的信号状态 |
则置位触发器。如果两个输入端的RLO均为“1”,则指令的执行顺序是最重要的。
RS触发器先在指定<地址>执行复位指令,然后执行置位指令,以使该地址在执行余下的程序扫描过程中保持置位状态。
只有在RLO为“1”时,才会执行S(置位)和R(复位)指令。这些指令不受RLO“0”的影响,指令中指定的地址保持不变。
MCR (主控继电器)依存关系
只有将RS触发器置于激活的MCR区内时,才会激活MCR依存关系。在激活的MCR区内,如果MCR处于接通状态,则按以上所述将寻址位复位为“0”或置位为“1”。如果MCR处于关闭状态,则无论输入状态如何,指定地址的当前状态均保持不变。
状态字:
BR | CC 1 | CC 0 | OV | OS | OR | STA | RLO | /FC | |
写: | - | - | - | - | - | X | X | X | 1 |
如果输入端I0.0的信号状态为“1”,I0.1的信号状态为“0”,则置位存储器位M0.0,输出Q4.0将是“0”。否则,如果输入端I0.0的信号状态为“0”,I0.1的信号状态为“1”,则复位存储器位M0.0,输出Q4.0将是“1”。如果两个信号状态均为“0”,则不会发生任何变化。如果两个信号状态均为“1”,将因顺序关系执行置位指令;置位M0.0,Q4.0将是“1”。
如果实例在激活的MCR区之内:
MCR处于打开状态时,将按以上所述复位或置位Q4.0;MCR处于关闭状态时,无论输入状态如何,Q4.0均保持不变。
1.11 SR 复位优先型SR双稳态触发器
符号:
说明:如果SR的S输入端的信号状态为“1”,R输入端的信号状态为“0”,则置位SR(复位优先型SR双稳态触发器)。否则,如果S输入端的信号状态为“0”,R输入端的信号状态为“1”,则复位触发器。如果两个输入端的RLO均为“1”,则指令的执行顺序是最重要的。SR触发器先在指定<地址>执行置位指令,然后执行复位指令,以使该地址在执行余下的程序扫描过程中保持复位状态。只有在RLO为“1”时,才会执行S(置位)和R(复位)指令。这些指令不受RLO“0”的影响,指令中指定的地址保持不变。
MCR (主控继电器)依存关系
只有将SR触发器置于激活的MCR区内时,才会激活MCR依存关系。在激活的MCR区内,如果MCR处于接通状态,则按以上所述将寻址位置位为“1”或复位为“0”。如果MCR处于关闭状态,则无论输入状态如何,指定地址的当前状态均保持不变。
状态字:
BR | CC 1 | CC 0 | OV | OS | OR | STA | RLO | /FC | |
写: | - | - | - | - | - | X | X | X | 1 |
如果输入端I0.0的信号状态为“1”,I0.1的信号状态为“0”,则置位存储器位M0.0,输出Q4.0将是“1”。否则,如果输入端I0.0的信号状态为“0”,I0.1的信号状态为“1”,则复位存储器位M0.0,输出Q4.0将是“0”。如果两个信号状态均为“0”,则不会发生任何变化。如果两个信号状态均为“1”,将因顺序关系执行复位指令;复位M0.0,Q4.0将是“0”。
如果实例在激活的MCR区之内:
MCR处于打开状态时,将按以上所述置位或复位Q4.0;MCR处于关闭状态时,无论输入状态如何,Q4.0均保持不变。
1.12 ---(N)--- RLO负跳沿检测
符号:<address>
---(N)
参数 | 数据类型 | 内存区域 | 说明 |
<address> | BOOL | I、Q、M、L、D | 边沿存储位,存储RLO的上一信号状态 |
状态字:
BR | CC 1 | CC 0 | OV | OS | OR | STA | RLO | /FC | |
写: | - | - | - | - | - | 0 | X | X | 1 |
实例:
边沿存储位M0.0保存RLO的先前状态。RLO的信号状态从“1”变为“0”时,程序将跳转到标号CAS1。
1.13 ---(P)--- RLO正跳沿检测
符号:<address>
---(P)---
参数 | 数据类型 | 内存区域 | 说明 |
<address> | BOOL | I、Q、M、L、D | 边沿存储位,存储RLO的上一信号状态 |
状态字:
BR | CC 1 | CC 0 | OV | OS | OR | STA | RLO | /FC | |
写: | - | - | - | - | - | 0 | X | X | 1 |
边沿存储位M0.0保存RLO的先前状态。RLO的信号状态从“0”变为“1”时,程序将跳转到标号CAS1。
1.14 ---(SAVE) 将RLO状态保存到BR
符号:---(SAVE)
说明:---(SAVE)(将RLO状态保存到BR)将RLO保存到状态字的BR位。未复位第一个校验位/FC。因此,BR位的状态将包含在下一程序段的AND逻辑运算中。
指令“SAVE”(LAD、FBD、STL)适用下列规则,手册及在线帮助中提供的建议用法并不适用:
建议用户不要在使用SAVE后在同一块或从属块中校验BR位,因为这期间执行的指令中有许多会对BR位进行修改。建议用户在退出块前使用SAVE指令,因为ENO输出(= BR位)届时已设置为RLO位的值,所以可以检查块中是否有错误。
状态字:
BR | CC 1 | CC 0 | OV | OS | OR | STA | RLO | /FC | |
写: | X | - | - | - | - | - | - | - | - |
实例:
将梯级(=RLO)的状态保存到BR位。
1.15 NEG 地址下降沿检测
符号
参数 | 数据类型 | 内存区域 | 说明 |
<address1> | BOOL | I、Q、M、L、D | 已扫描信号 |
<address2> | BOOL | I、Q、M、L、D | M_BIT边沿存储位,存储<address1>的前一个信号状态 |
Q | BOOL | I、Q、M、L、D | 单触发输出 |
状态字:
BR | CC 1 | CC 0 | OV | OS | OR | STA | RLO | /FC | |
写: | X | - | - | - | - | X | 1 | X | 1 |
满足下列条件时,输出Q4.0的信号状态将是“1”:
·输入I0.0、I0.1和I0.2的信号状态是“1”
·输入I0.3有下降沿
·输入I0.4的信号状态为“1”
1.16 POS 地址上升沿检测
符号:
参数 | 数据类型 | 内存区域 | 说明 |
<address1> | BOOL | I、Q、M、L、D | 已扫描信号 |
<address2> | BOOL | I、Q、M、L、D | M_BIT边沿存储位,存储<address1>的前一个信号状态 |
Q | BOOL | I、Q、M、L、D | 单触发输出 |
状态字:
BR | CC 1 | CC 0 | OV | OS | OR | STA | RLO | /FC | |
写: | X | - | - | - | - | X | 1 | X | 1 |
满足下列条件时,输出Q4.0的信号状态将是“1”:
·输入I0.0、I0.1和I0.2的信号状态是“1”
·输入I0.3有上升沿
·输入I0.4的信号状态为“1”
1.17 立即读取
说明:对于“立即读取”功能,必须按以下实例所示创建符号程序段。
对于对时间要求苛刻的应用程序,对数字输入的当前状态的读取可能要比正常情况下每OB1扫描周期一次的速度快。“立即读取”在扫描“立即读取”梯级时从输入模块中获取数字输入的状态。否则,必须等到下一OB1扫描周期结束,届时将以P存储器状态更新I存储区。
要从输入模块立即读取一个输入(或多个输入),请使用外设输入(PI)存储区来代替输入(I)存储区。可以字节、字或双字形式读取外设输入存储区。因此,不能通过触点(位)元素读取单一数字输入。
根据立即输入的状态有条件地传递电压:
①CPU读取包含相关输入数据的PI存储器的字。
②如果输入位处于接通状态(为“1”),将对PI存储器的字与某个常数执行产生非零结果的AND运算。
③测试累加器的非零条件。
实例:可以立即读取外设输入I1.1的梯形图程序段
必须指定*MWx,才能存储程序段。x可以是允许的任何数。
WAND_W指令说明:
PIW1 0000000000101010
W#16#0002 0000000000000010
结果 0000000000000010
在此实例中,立即输入I1.1与I4.1和I4.5串联。
字PIW1包含I1.1的立即状态。对PIW1与W#16#0002执行AND运算。如果PB1中的I1.1(第二位)为真(“1”),则结果不等于零。如果WAND_W指令的结果不等于零,触点A<>0时将传递电压。
1.18 立即写入
说明:对于“立即写入”功能,必须按以下实例所示创建符号程序段。
对于对时间要求苛刻的应用程序,将数字输出的当前状态发送给输出模块的速度可能必须快于正常情况下在OB1扫描周期结束时发送一次的速度。“立即写入”将在扫描“立即写入”梯级时将数字输出写入输入模块。否则,必须等到下一OB1扫描周期结束,届时将以P存储器状态更新Q存储区。
要将一个输出(或多个输出)立即写入输出模块,请使用外设输出(PQ)存储区来代替输出(Q)存储区。可以字节、字或双字形式读取外设输出存储区。因此,不能通过线圈单元更新单一数字输出。要立即向输出模块写入数字输出的状态,将根据条件把包含相关位的Q存储器的字节、字或双字复制到相应的PQ存储器(直接输出模块地址)中。
当心
·由于Q存储器的整个字节都写入了输出模块,因此在执行立即输出时,将更新该字节中的所有输出位。
·如果输出位在程序各处产生了多个中间状态(1/0),而这些状态不应发送给输出模块,则执行“立即写入”可能会导致危险情况(输出端产生瞬态脉冲)发生。
·作为常规设计原则,在程序中只能以线圈形式对外部输出模块引用一次。如果用户遵循此设计原则,则可以避免使用立即输出时的大多数潜在问题。
实例
立即写入外设数字输出模块5通道1的等价梯形图程序段。
可以修改寻址输出Q字节(QB5)的状态位,也可以将其保持不变。程序段1中给Q5.1分配I0.1信号状态。将QB5复制到相应的直接外设输出存储区(PQB5)。
字PIW1包含I1.1的立即状态。对PIW1与W#16#0002执行AND运算。如果PB1中的I1.1(第二位)为真(“1”),则结果不等于零。如果WAND_W指令的结果不等于零,触点A<>0时将传递电压。
在此实例中,Q5.1为所需的立即输出位;字节PQB5包含Q5.1位的立即输出状态;MOVE(复制)指令还会更新PQB5的其它7位。
学习PLC编程是一个枯燥和需要坚持的过程,您读完这篇文章,请用您的耐心将下面文章全部读完并动手操作,不久的将来一个西门PLC编程高手将在不断实践和应用中诞生!!