处理器模块6ES7217-1AG40-0XB0处理器模块6ES7217-1AG40-0XB0
SIMATIC S7-1200,CPU 1217C, 紧凑型 CPU,DC/DC/DC, 2 个 PROFINET 端口 机载 I/O: 10 DI 24V DC;4 DI RS-422/485; 6 DO 24V DC;0.5A; 4 DO RS-422/485; 2 AI 0-10V DC,2 AO 0-20mA 电源:直流 20.4-28.8V DC, 程序存储器/数据存储器 150 KB |
1. 位元件输出执行和双线圈
位元件的驱动输出在梯形图中是由线圈输出指令 OUT 和功能指令的操作来完成的,但两种指令的执行有很大的区别,
1)OUT指令执行
不管驱动条件是否成立,OUT 指令都要执行输出。驱动条件成立,则输出执行为 ON (下面用1表示),驱动条件不成立,则输出执行为OFF(下面用0表示)。
2)功能指令执行
位元件也经常作为功能指令的操作数进行驱动,例如 SET Y0、RST Y0、MOV K10 K4Y0 等。同样,这些功能指令均有驱动条件,功能指令仅当驱动条件成立时,才执行指令的操作功能。其执行结果会送到 I/O 映像区或 RAM 存储区中去保存,而驱动条件不成立时,执行的结果仍然保持不变,直到通过执行新的指令操作得到新的执行结果为止。
什么叫双线圈?在梯形图程序中,如果一个位元件的线圈被驱动两次或两次以上,就叫双线圈。根据驱动所用的指令不同,双线圈在程序中又分为三种结构。
(1)用OUT指令驱动同一个位元件两次或两次以上。
(2)用OUT指令和功能指令驱动同一个位元件两次或两次以上。
(3)用两个功能指令驱动同一个位元件两次或两次以上。
上面三种结构,第(1)种和第(2)种称为双线圈输出,第(3)种称为双线圈驱动。在程序中这两种情况执行的结果是不同的,下面分别给予讨论。
2.双线圈输出
所谓双线圈输出是指位元件在编程中用OUT指令驱动了两次或两次以上,或者用OUT 指令和功能指令驱动了两次或两次以上,程序如图5.1-8所示。
图5.1-8 双线圈输出程序例1
图5.1-8(a)为Y0用OUT指令驱动了两次,是一种典型的双线圈输出。这种程序设计的本意是:如果输入采样为X0接通,X1断开,则Y0,Y1,Y3均为1;如果输入采样为 X0 断开,X1 接通,则 Y0,Y3 均为 1。那么程序运行结果是不是这样呢实际上不是,图5.1-8(b)是实际运行监控结果,当 X0 接通、X1 断开时,Y0,Y3 均为0,仅Y1=1。而且发生了一个初学者感到奇怪的现象,X0接通,Y0没有输出;Y0常开触点没接通,YI却有输出,这种现象只能通过OUT指令的执行特性和程序的扫描执行过程来说明。
当X0接通时,第0行,Y0=1,执行结果马上影响第2行,Y0触点动合,Y1=1。到第4行,由于X1断开,但OUT指令仍然得到执行,使Y0=0,执行结果马上影响第6行,Yo 触点不动作,使 Y3=0。由扫描原理可知,输出 Y 的状态是以 I/O 映像区中最后的状态在END 指令执行后统一刷新送到输出锁存存储区中,然后传送到各相应的输出端子,所以,结果是Y1=1,Y0=Y3=0。正是OUT指令的这种执行特性和梯形图的扫描,才产生了所谓的双线圈问题。
再来看看图5.1-9(a),图中Y0用OUT指令和SET指令分别驱动了一次,这是另一种形式的双线圈输出。这种程序会不会同样存在线圈驱动互有影响而得不到预想得结果呢假定X1接通,X0断开,希望得到Y0=Y1=Y2=1的输出结果,但实际上,X1接通后,SET Y0指令使Y0=1,到第6行,Y2=1,重新扫描原第0行,执行OUT指令,Y0=0,到第2行,Y1=0。这就是为什么实际运行结果却是Y0=Y2=1,Y1=0。当X1断开后,Y0应该保持置1 状态,但实际监控结果却是 Y0=Y1=Y2=0。为什么?因为,虽然 X1 断开后,Y0 保持置1 状态。但再次扫描到首行时,由于X0断开,OUT指令执行使Y0的状态由1变为0,相当于执行了一条RST Y0指令,Y0=0,使Y1=0,如果这时X1已断开,则SETY0指令得不到执行,而又使Y2=0,程序执行的最后结果是Y0=Y1=Y2=0。在含有OUT指令输出的双线圈输出中,由于 OUT 指令执行的特性会使输出状态互相影响而导致程序运行后得不到预期的输出结果。
图5.1-9 双线圈输出程序例2
对图5.1-8和图5.1-9的双线圈程序分析可以得出这样的结论:双线圈输出不存在编程语法错误。编程软件可以接受双线圈输出,但由于两个线圈的驱动互有影响,在程序结构复杂时,会得不到程序设计所预想的结果,导致控制失误。因此,在梯形图程序中,应避免出现双线圈输出设计,特别是输出继电器Y的双线圈输出设计。
但也有例外,如果双线圈输出并不在同一扫描周期内,则不会产生双线圈输出问题,如利用条件转移指令CJ设计的手动、自动程序。由于手动和自动程序不会在同一扫描周期被执行,因此,在这两个程序段可以允许有相同的线圈输出,并不构成双线圈输出。类似的还有STL指令步进程序SFC梯形图。在步进程序中,由于一定时间仅在一个状态被激活,因此,在一个状态里不能出现双线圈输出,而在不同的状态可以有相同的线圈输出,这不叫作双线圈输出。但也要注意,两个相邻状态也不能出现相同线圈的输出。
3. 双线圈驱动
在梯形图程序中,如果相同的位元件输出仅出现在功能指令的操作数中,而且在一个扫描周期内出现在两个或两个以上的功能指令,则称为双线圈驱动,以示与双线圈输出的区别。
双线圈驱动属于指令的操作与驱动,关于功能指令的执行已在上面给予说明。由于功能指令仅在驱动条件成立时才执行,而当驱动条件断开后,执行结果仍然被保存,直到下一条功能指令改变执行结果为止。因此,双线圈驱动不存在双线圈输出那种输出驱动互相影响的情况,双线圈驱动是一种正常的编程。
在双线圈驱动中,如果多个功能指令驱动一个线圈,线圈的状态则以最后一个执行的功能指令的操作结果为准。图5.1-10为一个多次用SET,RST指令对Y0进行操作的程序。Y0 的状态决定于最后执行的SET、RST指令,而与指令在梯形图中的位置无关。如果同时有几个指令被执行,如先接通X0,又接通 X2,再接通 X1,则 Y0 的状态由最接近 END 的功能指令执行结果决定,图中,为X2所驱动的SET Y0指令最接近END指令,所以Y0=1。而不是最后执行的X1所驱动的RST Y0指令。
图5.1-10 SET、RST双线圈驱动
处理器模块6ES7217-1AG40-0XB0处理器模块6ES7217-1AG40-0XB0处理器模块6ES7217-1AG40-0XB0处理器模块6ES7217-1AG40-0XB0处理器模块6ES7217-1AG40-0XB0处理器模块6ES7217-1AG40-0XB0处理器模块6ES7217-1AG40-0XB0