S7-200编程语言的基本单位是语句,而语句的构成是指令,每条指令有两部分:一部分是操作码,另一部分是操作数。操作码是指出这条指令的功能是什么,操作数则指明了操作码所需要的数据所在。所谓寻址,就是寻找操作数的过程。S7-200CPU的寻址分三种:立即寻址、直接寻址、间接寻址。
1.立即寻址
在一条指令中,如果操作码后面的操作数就是操作码所需要的具体数据,这种指令的寻址方式就叫立即寻址。
如:在传送指令中:MOVINOUT——操作码“MOV”指出该指令的功能把IN中的数据传送到OUT中,其中IN——源操作数,OUT——目标操作数。
若该指令为:MOVD2505VD500
功能:将十进制数2505传送到VD500中,这里2505就是源操作数。因这个操作数的数值已经在指令中了,不用再去寻找,这个操作数即立即数。这个寻址方式就是立即寻址方式。而目标操作数的数值在指令中并未给出,只给出了要传送到的地址VD500,这个操作数的寻址方式就是直接寻址。
2.直接寻址
在一条指令中,如果操作码后面的操作数是以操作数所在地址的形式出现的,这种指令的寻址方式就叫直接寻址。
如:MOVDVD400VD500
功能:将VD400中的双字数据传给VD500
3.间接寻址
在一条指令中,如果操作码后面的操作数是以操作数所在地址的地址形式出现的,这种指令的寻址方式就叫间接寻址。
如:MOVD2505*VD500
*VD500是指存放2505的地址的地址。
如VD500中存放的是VB0,则VD0则是存放2505的地址。
该指令的功能:将十进制数2505传送给VD0地址中。
使cpu进入stop的情况很多,比如地址调用错误,没有下载需要DB块,编程错误等等,如果你想避免错误时不使CPU进入停止状态,你可以在程序中加入特殊的OB块,则出现相应问题,调用相应的OB块,虽然里面没程序,PLC将对错误错误不作任何处理,继续运行。否则PLC将进入停机状态可,比如:
OB73通讯冗余出错OB
当容错S7连接中发生*冗余丢失时,HCPU的操作系统将调用OB73(只有在S7通
讯中才会有容错S7连接。更多信息,请参见“S7-400H可编程控制器,容错系统。”)。如果其它容错S7连接发生了冗余丢失,则不会再有OB73启动。直到为具有容错功能的所有S7连接恢复冗余后,才会出现另一个OB73启动。如果发生了启动事件且OB73没有编程,CPU不会转为STOP模式。
OB80时间出错组织块
无论何时执行OB时出错,S7-300CPU的操作系统将调用OB80。此类错误包括:
超出周期时间、执行OB时出现确认错误、提前了时间而使OB的启动时间被跳过、
在CiR后恢复RUN模式。例如,如果在上一次调用之后发生了某一周期性中断OB的启动事件,而同一OB此时仍在执行中,则操作系统将调用OB80。如果OB80尚未编程,则CPU将转为STOP模式。可以使用SFC39至42禁用或延迟和重新启用时间出错OB。
OB81电源出错组织块
只要发生由错误或故障所触发的事件,而此错误或故障又与电源(仅在S7-400上)或备用电池(当事件进入和离开时)有关,则S7-300CPU的操作系统调用OB81。在S7-400中,如果已使用BATT.INDIC开关激活了电池测试功能,则只有在出现电池故障时才会调用OB81。如果OB81没有编程,则CPU不会转为STOP模式。可以使用SFC39至42禁用或延迟,并重新启用电源出错OB。
OB82诊断中断组织块
如果具有诊断功能的模块(已为其启用了诊断中断)检测到错误,则它会输出一个诊断中断的请求给CPU(当事件进入和离开时)。则操作系统调用OB82。OB82的局部变量包含逻辑基址和四字节的故障模块的诊断数据(请参见下表)。如果OB82尚未编程,则CPU转为STOP模式。可以使用SFC39至42禁用或延迟,并重新启用诊断中断OB。
OB83插入/删除模块中断组织块
在下列情况下,CPU操作系统会调用OB83:
?插入/删除已组态模块后
?在STEP7下修改模块参数以及在运行期间将更改下载至CPU后
可借助SFC39至42禁用/延迟/启用插入/删除中断OB。
OB84CPU硬件故障组织块
在下列情况下,CPU中的OS将调用OB84:
?已检测到并更正了内存出错之后
?对于S7-400H:如果两个CPU之间的冗余链接的性能下降
可以使用SFC39至42禁用或延迟CPU硬件出错OB,然后再次启用它。
OB85优先级出错组织块
只要发生下列事件之一,CPU的操作系统即调用OB85:
?尚未装载的OB(OB81除外)的启动事件。
?操作系统访问模块时出错。
?在系统更新过程映像期间出现I/O访问错误(如果由于组态原因,未禁止OB85的调用)。
OB86机架故障组织块
只要在分布式I/O(PROFIBUSDP或PROFInetIO)中检测到中央扩展机架(不带S7-300)、DP主站系统或站故障(进入事件与离开事件时),CPU的操作系统调用OB86。如果OB86尚未编程,当检测到此种类型的出错时,CPU将转为STOP模式。可使用SFC39至42禁用或延迟,并重新启用OB86。
OB87通讯出错组织块
只要发生由通讯出错导致的事件,CPU的操作系统就会调用OB87。
如果OB87尚未编程,CPU不会转为STOP模式。可以使用SFC39至42禁用或延迟,并重新启用通讯出错OB。
OB88处理中断OB
程序块执行被中止后,CPU操作系统将调用OB88。导致此中断的原因可能是:
?同步出错的嵌套深度过大
?块调用(U堆栈)的嵌套深度过大
?分配本地数据时出错
如果未对OB88编程且程序块执行被中止,则CPU进入STOP模式
(事件IDW#16#4570)。如果在优先级28下中止了程序块执行,则CPU进入STOP模式。可借助于SFC39至42禁用、延迟和启用处理中断OB。
OB121编程出错组织块
只要发生同程序处理相关的错误所导致的事件,CPU的操作系统即调用OB121。例如,如果用户程序调用了尚未装载到CPU中的块,将会调用OB121。
OB122I/O访问出错组织块
只要在访问模块上的数据时出错,CPU的操作系统即调用OB122。例如,如果在访问I/O模块上的数据时,CPU检测到读取错误,操作系统将调用OB122.

2 龙门刨床机械传动的PLC控制系统硬件设计
2.1 系统对变频器的控制要求
变频器的正反转由继电器K1、K2控制,速度的切换由继电器K3、K4完成。变频器故障报警输出触点(30A、30C触点)用于立即停止高速计数器运行,并由指示灯HR指示。
变频器具有多段速度设定功能,当K3、K4两个继电器触点都断开时,高速行驶(速度);K3闭合,K4断开时,中速行驶(第二速度);K3断开,K4闭合时,低速行驶(第三速度);K3、K4都闭合时,手动调节行驶(第四速度)。
旋钮SF用于手动/自动切换,并用指示灯HG1表示自动状态。手动时,能够通过按钮SA1(电机正转)和SA2(电机反转)手动调节传动系统的位置。
按钮SA用于传动系统在自动状态下的启动/停止控制。采用“一键开关机”方式实现启动/停止控制,用指示灯HG2表示启动状态。
行程开关SQ用于自动启动时,确定传动系统在原点位置,自动停止时,传动系统必须返回原点。行程开关SQ1、SQ2用于传动系统的两端限位,确保传动系统不能脱离设备。
2.2 PLC系统硬件系统的构成及连接
为了实现对龙门刨床机械传动的定位,本系统采用PLC作为控制器,通过变频器进行速度调节,采用光电编码器和PLC高速计数器进行定位控制。根据龙门刨床的机械传动控制要求,系统中有开关量输入点8个,开关量输出点7个,光电编码器A相输入一个,因此选用SIEMENS的CPU224作为控制器,其I/O点的分配及系统接线如图2所示。
PLC梯形图程序的设计
PLC的梯形图程序设计包含主程序(用于实时调用手动子程序SBR_0和自动子程序SBR_1)、子程序SBR_0(用于实现对系统的手动控制)和SBR_1(用于实现对系统的自动控制)和中断处理程序INT_0程序(用于处理高速计数器计数当前值到达不同预置值的处理)。由于篇幅所限,以下将以中断处理程序INT_0程序为例,说明变频器对速度的控制和调节。其梯形图如下。
4 梯形图设计过程中要注意的几个关键问题
4.1通过多次更改高速计数器的中断和预置值实现多点定位
实现多点定位控制的关键包括两点,点是设置高速计数器中断事件12(计数器当前值=计数器预置值),另一点就是在中断处理程序中更改高速计数器预置值。
定位控制需要测量定位点与原点的距离,然后将单位距离(mm)转换成脉冲量,通过光电编码器和PLC高速计数器记录脉冲量的变化。本系统中,光电编码器的机械轴和电动机同轴。传动比=10,用于驱动设备的传动辊直径=100mm,光电编码器每转脉冲数=600个/转。可以计算出每毫米距离的脉冲数为:
每毫米距离的脉冲数=600÷(10×100×3.14)≈0.19108脉冲/mm
定点位和预置值比较,必须采用高速计数器中断方式,而不能采用一般的比较指令。因为一般的比较指令无法捕捉高速变化的事件。
所以,必须通过ATCH和ENI指令将高速计数器中断事件号12((计数器当前值=计数器预置值)与中断处理程序INT_0连接。在中断处理程序INT_0中,到达预置值时,重新装载下一次的预置值,并执行工艺要求的继电器输出,处理变频器的运行速度。
在自动子程序SBR_1中,将高速计数器HC0设置为单相计数输入,没有外部控制功能。在原点和终点通过更改计数方向,便于中断处理程序INT_0判断变频器的运行方向。
4.2 在中断处理程序INT_0中不能使用等于比较指令
由于在一个中断处理程序INT_0中判断处理多个预置值。需要比较指令和计数方向来判断目前高速计数器计数当前值在哪个阶段,根据判断来决定执行那一段指令。但是,判断不能使用等于比较指令,应该使用大于或小于指令判断。
尽管中断事件(计数器当前值=计数器预置值)发生时,PLC立即中断当前主程序、子程序,执行中断处理程序INT_0中的指令。但是,在中断处理程序INT_0中,PLC仍然是按照逐条逐行的扫描机制执行。而高速变化的计数值不可能和中断处理程序执行同步,如果采用等于比较指令,PLC在执行中断处理程序时,可能会错过等于值,使PLC在中断处理程序中无法判断设备运行到哪个阶段。
4.3 在自动运行时,高速计数器的初始值寄存器写入必须禁止
由于多点定位需要多次装载预置值,写入预置值必须执行HSC指令。
执行HSC写入指令,不单单是写入预置值,如果在控制字节中不加以限制,初始值寄存器SMD38中的值同样写入。而SMD38=0,这样,就会使高速计数器计数当前值置0。因此,在自动运行时,必须设置控制字节SMB37的第七位SM37.6为0,在装载预置值时,禁止写入初始值。
但是,在高速计数器初始设置和返回原点重新开始运行时,又必须写入初始值,使初始值置0,避免机械原因带来的误差。因此,控制字节必须多次修改。遵循的原则是:允许写入初始值、执行HSC指令后,必须马上修改控制字节,禁止初始值写入,并再次执行HSC指令,中间不能有其它指令存在。
4.4 多点定位的输出线圈尽量采用立即指令
采用高速计数器进行多点定位,主要为了定位。定位精度既决定于高速计数器的测量,同时也决定于执行机构的执行快速性。
如果采用普通输出指令,在一个扫描周期的程序执行阶段,改变的仅仅是输出映像存储器,PLC的输出点不会立即刷新,只有在程序执行完毕后,PLC的输出映像存储器才能对输出点刷新,执行输出。
为了增加定位精度,尽量采用立即输出指令。立即输出指令不受PLC扫描周期阶段的限制,在改变输出映像存储器的同时,立即刷新PLC输出点。
4.5自动/手动程序采用For-Next循环指令和子程序指令实现
本系统中的自动/手动功能通过采用For-Next指令和子程序指令实现。自动程序和手动程序实际上就是两个循环指令的循环体。而循环指令仅执行一次循环扫描刷新。
手动子程序SBR_0和自动子程序SBR_1用于整个程序的分段,便于程序的理解,增加程序的可读性。For-Next循环指令的作用是使输出线圈能够重复使用,简化程序。
当变频器正向运行(由SM36.5判断,增计数为正向运行,SM36.5=1),高速计数器当前值等于19108(1000mm)时,继电器K3(Q0.2)、K4(Q0.3)断开,变频器速度设定为高速正向行驶(速度)。同时将高速计数器预置值更改为57325(3000mm)。
当变频器正向运行,高速计数器当前值等于59325(3000mm)时,继电器K3(Q0.2)断开、K4(Q0.3)接通,变频器速度设定为低速正向爬行行驶(第三速度)。同时将高速计数器预置值更改为61146(3200mm)。
当变频器正向运行,高速计数器当前值等于61146(3200mm)时,表明达到终点,继电器K1(Q0.0)、K2(Q0.1)、K3(Q0.2)、K4(Q0.3)全部复位断开,变频器立即停止运行。同时,发出终点到达信号M0.1,让子程序SBR_1处理停顿2s时间,并由SBR_1处理反向运行设置。
当变频器反向运行(由SM36.5判断,减计数为反向运行,SM36.5=0),高速计数器当前值等于3822(200mm)时,继电器K3(Q0.2)断开、K4(Q0.3)接通,变频器速度设定为低速反向爬行行驶(第三速度)。同时将高速计数器预置值更改为0。
当变频器反向运行(由SM36.5判断,减计数为反向运行,SM36.5=0),高速计数器当前值等于0时,表明变频器返回到达原点。继电器K1(Q0.0)、K2(Q0.1)、K3(Q0.2)、K4(Q0.3)全部复位断开,变频器立即停止运行。同时,发出原点到达信号M0.0,让子程序SBR_1处理停顿2s时间,并由SBR_1处理正向重新运行设置。
本文创新点:
往返式传动控制系统的多点定位是一个较难解决的问题,本系统采用PLC作为控制器,通过变频调速,利用光电编码器和PLC高速计数器进行定位控制,克服了往返式传动控制系统中由于机械惯性的作用给系统带来的定点误差,从而实现了定位。
西门子PLC,西门子CPU,西门子代理商,西门子授权代理商,西门子一级代理商