如何读STL程序: 如果读程序时发现自己不明白的语言,可以: 1,转换成梯形图:快捷键ctrl+1,当然大多数都转换不过去; 2,按下F1寻求帮助; 3,下载此程序到模拟器中,单步观察效果,看一看哪些寄存器发生改变。 系统的逻辑错误造成的停机往往是由于提示错误前面的错误引起的。
STL指令及其结构: 定义要执行的功能 执行该操作所需要的信息 语句指令: 操作码 操作数 语句指令: 操作码 操作数 A I 0.1 //对输入继电器 I 0.1 进行与操作 L MW10 //将字MW10装入累加器1 有些语句指令不带操作数,它们操作的对象是唯一的。 NOT //对逻辑操作结果(RLO)取反。
操作数: 表示操作数存放区域及操作数位数(位、字节、字等) 表示操作数在该存储区域内的具体位置 操作数: 标识符 标识参数 L M W 10 操作数: 标识符 标识参数 L M W 10 表示操作数在该存储区域内的具体位置 主标识符:表示操作数所在的存储区 主要有:I(输入映像区),Q(输出映像区),M(位存储区),PI(外部输入),PQ(外部输出),T(定时器),C(计数器),DB(数据块),L(本地数据)等 辅助标识符进一步说明操作数的位数长度 包括有:X(位),B(字节), W(字——2字节), D(双字——4字节) 表示操作数存放区域及操作数位数(位、字节、字等)
操作数表示: √ I IB IW ID Q QB QW QD M MB MW MD PIB PIW PID PQB PQW PQD DBX 存储区域 位 字节 字 双字 输入映像区(I) √ I IB IW ID 输出映像区(Q) Q QB QW QD 位存储区(M) M MB MW MD 外部输入存储区(PI) PIB PIW PID 外部输出存储区(PQ) PQB PQW PQD 数据块(用“OPN DB”打开) DBX DBB DBW DBD 数据块(用“OPN DI”打开) DIX DIB DIW DID 临时堆栈(L) L LB LW LD
寻址方式 : 立即寻址:对常数或常量的寻址方式,操作数本身包含在指令中 立即寻址 SET //把 RLO (Result of Logic Operation)置“1” L 27 //把整数27装人累加器1 L C#0100 //把 BCD码常数0100装入累加器1
数据格式: 系统及网络介绍 7 6 5 4 3 2 1 编程、调试及故障排除 现场设备详细介绍 MB10 MW10 MB11 MD10 10.7 10.6 10.5 10.4 10.3 10.2 10.1 10.0 MB10 MW10 编程、调试及故障排除 MB11 MD10 MW11 MB12 MD11 MW12 MB13 现场设备详细介绍 MD12 MB14 MB15
实例: 系统及网络介绍 编程、调试及故障排除 现场设备详细介绍 数据分配举例
数字表示方法: INT: L 1 D INT : L L#1 REAL: L 1.234567e+13 TIME: L S5T#1H1M50S BYTE: L B#16#10 L byte#16#10 WORD: L 2#1000000000000 L W#16#1000 L word#16#1000 DWORD: L DW#16#A21234 L dword#16#A21234
寻址方式 : 直接寻址:在指令中直接给出操作数的存储单元地址 直接寻址 A I0 . 0 //对输入位I0.0进行“与”逻辑操作 S L20 . 0 //把本地数据位L20.0置1 = M115 . 4 // 将RLO的内容传给位存储区中的位M115.4 L DB1 . DBD 12 //把数据块DB1双字DBD12中的内容传送给累加器1 //双字表示32位,如浮点数为32为双字
寻址方式 : 存储器间接寻址 :标识参数由一个存储器给出,存储器的内容对应该标识参数的值(该值又称为地址指针) 存储器间接寻址 这种寻址方式能动态改变操作数存储器的地址,常用于程序循环过程中的寻址。 A I[MD 2] //对由MD 2指出的输入位进行“与”逻辑操作,如: MD 2值为 //2#0000 0000 0000 0000 0000 0000 0101 0110表示I 10. 6 L IB[DID 4] //将由双字DID 4指出的输入字节装入累加器1,如:DID 4值为 //2#0000 0000 0000 0000 0000 0000 0101 0000表示对IB10操作 OPN DB[MW 2] //打开由字MW2指出的数据块,如MW2为3,则打开DB3
寻址方式 : 寄存器间接寻址 :在S7中有两个地址寄存器(AR1和AR2) 寄存器间接寻址(指针) 地址寄存器的内容 + 偏移量 = 地址指针 L P#8.6 //将P#8.6装入A 1 LAR1 //将累加器1的内容传送至地址寄存器1 L P#10.0 //将P#10.0装入A1 LAR2 //将累加器1的内容传送至地址寄存器2 A I[AR1,P#1.0] //AR1+偏移量(9.6) = Q[AR2,P#4.1] //AR1+偏移量(14.1) LAR1 P##STAT53 // 把指针指向STAT53 L 0 // 把0装入ACCU1 T DIW [AR1,P#0.0] //把地址寄存器内指向起始地址区的数据赋值
在线监视 很多时候需要在线监视的。 在线监视的情况如图,各个寄存器的情况详见下页。
系统的内部寄存器: S7 CPU的寄存器有(7个): 2个32位累加器*** 2个32位地址寄存器** 2个32位数据块地址寄存器 累加器 32位 累加器1 (ACCU1) 主 累加器2 (ACCU2) 辅 2个32位累加器*** 地址寄存器 32位 地址寄存器1 (AR1) 地址寄存器2 (AR2) 2个32位地址寄存器** 数据块地址寄存器 32位 共享数据块 DB 背景数据块 DI 2个32位数据块地址寄存器 状态字寄存器 16位 状态位 1个16位状态字寄存器*
系统存储区: S7-300 CPU有三个基本存储区: 系统存储区―存放操作数据(I/O、位存储、定时器等) 外设I/O存储区 P 输出(映像区) Q 输入(映像区) I 位存储区 M 定时器 T 计数器 C 系统存储区―存放操作数据(I/O、位存储、定时器等) 物理上是CPU的RAM ,存储区的大小因CPU型号而异。 临时本地数据存储区 (L堆栈) 可执行用户程序: ·逻辑块(OB、FB、FC) ·数据块(DB) 工作存储区―①存放CPU运行时,所执行的用户程序单元逻辑块(OB、FB、FC)、数据块(DB)的复制件;②存放临时本地数据,这部分存储区称L堆栈(主要是存放用户程序的临时变量) 物理上是CPU模块的部分RAM 装载存储区――存放用户程序 物理上是CPU的部分RAM、EEPROM、外置FEPROM等 动态装载存储区: 存放用户程序
名 称 存储区 存 储 区 功 能 输入(I) 过程输入映像表 每个扫描周期开始,读取过程输入值,记录输入映像表 访问方式:位、字节、字、双字 输出(O) 过程输出映像表 扫描周期结束,输出映像表内容输出端口 外设输入(PI) 外设输出(PO) 外设输入/输出 外设存储区允许直接访问现场设备 访问方式:字节、字、双字(不能访问位) 位存储区(M) 中间的变量 存放程序运行的中间结果,访问方式:位、字节、字、双字 定时器(T) 定时器 计时时钟访问该存储区中的计时单元 定时器指令可以访问该存储区和计时单元 计数器(C) 计数器 计数器指令可以访问该存储区 临时本地数据存储区(L) L堆栈 在FC、OB块运行时,块变量声明表中临时变量存放在该存储区。 数据块(DB) 数据块 DB块存放数据信息,可被所有逻辑块访问(共享数据块)或被FB块特定占用(背景数据块使用DI访问) 1,外设访问(P)不通过映像区; 2,有些变频器等超出了映像区的范围所以,只能使用外设访问(P) ; 3,外设访问(P)在程序执行到此位置时进行读写操作,而普通的输入输出,则在程序开始读入,结束输出;
状态字: 状态字表示CPU执行指令时所具有的状态,用户程序可以访问和检测状态字,并可以根据状态字中的某些位决定程序的走向和进程。 15 8 7 6 5 4 3 2 1 ······ BR CC1 CC0 OS OV OR STA RLO FC 首次检测位 * 逻辑操作结果* 状态位 或位 溢出位 溢出状态保持位 条件码0 条件码1 二进制结果位
逻辑操作结果(RLO): Result of Logic Operation, RLO 无法判断RLO的数值时,可以查看FC位的情况。 位置:状态字位 “1” 作用:存储位逻辑指令或算术比较指令的结果。 无法判断RLO的数值时,可以查看FC位的情况。 在某行按下F1,就知道该指令是否影响RLO。见下页
STA STA表示被操作的数据的当前状态,0或者1; 仅表示布尔量; 非布尔量的数值以ACCU累加器表示 例如第一句为 AN I0.0 I0.0 现在为0,则STA为0; 但是执行完毕后RLO为1。
FC/RLO的变化示例: 语句表 实际状态 检测结果 RLO FC 说明 FC=0:下一条指令开始新逻辑串 A I 0.0 1 FC=0:下一条指令开始新逻辑串 A I 0.0 1 首次检测结果存放RLO,FC置1 AN I 0.1 检测结果与RLO运算,结果存RLO =Q1.0 RLO赋值给Q1.0,FC清0 I0.0 I0.1 Q1.0
DI 和 DB 的区别 OPN DB #DBMS //以后所有的DB*操作均是对应DB4, 而所有的DI*操作均对应DB433 DI的作用体现在:再单个FB里面调用了除背景数据块外的其他数据块时,可以用DB进行操作,而背景数据块可以使用DI进行操作。如右图:可以 OPN DB #DBMS //以后所有的DB*操作均是对应DB4, 而所有的DI*操作均对应DB433 CDB交换数据块内容,例如把背景数据块里面的内容与共享数据块交换,可以访问共享数据块,进行操作处理。
L 的对应 好多程序里面直接使用L变量,此时你可以上Temp里面查看,寻求对应关系,如果找不到对应关系也无所谓,当一个临时变量使好了,出了这个块就什么都没了。