西门子PLC300电机加减速功能块例子程序
- 格式:docx
- 大小:105.04 KB
- 文档页数:7
西门子 PLC中OB、FC、FB、SFC、SFB中功能块使用概述(2013-12-05 16:13:52)S7-300/400PLC程序采用结构化程序,把程序分成多个模块,各模块完成相应的功能。
结合起来就能实现一个复杂的控制系统。
就像高级语言一样,用子程序实现特定的功能,再通过主程序调用各子程序,从而能实现复杂的程序。
在S7-300/400PLC中写在OB1模块里和程序就是主程序,子程序写在功能(FC),功能块(FB)。
FC运行是产生临时变量执行结束后数据就丢失-----不具有储存功能FB运行时需要调用各种参数,于是就产生了背景数据块DB。
例如用FB 41来作PID控制,则它的PID控制参数就要存在DB里面。
FB具有储存功能系统功能块(SFB)和系统功能(SFC)也是相当于子程序,只不过SFB 和SFC是集成在S7 CPU中的功能块,用户能直接调用不需自已写程序。
SFC与FC不具有储存功能,FB和SFB具有储存功能。
OB模块相当于子程序,负责调用其他模块。
如果程序简单只需要OB就可以实现。
用西门子PLC编程时,可以用到功能块FB和功能FC(FB、FC都是组织块)资料上说FB与FC都可以作为用户编写的子程序,但是我不明白这两个组织块之间到底有什么区别阿?在应用上到底有什么不同之处吗?FB--功能块,带背景数据块FC--功能,相当于函数他们之间的主要区别是:FC使用的是共享数据块,FB使用的是背景数据块举个例子,如果您要对3个参数相同的电机进行控制,那么只需要使用FB编程外加3个背景数据块就可以了,但是,如果您使用FC,那么您需要不断的修改共享数据块,否则会导致数据丢失。
FB确保了3个电机的参数互不干扰。
FB,FC本质都是一样的,都相当于子程序,可以被其他程序调用(也可以调用其他子程序)。
他们的最大区别是,FB与DB配合使用,DB中保存着F B使用的数据,即使FB退出后也会一直保留。
FC就没有一个永久的数据块来存放数据,只在运行期间会被分配一个临时的数据区。
6.7 习题1.加/减计数器、加计数器、减计数器2.块图指令、线圈指令3.上升沿、上升沿、999、复位、1、04.用线圈表示的计数器与用功能框表示的计数器有何区别?5.用计数器与定时器配合设计一个延时24小时的定时器扩展程序。
答:延时时间=4h×6=24h,参考程序如下6.用时钟存储器与计数器配合,设计一个延时48小时的定时器扩展程序。
答:延时时间=2s×900×96÷3600=48h,参考程序如下7.为了扩大计数范围,设计一个能计数15000的计数器。
答:计数值=750×20=15000,参考程序如下8.设计一个用计数器线圈指令对车辆进行计数控制的程序。
答:参考程序如下9.设计信号灯的单按钮控制程序,用1个按钮控制一个指示灯,要求第1次操作按钮指示灯亮,第2次操作按钮指示灯闪亮,第3次操作按钮指示灯灭,如此循环,试编写LAD 控制程序。
答:参考程序如下10.设计一个监控系统的程序,监控3台电动机的运转:如果2台或2台以上电动机在运转,信号灯就持续点亮;如果只有一个运转,信号灯就以1H z的频率闪烁;如果3台电动机都不转,信号灯以2 H z的频率闪烁.。
答:参考程序如下11.设计一个方波信号发生器的程序,方波的周期为2s,脉宽为1.2s。
答:参考程序如下12.设计车库车位预警程序,控制要求如下:车库共有100个车位,当车库内停放车辆少于或等于90辆车时,车库入口处的绿灯亮(Q0.0)),表示车辆可以进入;当车库内停放车辆大于90辆小于100辆车时,车库入口处的黄灯亮(Q0.1)),表示车位即将满;当车库内停放等于100辆车时,车库入口处的红灯亮(Q0.2)),表示车位已满,车辆不能进入。
答:参考程序如下13.设计跑马灯控制程序,要求如下:(1)输出端MW10接16盏灯,按下起动按钮输出端从第一盏灯开始亮,每隔0.5s亮一盏灯,直到全部灯亮。
再隔0.5s又从第一盏灯亮开始循环。
本文由yyiixxster贡献ppt文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
S7-300/400PLC的编程技术的编程技术刘美俊编程语言与数据类型1 编程语言STEP-7是S7-300/400系列PLC的编程软件. 梯形图,语句表(即指令表)和功能块图是标准的STEP-7软件包配备的3种基本编程语言,这3种语言可以在STEP-7中相互转换.1 顺序功能图顺序功能图(SFC)这是一种位于其他编程语言之上的图形语言,用来编制顺序控制程序,STEP-7中的S7 Graph顺序控制图形编程语言属于可选的软件包.在这种语言中,工艺过程被划分为若干个顺序出现的步,步中包含控制输出的动作,从一步到另一步的转换由转换条件控制.用Graph表达复杂的顺序控制过程非常清晰,用于编程及故障诊断更为有效, 使PLC程序的结构更加易读,它特别适合于生产制造过程. S7 Graph具有丰富的图形,窗口和缩放功能.系统化的结构和清晰的组织显示使S7 Graph对于顺序过程的控制更加有效.2 梯形图(LAD)梯形图是使用得最多的PLC图形编程语言.梯形图与继电器电路图很相似,具有直观易懂的优点, 特别适合于数字量逻辑控制.梯形图由触点,线圈和用方框表示的指令框组成.触点代表逻辑输入条件,例如外部的开关,按钮和内部条件等.线圈通常代表逻辑运算的结果,常用来控制外部的指示灯, 交流接触器和内部的标志位等.指令框用来表示定时器,计数器或者数学运算等附加指令. 使用编程软件可以直接生成和编辑梯形图,并将它下载到PLC.触点和线圈等组成的独立电路称为网络(Network),如下图所示,编程软件自动为网络编号.梯形图中的触点和线圈可以使用物理地址,例如I0.1, Q0.3等.如果在符号表中对某些地址定义了符号,例如令I0.1的符号为"起动",在程序中可用符号地址"起动"来代替物理地址I0.0,这样使程序易于阅读和理解. 用户可以在网络号右边加上网络的标题,在网络号的下面为网络加上注释.还可以选择在梯形图下面自动加上该网络中使用的符号的信息. 在分析梯形图中的逻辑关系时,为了借用继电器电路图的分析方法,可以想象在梯形图的左有两侧垂直"电源"之间有一个左正右负的直流电源电压,有一个假想的"能流"(PowerFlow)流过线圈.利用能流这一概念,可以很好地理解和分析梯形图,能流只能从左向右流动.3 语句表(STL)S7系列PLC将指令表称为语句表(Statement List),它是一种类似于微机的汇编语言中的文本语言,多条语句组成一个程序段.语句表比较适合经验丰富的程序员使用,可以实现某些不能用梯形图或功能块图表示的功能.4)功能块图(FBD) 功能块图(FBD)使用类似于布尔代数的图形逻辑符号来表示控制逻辑.一些复杂的功能用指令框来表示,功能块图用类似于与门,或门的方框来表示逻辑运算关系. 5)结构文本(ST) 结构文本(ST)是为IEC61131-3标准创建的一种专用的高级编程语言. STEP-7的S7 SCL(结构化控制语言)是符合lEC61131-3标准的高级文本语言.它的语言结构与编程语言Pascal和C相似,所以特别适合于习惯使用高级编程语言的人使用.6)S7 HiGraph编程语言图形编程语言S7 HiGraph属于可选软件包,它用状态图(State Graphs)来描述异步,非顺序控制过程的编程语言. 7)S7 CFC编程语言可选软件包CFC(Continuous Function Chart,连续功能图)用图形方式连接程序库中以块的形式提供的各种功能,包括从简单的逻辑操作到复杂的闭环和开环控制等领域.编程时将这些块复制到图中并用线连接起来即可.基本数据类型(1)基本数据类型;(2)用户通过组合基本数据类型生成的复合数据类型; (3)可用来定义传送FB(功能块)和FC(功能)参数的参数类型. 下面介绍STEP7的基本数据类型: 1)位(bit) 位数据的数据类型为BOOL(布尔)型,在编程软件中BOOL 变量的值1和0常用英语单词TURE(真)和FALSE(假)来表示. 位存储单元的地址由字节地址和位地址组成,例如I3.2中的区域标示符"I"表示输入(Input),字节地址为3,位地址为2,如图所示.这种存取方式称为"字节.位"寻址方式.输入字节IB3(B是Byte的缩写)由I3.0~I3.7这8位组成.位数据的表示2)字节(Byte) 8位二进制数组成1个字节(Byte,如下图,其中的第0位为最低位(LSB),第7位为最高位(MSB).3)字(Word) 相邻两个字节组成一个字,字用来表示无符号数.MWl00是由MB1OO和MB1O1组成的1个字,如图5.4.3,MB00为高位字节.MW100中的M为区域标示符,W表示字,100为字的起始字节MB1O0的地址.字的取值范围为W#16#0000~W#16#FFFF. 4) 双字(Double Word) 两个字组成1个双字,双字用来表示无符号数.MD100是由MB100~MB103组成的1个双字,(见上图),MB100为高位宇节, D表示双字,100为双字的起始字节MB100的地址.双字的取值范围为DW#16#0000_0000~DW#16#FFFF_FFFF.常数的表示方法常数值可以是字节,字或双字,CPU以二进制方式存储常数,常数也可以用十进制,十六进制,ASCII 码或浮点数形式来表示.B#16#,W#16#,DW#16#分别用来表示十六进制字节,字和双字常数.2#用来表示二进制常数,例如2#1101_1010. L#为32位双整数常数,例如L# +5. P#为地址指针常数,例如P#M2.O是M2.0的地址. S5T#是16位S5时间常数,格式为S5T# aD_bH_cM_dS_eMS.其中a,b,c,d,e分别是日, 小时,分,秒和毫秒的数值.输入时可以省掉下划线, 例如S5T#4S30MS=4s30ms,S5T#2H15M30S=2小时15分30秒. C#为计数器常数(BCD码),例如C#250.状态字状态字用于表示CPU执行指令时所具有的状态.某些指令可否执行或以何种方式执行可能取决于状态字中的某些位,指令执行时也可能改变状态字中的某些位,可以用位逻辑指令或字逻辑指令访问并检测状态字.状态字的结构如图所示.逻辑操作结果(RLO) 状态字的第1位称为逻辑操作结果(Result of Logic Operation, RLO).该位存储逻辑操作指令或比较指令的结果.在逻辑串中,RLO位的状态表示有关信号流的信息,RLO的状态为1, 表明有信号流(通),RLO的状态为0,表明无信号流(断).可用RLO触发跳转指令. 溢出位(OV) 状态字的第4位称为溢出位.当算术运算或浮点数比较指被置1,如果执行结果正常,该位被清0. 令执行时出现错误(溢出,非法操作,不规范格式)时,OV位条件码l(CCl)和条件码0(CC0) 状态字的第7位和第6位称为条件码1和条件码0.这两位结合起来用于表示在累加器1中产生的算术运算结果与0的大小关系,表1 算术运算后的CC1和CC0表2 比较,移位,字逻辑指令后的CCl和CC0寻址方式所谓寻址方式是指指令得到操作数的方式,可以直接或间接给出操作数的地址.STEP-7有4种寻址方式:立即寻址,存储器直接寻址,存储器间接寻址和寄存器间接寻址. 1 立即寻址立即寻址是对常数或常量的寻址万式,其特点是操作数直接包含在指令中,或者指令的操作数是惟一的.例如: SET AW W#16#117 // 将RLO置1 辑运算L 43 //将整数43装入累加器1中//将常数W#16#117与累加器1进行"与"逻2 存储器直接寻址存储器直接寻址的特点是直接给出操作数的存储单元地址.例如O I0.2 //对输入位I0.2进行"或"逻辑运算R Q4.0 = Ml.1 L Cl //将输出位Q4.0清"0" //使Ml.1的内容等于RLO的内容//将计数器Cl中的计数值装入累加器1 T MW6 //将累加器1中的内容传送给MW63 存储器间接寻址存储器间接寻址的特点是用指针进行寻址.操作数存储在由指针给出的存储单元中,根据要描述的地址复杂程度,地址指针可以是字或双字的,存储指针的存储器也应是字或双字的.对于T,C,FB,FC, DB,由于其地址范围为0~65535,可使用字指针; 对于I,Q,M等,可能要使用双字指针.使用双字指针时,必须保证指针中的位编号为"0".存储器间接寻址的指针格式如图所示.存储器间接寻址的指针格式例存储器间接寻址的指针格式及寻址L +6 T WM1 OPN T MD5 //将整数6装入累加器1//将累加器1的内容传送给存储器MWl //打开由MWl 指出的数据块,即打开数据块DB6//将累加器1的内容传送到存储器MD5A I[MDl] //对输入位I8.7进行逻辑"与"操作= Q[MD5] //将RLO赋值给输出位Q12.74 寄存器间接寻址寄存器间接寻址的特点是通过地址寄存器寻址.S7中有两个地址寄存器:ARl和AR2, 地址寄存器的内容加上偏移量形成地址指针,指向操作数所在的存储单元. 寄存器间接寻址有两种形式:区域内寄存器间接寻址和区域司寄存器间接寻址.寄存器间接寻址的指针格式如图所示.寄存器间接寻址的指针格式地址指针区域标识位的含义使用寄器指针格式访问一个字节,字或双字时,必须保证指针中位地址的编号为0.下面是区间间接寻址的例子: L P#5.0 LAR1 //将间接寻址的指针装入累加器1 //将累加器1中的内容送到地址寄存器1A M[AR1,P#2.3] //AR1中的P#5.0加偏移量P#2.3,实际上是对M7.3进行操作= Q[AR1,P#0.2] //逻辑运算结果送Q5.2 L DBW[AR1,P#18.0] //将DBW23装入累加器1 下面是区域间间接寻址的例子: L P#M6.0 LAR1 //将存储器位M6.0的双字指针装入累加器1 //将累加器1中的内容送到地址寄存器1 T W[AR1,P#50.0] //将累加器1的内容传送到存储器字MW56基本指令及其编程1,位逻辑指令位逻辑指令状态寄存器触点在S7-300/400PLC中,CPU中有一个专门用于存储指令执行状态的16位状态寄存器,状态寄存器以二进制位的形式保存指令的执行结果与中间状态等,在梯形图编程时,这些标志可以用触点的形式在梯形图中使用与编程,S7300/400PLC可以使用的状态寄存器触点如下表所示.状态寄存器触点1,"与"(A),"与非"(AN)A:"与"指令适用于单个常开触点串联,完成逻辑"与"运算. AN:"与非"指令适用于单个常闭触点串联,完成逻辑"与非" 运算."与"(A),"与非"(AN)指令由图可知,触点串联指令也用于串联逻辑行的开始.CPU 对逻辑行开始第1条语句如I1.0的扫描称为首次扫描.首次扫描的结果(I1.0的状态)被直接保存在RLO(逻辑操作结果位)中; 在下一条语句,扫描触点Q5.3的状态,并将这次扫描的结果和RLO中保存的上一次结果相"与"产生的结果,再存入RLO中,如此依次进行.在逻辑串结束处的RLO可作进一步处理. 如赋值给Q4.2(=Q4.2).2 ,"或"(O),"或非"(ON) )," ), 或非" )O:"或"指令适用于单个常开触点并联,完成逻辑"或"的运算. ON:"或非"指令适用于单个常闭触点并联,完成逻辑"或非"运算."或"(O),"或非"(ON)指令由图可知,触点并联指令也用于一个并联逻辑行的开始.CPU对逻辑行开始第1条语句如I4.0的扫描称为首次扫描.首次扫描的结果(I4.0的状态)被直接保存在RLO(逻辑操作结果位)中,并和下一条语句的扫描结果相"或",产生新的结果再存入RLO中,如此一次进行.在逻辑串结束处的RLO 可用作进一步处理,如赋值给Q8.0(=Q8.0). 此外,还有"异或"(X),"异或非" (XN),嵌套指令等等.3,输出线圈,输出线圈指令即逻辑串输出指令,又称赋值指令,该指令把RLO中的置赋给指定的位地址,当RLO变化时,相应位地址信号状态也变化,在LAD中,只能将输出指令放在触点电路的最右端,不能将输出指令单独放在一个空网络中.下图是两个应用举例.4,中间输出如图所示,中间输出指令被安置在逻辑串中间,用于将其前面的位逻辑操作结果(即本位置的RLO值)保存到指定地址,所以有时也称为"连接器"或"中间赋值元件".它和其他元件串联时, "连接器"指令和触点一样插入.连接器不能直接连接母线,也不能放在逻辑串的结尾或分支结尾处.5 置位指令,复位指令置位指令,置位/复位指令也是一种输出指令.使用置位指令时,如果RLO =1,则指定的地址被置为1,而且一直保持,直到被复位为0.使用复位指令时,如果RLO=1,则指定的地址被复位为0,而且一直保持,直到被置位为1,如图所示.6 触发器指令触发器有置位复位触发器(SR触发器)和复位置位触发器(RS 触发器)两种,这两种触发器指令均可实现对指定位地址的置位或复位.触发器可以用在逻辑串最右端,结束一个逻辑串;也可用在逻辑串中,当作一个特殊触点,影响右边的逻辑操作结果.置位优先型RS触发器如下图所示.7 边沿检测指令当信号状态变化时就产生跳变沿:从0变到1时,产生一个上升沿(也称正跳沿);从1变到0时,产生一个下降沿(也称负跳变). 跳变沿检测的方法是:在每个扫描周期(OB1循环扫描一周),把当前信号状态和它在前一个扫描周期的状态相比较,若不同,则表明有一个跳变沿.因此,前一个周期里的信号状态必须被存储,以便能和新的信号状态相比较. S7-300/400PLC有两种边沿检测指令:一种是对逻辑串操作结果RLO的跳变沿检测的指令;另一种是对单个触点跳变沿检测的指令. (1) RLO跳变沿检测指令RLO跳变沿检测可分别检测正跳沿和负跳沿.①当RLO从0到1时,正跳沿检测指令在当前扫描周期以RLO=0表示其变化,而在其他扫描周期均为0.在执行RLO正跳沿检测指令前,RLO的状态存储在位地址中. ②当RLO从1到0时,负跳沿检测指令在当前扫描周期以RLO=1表示其变化,而在其他扫描周期均为0.在执行RLO 负跳沿检测指令前,RLO的状态存储在位地址中. RLO跳变沿检测指令和操作数见下表.RLO跳变沿检测指令和操作数(2) 触点跳变沿检测指令触点跳变沿检测可分别检测正跳沿和负跳沿. ①触点正跳沿检测指令FP:在LAD中以功能框表示,它有两个输入端,一个直接连接要检测的触点,另一个输入端M_BIT所接的位存储器上存储上一个扫描周期触点的状态.有一个输出端Q,当触点状态从0到1时,输出端Q接通一个扫描周期.②触点负跳沿检测指令FN:在LAD中以功能框表示,它有两个输入端,一个直接连接要检测的触点,另一个输入端M_BIT所接的位存储器上存储上一个扫描周期触点的状态.有一个输出端Q,当触点状态从1到0时,输出端Q接通一个扫描周期.触点跳变沿检测指令和操作数LAD(a)程序行要检测的是逻辑串I1.0,I1.1的运算结果的跳变边沿,即图中①点处的RLO的边沿变化情况,同时用M1.0来存储RLO①的状态.程序的工作过程如时序图:当程序运行到图中a点时,当前RLO值是1,而上次RLO值(存放在M1.0中)是0, 于是FP指令判断到一个RLO的正跳沿,就将②点处的M1.0置1, 并且输出给M8.0;当程序经过1个扫描周期,运行到波形图中b点时,当前RLO值和前一个RLO 值均为1,相同(RLO在相邻两个扫描周期中相同,可全为1或0),那么FP指令将②点处M1.0置0, 并输出给M8.0.这样M8.0为1的时间仅一个周期.图中虚线箭头指的是两个相邻扫描周期RLO的比较. 对RLO下降沿的检测,读者可自行分析c点,d点时的情况,FN 指令检测到一个RLO①的负跳沿时将M8.1置1,M8.1为1的时间也是一个周期.位逻辑指令的应用举例机床的工作台运动示意图工作台由交流电动机驱动,改变电动机的旋转方向就可以改变工作台的运动方向.按下启动按钮SBl后,电动机驱动工作台运动,如果工作台运动到极限位置时,由行程开关SQl或SQ2检测并发出停止前进指令,同时自动发出返回指令.只要不按停止按钮SB2,工作台将继续这种自动往复运动.工作台驱动电动机通过热继电器做过载保护.I/O地址分配表系统梯形图程序二,定时器指令S7-300/400PLC提供了多种型式的定时器,定时器的语句表指令如表1所示,梯形图指令与操作数如表2所示.不同类型定时器的编号是统一的,如CPU314为T0~T127(共128个),究竟它属于哪种定时器类型由对它所用的指令决定. 定时器的语句表指令定时器的梯形图指令与操作数1,脉冲定时器(SP)这是一种产生一个"长度脉冲",即接通一定时间的定时器,图中当I0.0闭合(RLO有正跳沿),SP定时器T4启动并运行,T4触点立即动作,T4常开触点闭合,只要I0.0保持闭合,T4继续运行,T4常开触点保持闭合.当定时时间到(图中为3s), T4常开触点断开.所以只要I0.0维持足够长的时间(超过设定时间)及无复位信号(I0.1未接通) 两个条件成立,定时器就能接通一固定时间(所设定时间).2,延时脉冲定时器(SE) ,延时脉冲定时器( )图中当I0.0闭合(RLO有正跳沿),SE定时器T4启动运行,T4触点立即动作,其常开触点闭合,此时即使I0.0断开,T4仍将继续运行,T4 常开触点也一直保持闭合直至所设定的时间.只要I0.0不在设定时间内反复短时通断,T4均可设定长时间的接通.如果出现I0.0短时反复通断, 导致T4的反复响应,会使总接通时间大于设定时间(图中t>3s处).I0.1闭合,启动复位信号, 定时器T4立即复位(停止运行).启动延时接通定时器(SD)控制中,有些控制动作要比输入信号滞后一段时间开始,但和输入信号一起停止,为了满足这样的要求, 可采用启动延时接通定时器,其工作过程如下图所示. 图中,当I0.0闭合(RLO有正跳沿),SD定时器T4 启动运行,当设定的延时时间3s到后,T4触点动作, T4的常开触点闭合,直至I0.0断开,T4运行随之停止, T4常开触点断开.I0.0闭合时间小于定时器T4设定延时时间,T4触点不会动作.I0.1闭合,启动复位信号, 定时器T4立即复位(停止运行).4 启动保持型延时接通定时器(SS)如果希望输入信号接通后(接通短时即断开,或持续接通), 在设定延迟时间后才有输出,就需要用启动保持型延时接通定时器.其工作过程如下图. 图中当I0.0闭合一下或闭合较长时间(RLO有正跳沿),SS 定时器T4启动运行,当设定的延时时间3s到后,T4线圈得电, T4常开触点就闭合,此后一直闭合,直至I0.1闭合,复位指令使T4复位.只有复位指令才能令动作了的SS定时器复位,因此使用SS定时器必须编写复位指令(R),其他定时方式可根据需要而定. 在设定延时时间内,如果I0.0反复通断,会影响定时器触点延迟接通时间.5, 启动延时断开定时器(SF)图中I0.0闭合,SF定时器T4启动,其触点立即动作, 常开触点T4立即闭合.当I0.0断开(RLO有负跳沿)时开始计时,在定时的延时时间未到之前,其触点不会动作,常开触点T4不会断开.当延时时间到,常开触点T4 才会断开.在延时时间内I0.1闭合,复位信号可令T4立即复位,常开触点立即断开.不在定时延时时间内,复位(R)信号对SF定时器不起作用. 在I0.0断开的时刻,如果存在复位信号,则SF定时器立即复位.计数器指令在生产过程中常常要对现场事物发生的次数进行记录并据此发出控制命令,计数器就是为了完成这一功能而开发的用线圈表示的计数器指令用功能块表示的计数器指令及操作数减计数器的使用当输入I0.1从0跳变为1时,CPU将装入累加器1中的计数初值(此处为BCD数值127)置入指定的计数器C20 中.计数器一般是正跳沿计数.当输入I0.3由0跳变到1, 每一个正跳沿使计数器C20的计数值减1(减计数),若I0.3没有正跳沿,计数器C20的计数值保持不变.当I0.3 正跳变127次,计数器C20中的计数值减为0.计数值为0 后,I0.3再有正跳沿,计数值0也不会再变.计数器C20 的计数值若不等于0,则C20输出状态为1,Q4.0也为1; 当计数值等于0时,C20输出状态亦为0,Q4.0为0.输入I0.4若为1,计数器立即被复位,计数值复位为0,C20输出状态为0.可逆计数器的使用..I0.2CUI0.3 I0.1CDS C#5 I0.4 5 当前计数值MW10 MW12 4 3 2 1 0 PV R Q4.0. .图中当S(置位)输入端的I0.1从0跳变到1时,计数器就设定为PV端输入的值,PV输入端可用BCD码指定设定值,也可用存储BCD数的单元指定设定值,本图中指定BCD数为5.当CU (加计数)输入端I0.2从0变到1时,计数器的当前值加1(最大999).当CD(减计数)输入端I0.3从0变到1时,计数器的当前值减1(最小为0).如果两个计数输入端都有正跳沿,则加, 减操作都执行,计数保持不变.当计数值大于0时输出Q上的信号状态为1;当计数值等于0时,Q上的信号为0,图中Q4.0也相应为1或0.输出端CV和CV_BCD分别输出计数器当前的二进制计数值和BCD计数值,图中MW10存当前二进制计数值,MW12 存当前BCD计数值.当R(复位)输入端的I0.4为1,计数器的值置为0,计数器不能计数,也不能置位.下面介绍常用的功能指令的使用方法.1 装载与传送指令数据装载与传送指令用于在各个存储区之间交换数据及存储区与过程输入/输出模板之间交换数据.CPU在每次扫描中无条件执行数据装载与传送指令,而不受RLO的影响. L T T T L (1)对累加器1的装载和传输指令+8 //将立即数装载人累加器1中//将累加器1的内容传输给输出QBl0 //将累加器1的内容传输给存储字MWl4 //将累加器1的内容传输给数据双字DBD2IB[DID8] //将数据双字DID8所指的输入字节装载入累加器1中QBl0 MWl4 DBD2(2)读取或传输状态宇L T STW STW //将状态字中的内容装入累加器1 中//将累加器1中的内容传输到状态字中(3)装载时间值或计数值LC L Tl Cl //将定时器Tl中的时间值以BCD码格式装入累加器1中//将计数器Cl中的二进制格式的计数值装入累加器的低字中传输指令的应用传输指令EN端为允许输入端;ENO端为允许输出端.当输入I0.0 为"1"时,传输指令将MWl0中的字传输给MW20.如果指令正确执行,则输出Q4.0为"1".否则,如果输入I0.0为"0",则数据不传输.如果希望MWl0无条件传输给MW20,则EN端直接连接至母线即可.整数比较指令的使用输入信号I0.0的RLO为"1"时,比较整数MW0的值是否大于等于MW2的值,如果是,则输出Q4.0为"1".1。
朗风快学PLC(八)西门子S7-300的程序结构OB,FB,FC,DB想要学习西门子PLC,OB,FB,FC和DB是必须要学习的!那么它们在整个程序里面起到什么作用呢?今天带大家了解一下。
OB是西门子300/400里面最重要的组织块,从OB1-OB122它们有很多不同的功能,今天我们将最常用的OB1,OB1是主程序循环,一个程序中90%的指令都是写在OB1里面或者是在OB1里面调用的,那么其他10%写在哪?答案是其他的组织块里面。
PLC采用循环扫描的工作方式。
从OB1的第一行扫描到最后一行。
但是对于300系列PLC,程序都是非常多的。
即使是90%的程序写在OB1里面也是不现实的。
所以需要调用FB和FC。
进而使得程序可看性更强一些。
这也就是结构化编程。
FB和FC块,我们从两者的名字就可以进行区分,可以用一个公式即FB=FC+DB来表示,FB是具有DB背景块的特殊FC,也就是说FB具有FC的功能,同时拥有一个DB块。
FC全称是Function函数。
注:DB块全称DataBlock 数据存储区域,类似数据库中关系表结构。
那首先什么函数呢?函数 f(x)就像机器或黑箱,给予输入值x便产生唯一输出值f (x)。
x是自变量,f(x)是因变量。
我们再看一下FB和FC的内部结构,作为一个块拥有属于自己的管脚,其中包括:IN——变量从外部输入,只能被本程序读,不能被本程序写。
OUT——是由本程序块输出的,可以被本程序块读写,其他程序只能读这个值而不能写。
IN_OUT——输入输出变量,本程序和其他程序都可以读写这个引脚的值。
TEMP——临时变量,顾名思义是暂时存储数据的变量。
这些临时的数据存储在CPU工作储存区的局部数据堆栈(即L区)中。
STAT——在plc运行期间始终被存储,S7将静态变量定义在背景数据块(仅FB拥有静态变量),当被调用时可以读写静态变量,调用结束后静态变量保存在数据块中,静态变量在某种程度上可以作为全局变量来进行使用,但使用时需要注意,这里不建议新手使用。
1./******************************************************************/2./**************************************************************** */3./*4./* 步进电机加减速运行程序5./* 步进电机启动时,转速由慢到快逐步加速。
6./* 步进电机匀速运行7./* 步进电机由快到慢逐步减速到停止8./*9./**************************************************************** **/10.11.#include <reg52.h>12.#include <string.h>13.14.#define uchar unsigned char15.#define uint unsigned int16.17.sbit addr0 = P1^4;18.sbit addr1 = P1^5;19.sbit addr2 = P1^6;20.sbit addr3 = P1^7;21.22.uchar code FFW[8]={0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06};//正转数组23.uchar code REV[8]={0x06,0x07,0x03,0x0b,0x09,0x0d,0x0c,0x0e};//反转数组24.uchar rate ;25./********************************************************/26./*27./* 延时28./* 11.0592MHz时钟,29./*30./********************************************************/31.void delay()32. {33. uchar k;34. uint s;36.do37. {38.for(s = 0 ; s <100 ; s++) ;39. }while(--k);40. }41.42.43.void delay2(uchar k)44. {45.46. uchar s;47.for(s = 0 ; s <k ; s++) ;48.49. }50.51./********************************************************/52./*53./*步进电机正转54./*55./********************************************************/56.void motor_ffw()57.{58. uchar i;59.60.for (i=0; i<8; i++) //一个周期转30度61. {62. P0 = FFW[i];//取数据63. addr0 = 1;64. addr1 = 0;65. addr2 = 1;66. addr3 = 1;67. addr3 = 0;68. delay(); //调节转速69. }70.}71.72./********************************************************/73./*74./*步进电机反转75./*76./********************************************************/77.void motor_rev()78.{80.81.for (i=0; i<8; i++) //一个周期转30度82. {83. P0 = REV[i]; //取数据84. addr0 = 1;85. addr1 = 0;86. addr2 = 1;87. addr3 = 1;88. addr3 = 0;89. delay(); //调节转速90. }91.}92.93./********************************************************94.*95.*步进电机运行96.*97.*********************************************************/98.void motor_turn()99.{100. uchar x;101. rate=0x30;102. x=0xf0;103.do104. {105. motor_ffw(); //正转加速106. rate--;107. }while(rate!=0x0a); 108.109.do110. {111. motor_ffw(); //正转匀速112. x--;113. }while(x!=0x01); 114.115.do116. {117. motor_ffw(); //正转减速118. rate++;119. }while(rate!=0x30); 120.do121. {122. motor_rev(); //反转加速123. rate--;124. }while(rate!=0x0a); 125.126.do127. {128. motor_rev(); //反转匀速129. x--;130. }while(x!=0x01); 131.132.do133. {134. motor_rev(); //反转减速135. rate++;136. }while(rate!=0x30);137.}138.139./******************************************************** 140.* 141.* 主程序142.*143.*********************************************************/ 144.main()145.{146.147. P1=0xf0;148.149.while(1)150. {151. P0 = 0x00;//ULN2003输出高电平152. addr0 = 1; 153. addr1 = 0; 154. addr2 = 1; 155. addr3 = 1; 156. addr3 = 0; 157. delay2(255); 158.159. motor_turn(); 160.161. }162.}。
西门子PLC的数学运算指令梯形图编程 -西门子plc1.整数、双整数、浮点数的四则运算西门子S7-200/300/400plc的四则运算指令基本相同,主要是对两个操作数的加、减、乘、除运算,操作数可以是整数、双整数、浮点数等。
S7-200与S7-300/400的指令格式相像,梯形图程序格式如图10-7.1所示。
图中的IN1为四则运算中的被加数、被减数、被乘数、被除数;IN2为加数、减数、乘数、除数:OUT为运算结果存储器地址。
从图10-7.1可见,尽管S7-200与S7-300/400的梯形图指令相同,但从转换后的指令表可以看出两者在执行过程中存在差异。
S7-200的执行过程如下:①将操作数l(被加数、被减数、被乘数、被除数)移动到结果存储器;②将结果存储器(操作数1)与操作数2(加数、减数、乘数、除数)进行运算,并将运算结果存储到结果存储器中。
S7-300/400的执行过程如下:①将操作数l(被加数、被减数、被乘数、被除数)读入到累加器l 中:②将操作数2(加数、减数、乘数、除数)读入到累加器1中,原累加器1中的操作数l移动到累加器2中:③累加器2中的内容与累加器l运算,运算结果存储在累加器l中;④累加器1的运算结果传送到结果存储器中。
四则运算编程时应留意以下几点:①在S7-200中,整数、双整数的运算结果仍旧为整数与双整数,因此,在程序中应留意防止因运算结果溢出而导致的执行错误。
②在S7-200中整数、双整数的除法运算DIV—I、DIV- DI指令,以及S7-300/400的DIV_ DI指令,除法运算的结果不保留余数。
③对于S7-200的整数除法,假如需要余数,可以使用DIV指令。
DIV 指令要求的输出存储器OUT为32位,执行DIV指令后,两个整数的除法运算可以得到32位运算结果,输出存储器OUT的高16位用于存储余数,低16位用于存储商。
④S7-200的双整数除法无法保留余数。
⑤对于S7-300/400的整数除法,可以自动生成余数,执行DIV I指令后,累加器l的高16位存储余数,低16位存储商。
西门子PLC与步进电机驱动器控制步进电机。
在对步进电机进行控制时,常常会采用步进电机驱动器对其进行控制。
步进电机驱动器采用超大规模的硬件集成电路,具有高度的抗干扰性以及快速的响应性,不易出现死机或丢步现象。
使用步进电机驱动器控制步进电机,可以不考虑各相的时序问题(由驱动器处理),只要考虑输出脉冲的频率(控制驱动器CP糙』及步进电机的方向(控制驱动器的龙翔)。
PLC的控制稈序也简单得多。
但是,在使用步进电机驱动器时,往往需要较高频率的脉冲。
因此PLC是否能产生高频脉冲成为能否成功控制步进电机驱动器以及步进电机的关键。
西门子CPU312C、CPU313C、CPU313-2DP 等型号,集成有用于高速计数以及高频脉冲输出的通道,可用于高速计数或高频脉冲输出。
o下面以CPU313C为例,说明高频脉冲输出的控制过程。
o CPU313C集成有3个用于高速计数或高频脉冲输出的特殊通道,3个通道位于CPU313C集成数字量输出点首位字节的最低三位,这三位通常情况卞可以作为普通的数字量输出点来使用。
再需要高频脉冲输出时,可通过硕件设置定义这三位的属性,将其作为高频脉冲输出通道来使用。
作为普通数字量输出点使用时,其系统默 认地址为Q124.0、Q124.1、Q124.2 (该地址用户可根据需要自行修改),作 为高速脉冲输出时,对应的通道分别为0 通道、1通道、2通道(通道号为固定值, 用户不能自行修改)。
每一通道都可输出 最高频率为2.5KHZ (周期为0.4ms )的 高频脉冲。
如图所示:CPU313C 中,X2前接线端子 22、23、24号接线端子分别对应通道0、 通道1、和通道3。
另外,每个通道都有自 己的硕件控制门,0通道的硕件门对应X2 前接线端子的4号接线端子,对应的输入 点默认地址为I124.2o 1通道硬件门7号 接线端子,对应的输入点默认地址为 1124.5,而2号通道硬件门为12号接线端 子,对应的输入点默认地址为1125.0oX2G至丈生「1213141151J6IJ7I 8亡2T13ll4r 5r6c7D B W ^-I n o B M ・ ・MHM M ■1234S 6789W 123456789M_ Ji —B EPn.n。
S7-300系列PLC应用系统设计PLC应用系统设计的内容和步骤PLC应用系统的硬件设计PLC应用系统的软件设计PLC应用系统设计实例PLC应用系统设计的内容和步骤系统设计的原则与内容1.设计原则(1) 最大限度地满足被控设备或生产过程的控制要求;(2) 在满足控制要求的前提下,力求简单、经济,操作方便;(3) 保证控制系统工作安全可靠;(4) 考虑到今后的发展改进,应适当留有进一步扩展的余地。
2.设计内容(1) 拟定控制系统设计的技术条件,它是整个设计的依据;(2) 选择电气传动形式和电动机、电磁阀等执行机构;(3) 选定PLC的型号;(4) 编制PLC的输入输出分配表或绘制输入输出端子接线图;(5) 根据系统要求编写软件说明书,然后再进行程序设计;(6) 重视人机界面的设计,增强人与机器之间的友善关系;(7) 设计操作台、电气柜及非标准电器元部件;(8) 编写设计说明书和使用说明书。
系统设计和调试的主要步骤1.深入了解和分析被控对象的工艺条件和控制要求2.确定IO设备,常用的输入设备有按钮、选择开关、行程开关、传感器等,常用的输出设备有继电器、接触器、指示灯、电磁阀等。
3.选择合适的PLC类型,根据已确定的用户IO设备,统计所需的输入信号和输出信号的点数,选择合适的PLC类型。
4.分配IO点,编制出输入输出端子的接线图。
5.设计应用系统梯形图程序,这一步是整个应用系统设计最核心的工作。
6.将程序输入PLC,当使用计算机上编程时,可将程序下载到PLC中。
7.进行软件测试,在将PLC连接到现场设备上之前,必须进行软件测试,以排除程序中的错误。
8.应用系统整体调试,在PLC软硬件设计和控制柜及现场施工完成后,就可以进行整个系统的联机调试。
调试中发现的问题要逐一排除,直至调试成功。
9.编制技术文件,系统技术文件包括功能说明书、电气原理图、电器布置图、电气元件明细表、PLC梯形图等。
PLC选型在满足控制要求的前提下,选型时应选择最佳的性能价格比,具体应考虑以下几点。
目录目录 (1)第一章概要 (2)1.1 基于PLC通信控制电机多段速设计背景 (2)1.2 网络化控制电机多段速设计技术目标 (2)第二章系统设计 (3)2.1 设计总体规划 (3)2.2 系统组成 (3)第三章硬件系统设计介绍 (4)3.1 西门子MM420变频器 (4)3.2 西门子S7-300PLC (5)3.3 西门子S7-200PLC (7)3.4 三相笼型异步电动机 (8)3.5 PROFIBUS-DP网络通讯 (9)第四章软件设计 (13)4.1 S7-300PLC软件上的硬件组态与编程 (13)4.2 S7-200PLC的软件编写 (18)4.3 WinCC监控软件制作与监控 (18)总结 (26)参考文献 (27)附录 (28)第一章概要1.1 基于PLC通信控制电机多段速设计背景当今,对电动机的控制在各行各业中有着极其重要的作用,电机是生产生活中必不可少的动力源、能量源。
而对电机控制的方法有很多种,主要对电机转速的控制可通过改变电压或改变频率等方法实现控制要求,但每种方法都有自己的利弊。
现阶段电机变频调速的理论与实践已很成熟,对电机变频调速的应用已相当广泛,变频器的种类功能相当强大,对变频器的控制也有很多种方法。
用PLC与变频器联合的方法控制电机的多段速是实用又常用的手段之一。
电机多段速控制可在很多的领域上应用,例如生产线、传送运输线、轧钢机等领域。
所以对电机多段速控制的研究,使之达到规定的某种生产工艺、要求,实现某些特定的控制功能是有现实意义的。
1.2 网络化控制电机多段速设计技术目标本实训网络化控制电机多段速设计应该具有以下技术要求:1)基于PROFIBUS-DP网络的现场总线通信技术,实现西门子S7-300与S7-200PLC 的通信。
2)完成硬件设计,熟悉西门子S7-300、S7-200与MM420变频器的硬件构造与使用方法,连线的方法与注意事项。
3)软件设计:实现电机多段速的控制,在S7-300里编写控制的逻辑程序,实现全自动定时多段速控制,在S7-200里编写通信传送程序,将S7-300里传送过来的数据结果传送给S7-200的控制端口。
西门⼦PLC300电机加减速功能块例⼦程序
西门⼦PLC300电机加减速功能块例⼦程序
在⼯程中,电机的速度控制⽅式各种各样,也运⽤⽐较⼴泛,对于⼀些常⽤的功能,我能在编程的时候最好将⼀些通⽤功能编成
封装的块,这样在以后的编程中会极⼤的提⾼编程的效率。
电机运⽤普遍的是变频器控制,对于变频器在就地⾯板上有
加减速按钮,要求在就地模式下可以通过现场⾯板按钮来控制电机
的加减速。
其例⼦程序仿真如下:
这⾥仿真⽤的都是REAL变量,当直接连接仪表采集的信号是需要将
仪表信号转换成REAL数据类型,参考模拟量信号输⼊输出转换。
我们需要采集的信号如下:
在程序中插⼊FC功能块建⽴输⼊输出和临时变量如下
当速度从远程切换到就地的时候,把当前的速度存⼊临时变量。
有
时候电机在运⾏过程中切换的时候以防速度消失造成不必要的⿇烦,所以我们都在当前速度的基础上加减速度。
其梯形图程序如下:。
西门子PLC300电机加减速功能块例子程序
在工程中,电机的速度控制方式各种各样,也运用比较广泛,对于一些常用的功能,我能在编程的时候最好将一些通用功能编成
封装的块,这样在以后的编程中会极大的提高编程的效率。
电机运用普遍的是变频器控制,对于变频器在就地面板上有
加减速按钮,要求在就地模式下可以通过现场面板按钮来控制电机
的加减速。
其例子程序仿真如下:
这里仿真用的都是REAL变量,当直接连接仪表采集的信号是需要将
仪表信号转换成REAL数据类型,参考模拟量信号输入输出转换。
我们需要采集的信号如下:
在程序中插入FC功能块建立输入输出和临时变量如下
当速度从远程切换到就地的时候,把当前的速度存入临时变量。
有
时候电机在运行过程中切换的时候以防速度消失造成不必要的麻烦,所以我们都在当前速度的基础上加减速度。
其梯形图程序如下:
为了通用,我把就地上面说的就地模式封装成使能,当使能上升沿
脉冲来的时候讲速度反馈存入临时变量。
此处的变量ADD_NO是每个脉冲的速度增加值变量,当脉冲到来之时,速度加相应值。
同加速程序
这两段使用脉冲的原因是防止按下时间过程电机不断加速!但是当
加速一直按着,按减速他也加速,减速同理。
所以你可以取消
ADD_S和DEC_S的闭点取消。
其中的M变量也不建议直接使用,最
好建个临时变量来存脉冲。
变频器加速电机一般都是百分比加速,所以做了一个0到100的限值,如果有其它相应的范围,可以自行设定。
最后将临时变量给定到输出变量上。
在梯形图编好之后转化成STL程序如下,可供阅读:
程序段1:
A #En
FP M 30.0
JNB _001
L #SPEED_IN T #Speed1
_001: NOP 0
程序段2
A #En
AN #Dec_S
A #Add_S
FP M 0.0 JNB _002
L #Speed1
L #Add_NO
+R
T #Speed1
_002: NOP 0
程序3:
A #En
AN #Add_S
A #Dec_S
FP M 0.1 JNB _003
L #Speed1
L #Dec_NO
-R
T #Speed1
_003: NOP 0
程序段4:
A #En
= L 4.0
A L 4.0
A(
L #Speed1
L 1.000000e+002 >=R
)
JNB _004
L 1.000000e+002 T #Speed1
_004: NOP 0
A L 4.0
A(
L #Speed1
L 0.000000e+000 <=R
)
JNB _005
L 0.000000e+000 T #Speed1
_005: NOP 0
程序段5:
A #En
JNB _006
L #Speed1
T #Speed_out
_006: NOP 0。