云南西门子S7-1500PLC模块代理(量大从优)

STEP 7设计顺序控制程序的基本方法
根据顺序功能图设计梯形图时,可以用M存储器来代表步。为了便于将顺序功能图转换为梯形图,用代表各步的存储器位的地址作为步的代号,并用编程元件地址的逻辑代数表达式来标注转换条件,用编程元件的地址来标注各步的动作。
顺序控制程序分为控制电路和输出电路两部分。输出电路的输入量是代表步的编程元件M,输出量是PLC的输出位Q。它们之间的逻辑关系是极为简单的相等或相“或”的逻辑关系,输出电路是很容易设计的。
控制电路用PLC的输入量来控制代表步的编程元件。某一步为活动步时,对应的存储器位M为1,某一转换实现时,该转换的后续步应变为活动步。可以用一个串联电路来表示转换实现的这两个条件,该电路接通时,应将该转换的所有后续步的存储器位M置为1,将所有前级步对应的M复位为0。转换实现的两个条件对应的串联电路接通的时间只有一个扫描周期,因此应使用有记忆功能的电路或指令来控制代表步的存储器位。起保停电路和置位/复位电路都有记忆功能,下面将介绍这两种电路的设计方法。
在同时有手动和自动模式的程序中,都需要控制PLC输入Q,因此同一个输出位的线圈可能会出现多次,这称为双线圈问题。
在跳转条件相反的两个程序段中,允许出现双线圈,即同一元件的线圈可以在自动程序和手动程序中分别出现一次。实际上CPU在每次循环中,只执行手动程序或只执行自动程序,不可能同时执行两个程序。对于分别位于这两个程序中的两个相同线圈,每次循环只执行其中一个,因此在本质上并没有违反不允许出现双线圈的规定。
用相反的条件调用功能时,也允许同一元件的线圈在自动程序和手动程序中各出现一次。因为两个功能的调用条件相反,在一个扫描周期中只会调用其中的一个功能,而功能中的指令只在该功能被调用时才执行,因此实际上CPU也只是处理其中的一个线圈。
开始执行自动程序之前,要求系统处于规定的初始状态。如果开机时系统没有处于初始状态,则应进入手动工作模式,用手动操作进入初始状态后,在切换到自动工作模式,也可以通过初始化程序使系统自动进入初始状态。
系统满足规定的初始状态后,应将顺序功能图的初始步对应的存储器位置1,使初始步变为活动步,为启动自动运行作好准备。同时还应将其余各步的存储器位复位为0,这是因为在没有并行序列或并行序列未处于活动状态时,同时只能有一个活动步。
绝大多数自动控制系统除了自动工作模式外,还需要设置手动工作模式。在下列两种情况下需要工作在手动模式下:
1)启动自动控制程序之前,系统必须处于要求的初始状态。如果系统的状态不满足启动自动程序的要求,需要进入手动工作模式,用手动操作使系统进入初始状态,然后再回到自动模式。一般在调试阶段使用手动工作模式。
2)顺序自动控制对硬件的要求很高,如果有硬件故障,就不可能正确地完成整个工作过程。在这种情况下,为了使设备不停机,可以使用手动工作模式。
自动和手动工作模式下控制系统的两种典型控制结构如图1和图2所示。
图1和图2中的I2.0是手/自动切换开关。在图1中,当I2.0为1时,条条件跳转指令( JMP)的跳转条件满足,将跳过自动程序;执行手动程序,当I2.0为0时,第二条跳转指令的跳转条件满足,将跳过手动程序,执行自动程序。
图2的梯形图中,当I2.0为1时调用处理手动操作的子程序“MAN”,为0时调用处理自动操作的子程序“AUTO”。
图1 自动/手动程序1

图2 自动/手动程序2
ANY参数必须使用在编译阶段定义过的数据区或变量来参数化。比如使用SFC 20BLKMOV把一个变量复制到数据区:
CALL SFC20 (
SRCBLK := “ReC eiveMailbox”. Data,
RET_VAL :=SFC20Error,
DSTBLK :=P#DB63.DBX0.0 BYTE 8);
在运行时可以修改或重新定义变量或数据区,因为编辑器把一个确定的ANY指针指向了暂态局部数据中的实参。
如果实参自身也在暂态局部数据中,且实参数据类型为ANY,编辑器将会出现例外。此时将不再设置更多的ANY指针,编辑器将会把ANY变量当做指向实参的ANY指针。这意味着ANY变量的结构必须与ANY指针的结构相同。
然后就可以在运行时修改暂态局部数据中的ANY变量,给ANY参数指定其他实参。按照下列步骤使用ANY指针“变量”:
●应用数据类型为ANY的暂态局部变量(ANY变量的名称可以在块局部变量允许
的结构内自由地选择):
VAR_TEMP
ANY_POINTER :ANY;
END_VAR
●使用数值初始化ANY变量。
●初始化ANY参数,比如,在SFC 20中
CALL SFC20 (
SRCBLK :=“ReceiveMailbox”.Data,
RET_VAL :=SFC20Error,
DSTBLK :=ANY_POINTER);
这些程序并不限制SFC 20 BLKMOV的使用,可以在任意块的所有ANY参数中使用它。
举例:如果要写一个复制块,用于在数据块中复制数据区。源操作数区和目标操作数区将被参数化。使用SFC 20 BLKMOV来复制。该块(一个功能FC)具有下列参数:
VAR_INPUT
QDB : INT; //Source data block
SSTA : INT; //Source starting address
NUMB : INT; //Number of bytes
DDB : INT; //Destination data block
DSTA : INT; //destination starting address
END_VAR
功能值将包含SFC 20的出错信息,并且如果直接使用SFC 20,功能值可以参与计算。另外,在错误事件中,状态位BR将设为“0”。
两个ANY变量,一个作为源操作数区的指针,一个作为目标操作数区的指针,对于块局部数据来说足够用了。
VAR_TEMP
SANY : ANY; //ANY pointer source
DANY : ANY; //ANY pointer destination
END_VAR
由于知道暂态局部数据中ANY指针的地址,就可以使用其地址来编程,比如源指针的准备:
L W#16#1002 ; //Type BYTE
T LW 0;
L NUMB; //Number ofbytes
T LW 2
L QDB; //Source DB
T LW4:
L SSTA; //Start of the source
SLD 3;
OD DW#16#8400_0000;
T LD 6:
起始地址为LB 10的目标指针也用同样的方式来准备。它仅用于初始化SFC 20:
CALL SFC20 (
SRCBLK :=SANY,
RET_VAL :=RET_VAL,
DSTBLK :=DANY):
SFC 20的功能值RET_VAL使用功能FC的RET_VAL来初始化。
在原书磁盘上可以找到这个完整的小实例(程序“General Examples”中的功能FC 47)。
这样,可以给ANY指针赋任意值,可以在WORD字2或区指针中变换不同的类型,所以,从原理上来说,可以寻址任意变量或数据区,比如位存储区。
注意:如果暂态局部数据中的ANY指针指向的变量也位于所调用块的暂态局部数据中,必须输入V作为地址区,因为从被调用块的观点来看,这个变量位于前任块的暂态局部数据中。
云南西门子S7-1500PLC模块代理(量大从优)