《PLC编程及应用第4版 第3章》由会员分享,可在线阅读,更多相关《PLC编程及应用第4版 第3章(35页珍藏版)》请在金锄头文库上搜索。
1、第3章 S7-200 编程基础,3.1 PLC的编程语言与程序结构 3.1.1 PLC编程语言的国际标准,1. 顺序功能图(Sequential Function Chart)用来编制顺序控制程序,将在第5章详细介绍。 2. 梯形图(Ladder Diagram,LAD) 梯形图程序被划分为若干个网络,一个网络只能有一块独立电路。触点接通时有“能流”(Power Flow)流过线圈。“能流”只能从左向右流动。梯形图和语句表用得最多。,3. 语句表(Instruction List,STL) 语句表程序由指令组成,适合程序设计经验丰富的程序员使用。 4. 功能块图(Function Block
2、Diagram,FBD) 是类似于数字逻辑电路的编程语言,国内很少使用。 5. 结构文本(Structured Text) 为IEC 61131-3标准创建的一种专用的高级编程语言。 6编程语言的相互转换和选用 在S7-200的编程软件中,可以选用梯形图、功能块图和语句表。 梯形图中输入信号(触点)与输出信号(线圈)之间的逻辑关系一目了然,易于理解。设计复杂的数字量控制程序时建议使用梯形图语言。 语句表程序输入方便快捷,还可以为每一条语句加上注释,便于复杂程序的阅读。在设计高级应用程序时,建议使用语句表。,7. SIMATIC指令集与IEC 61131-3指令集 用“选项”对话框切换,一般使用
3、SIMATIC指令集。 3.1.2 S7-200的程序结构 1主程序OB1 每次扫描都要执行主程序。每个项目都必须有且只能有一个主程序。主程序可以调用子程序,子程序又可以调用其他子程序。 2子程序 同一个子程序可以被多次调用,使用子程序可简化程序代码、减少扫描时间。 3中断程序 在中断事件发生时由PLC的操作系统调用中断程序。,3.2 数据类型与寻址方式 3.2.1 数制 1二进制数 (1)用1位二进制数表示数字量 二进制数的1位只能为0和1。用1位二进制数来表示开关量的两种不同的状态,线圈通电、常开触点接通、常闭触点断开为1状态(ON),反之为0状态(OFF)。二进制位的数据类型为BOOL(
4、布尔)型。 (2)多位二进制数 多位二进制数用来表示大于1的数字。从右往左的第n位(最低位为第0位)的权值为2n。2#0000 0100 1000 0110对应的十进制数为,(3)有符号数的表示方法 用二进制补码来表示有符号数,最高位为符号位,最高位为0时为正数,反之为负数。正数的补码是它本身,最大的16位二进制正数为2#0111 1111 1111 1111(32767)。 将正数的补码逐位取反(0变为1,1变为0)后加 1,得到绝对值与它相同的负数的补码。例如将1158的补码2#0000 0100 1000 0110逐位取反后加1,得到1158的补码1111 1011 0111 1010。
5、 2十六进制数 十六进制数用于简化二进制数的表示方法,它的16个数字符号为09和AF(1015),4位二进制数对应于1位十六进制数,例如2#1010 1110 0111 0101可以转换为16#AE75(或AE75H)。十六进制数“逢16进1”,第n位的权值为16n。16#2F对应的十进制数为21611516047。 3BCD码(Binary Coded Decimal) BCD码是各位按二进制编码的十进制数,“逢10进1”,用4位二进制数来表示1位十进制数,每一位只能是2#00002#1001。 用16#表示BCD码,4位BCD码对应于16位二进制数,允许范围为16#9999 16# 000
6、0。,BCD码用于PLC的输入和输出。 拨码开关用来设置多位十进制参数值,PLC用输入点读取的多位拨码开关的输出值就是BCD码,图3-5的拨码开关输出的BCD码为16#829。 电梯的楼层数转换为2位BCD码后,分别送给译码驱动芯片4547。,3.2.2 数据类型 1位 二进制位(bit)的数据类型为BOOL(布尔)。 I3.2 中的I表示输入,3是字节地址,2是字节中的位地址(0 7)。 2字节 一个字节(Byte)由8个位数据组成,IB3由I3.0I3.7这8位组成。第0位为最低位。 3字和双字 相邻的两个字节组成一个字(Word),相邻的两个字或4个字节组成一个双字(Double Wor
7、d)。 字节、字和双字都是无符号数,它们的数值用16#表示。 用VB100的地址编号作为VW100和VD100的地址编号。 组成字和双字的编号最小的字节VB100为VW100和VD100的最高位字节。 I、Q、V、M、S、SM、L均可以按位、字节、字和双字来存取。,416位整数INT和32位双整数DINT都是有符号数。最高位为符号位。 532位浮点数(REAL,实数)可以表示为1.m 2E, ANSI/IEEE标准的浮点数的最高位为符号位,指数e = E +127为8位正整数。尾数的整数部分总是为1,第022位是尾数的小数部分m,第2330位是指数部分e 。 在编程软件中,用小数表示浮点数。浮
8、点数的精度相当于7位十进制数。 6ASCII码字符:美国信息交换标准代码。用单引号表示,例如AB12。 7字符串的数据类型为STRING,由若干个ASCII码字符组成,第一个字节是字符串的长度(0254),后面的每个字符占一个字节。字符串用双引号表示,例如”LINE2”。,3.2.3 CPU的存储区 1过程映像输入寄存器(I):外部输入电路接通时对应的过程映像输入寄存器为ON(1状态),反之为OFF(0状态)。 2过程映像输出寄存器(Q):梯形图中Q0.0的线圈“通电”时,输出模块中对应的硬件继电器的常开触点闭合,外部负载通电,反之则该外部负载断电。 3变量存储区(V):用来存放中间结果和有关
9、数据。 4位存储区(M):类似于继电器控制系统的中间继电器,32个字节。 5定时器存储区(T):定时器、计数器的当前值为16位有符号整数,定时器位用来描述定时器的延时动作的触点的状态。 6计数器存储区(C):计数器用来累计其计数脉冲上升沿的次数。计数器位用来描述计数器的触点的状态。 7高速计数器(HC):用来累计比CPU的扫描速率更快的事件。当前值为32位有符号整数,只读。高速计数器地址举例:HC2。 8累加器(AC0AC3)为32位,可以按字节、字和双字来访问累加器中的数据。按字节、字只能访问累加器的低8位或低16位。,9特殊存储器(SM) 特殊存储器用于CPU与用户程序之间交换信息。例如
10、SM0.0一直为ON; SM0.1仅在执行用户程序的第一个扫描周期为ON。 SM0.4和SM0.5分别提供周期为1min和1s的时钟脉冲。 SM1.0、SM1.1和SM1.2分别为零标志、溢出标志和负数标志。 10局部存储器区域(L):各POU都有自己的64字节的局部存储器,仅仅在它被创建的POU中有效。它们作为暂时存储器,或给子程序传递参数。 变量存储器(V)是全局存储器,可以被所有的POU访问。 11模拟量输入(AI):AI模块将模拟量转换为一个字的数字量。AI地址应从偶数字节开始(例如AIW2),AI为只读数据。 12模拟量输出(AQ):AQ模块将一个字的数字值按比例转换为模拟量。AQ地
11、址应从偶数字节开始(例如AQW2),用户不能读取AQ。 13顺序控制继电器(S):用于顺序控制编程(见5.5节),32字节。 常数的表示方法举例 十进制整数:20047;十六进制数:16#3A8D;二进制数:2#1001 1011;浮点数:50.0;ASCII码:AB12;字符串:”LINE2”。 I、Q、V、M、S、SM和L存储器区均可以按位、字节、字和双字来访问。,3.2.4 直接寻址与间接寻址 1直接寻址 直接寻址指定了存储器的区域、长度和位置,例如VB200。 2间接寻址的指针 间接寻址给出一个被称为地址指针的存储单元的地址,32位地址指针里存放的是真正的操作数的地址。只能用V、L或累
12、加器作指针。 间接寻址可用于访问 I、Q、V、M、S、AI、AQ、SM,以及T和C的当前值。不能访问单个位(bit)地址、HC、L存储区和累加器。 指令“MOVD &VB200, AC1”将VB200的地址&VB200传送给AC1。,3用指针访问数据 指令“MOVW *AC1, AC0”将指针AC1所指的VW200中的数据( *AC1)传送给AC0。 4修改指针 用指针访问相邻的下一个字节时,双字指针值加1;访问字时,指针值加2;访问双字时,指针值加4。 【例3-1】 用于非线性校正的表格存放在VW100开始的10个字中,表格的偏移量(表格中字的序号,第1个字的序号为0)在VD20中,在I0.
13、0的上升沿,用间接寻址将表格中相对于偏移量的数据值传送到VW24中去。用AC1作地址指针。下面是语句表程序。 LD I0.0 EU/在I0.0的上升沿 MOVD &VB100, AC1/表格的起始地址送AC1 +D VD20, AC1 +D VD20, AC1/起始地址加偏移量 MOVW *AC1, VW24/读取表格中的数据 一个字由两个字节组成,地址相邻的两个字的地址增量为2(两个字节),所以用了两条双整数加法指令。,3.3 位逻辑指令 3.3.1 触点指令与堆栈指令 1标准触点指令 常开触点对应的位地址为ON时,该触点闭合。常闭触点对应的位地址为OFF时,该触点闭合。 LD、A和O指令表
14、示开始、串联和并联的常开触点, LDN、AN和ON指令表示开始、串联和并联的常闭触点。 2输出指令 输出指令(=)对应于梯形图中的线圈。梯形图中两个并联的线圈用两条相邻的输出指令来表示。有“能流”流过线圈时,输出指令指定的位地址的值为1。,图3-13 触点与输出指令 图3-14 上升沿检测,【例3-2】 已知图3-14中I0.1的波形,画出M0.0的波形。 在I0.1上升沿之前,I0.1的常开触点断开,M0.0和M0.1均为OFF,其波形用低电平表示。 在I0.1的上升沿,I0.1和M0.1的触点同时闭合,M0.0变为ON。 从上升沿之后的第二个扫描周期开始,M0.1为ON,其常闭触点断开,使
15、M0.0为OFF。M0.0只是在I0.1的上升沿ON一个扫描周期。 交换上下两行电路,M0.0的线圈不会通电。,3逻辑堆栈的基本概念 S7-200有一个9位的堆栈,最上面的第一层称为栈顶。堆栈中的数据一般按“先进后出”的原则访问。 执行LD指令时,将指令指定的位地址中的二进制数装载入栈顶。 执行A(与)指令时,指令指定的位地址中的二进制数和栈顶中的二进制数作“与”运算,运算结果存入栈顶。栈顶之外其他各层的值不变。 执行O(或)指令时,指令指定的位地址中的二进制数和栈顶中的二进制数作“或”运算,运算结果存入栈顶。,4或装载指令OLD 图3-15中前两条指令执行完后,“与”运算的结果S0 存放在堆
16、栈的栈顶,第3、4条指令执行完后,“与”运算的结果S1 压入栈顶(见图3-16),原来在栈顶的S0被推到堆栈的第2层,下面各层的数据依次下移一层。 OLD指令对堆栈第一、二层的二进制数作“或”运算,运算结果S2 = S0 + S1存入堆栈的栈顶,第39层中的数据依次向上移动一层。 5与装载指令ALD 图3-15中OLD下面的两条指令并联运算的果 S3被压入栈顶,堆栈中原来的数据依次向下一层推移。 ALD指令对堆栈第一、二层的数据作“与”运算,运算结果S4 = S2 S3存入堆栈的栈顶,第39层中的数据依次向上移动一层。,【例3-3】 已知图3-17中的语句表程序,画出对应的梯形图。 首先将电路划分为若干块,各电路块从含有LD的指令(例如LD、LDI和LDP等)开始,在下一条含有LD的指令(包括ALD和OLD)之前结束;然后分析各块电路之间的串并联关系。 OLD或ALD指令并、