210 likes | 296 Views
如何读 STL 程序:. 如果读程序时发现自己不明白的语言,可以: 1,转换成梯形图:快捷键 ctrl+1 ,当然大多数都转换不过去 ; 2,按下 F1 寻求帮助; 3,下载此程序到模拟器中,单步观察效果,看一看哪些寄存器发生改变。 系统的逻辑错误造成的停机往往是由于提示错误前面的错误引起的。. STL 指令及其结构:. 定义要执行的功能. 执行该操作所需要的信息. 语句指令: 操作码 操作数. A I 0.1 // 对输入继电器 I 0.1 进行与操作. L MW10 // 将字 MW10 装入累加器1.
E N D
如何读STL程序: 如果读程序时发现自己不明白的语言,可以:1,转换成梯形图:快捷键ctrl+1,当然大多数都转换不过去;2,按下F1寻求帮助;3,下载此程序到模拟器中,单步观察效果,看一看哪些寄存器发生改变。 系统的逻辑错误造成的停机往往是由于提示错误前面的错误引起的。
STL指令及其结构: 定义要执行的功能 执行该操作所需要的信息 语句指令: 操作码 操作数 A I 0.1 //对输入继电器 I 0.1 进行与操作 L MW10 //将字MW10装入累加器1 有些语句指令不带操作数,它们操作的对象是唯一的。 NOT //对逻辑操作结果(RLO)取反。
表示操作数存放区域及操作数位数(位、字节、字等) 表示操作数在该存储区域内的具体位置 操作数: 标识符标识参数 辅助标识符进一步说明操作数的位数长度 包括有:X(位),B(字节), W(字——2字节), D(双字——4字节) L M W 10 主标识符:表示操作数所在的存储区 主要有:I(输入映像区),Q(输出映像区),M(位存储区),PI(外部输入),PQ(外部输出),T(定时器),C(计数器),DB(数据块),L(本地数据)等 操作数:
寻址方式 : 立即寻址 立即寻址:对常数或常量的寻址方式,操作数本身包含在指令中 SET //把 RLO (Result of Logic Operation)置“1” L 27 //把整数27装人累加器1 L C#0100 //把 BCD码常数0100装入累加器1
数据格式: 系统及网络介绍 MB10 MW10 编程、调试及故障排除 MB11 MD10 MW11 MB12 MD11 MW12 MB13 现场设备详细介绍 MD12 MB14 MB15
实例: 系统及网络介绍 编程、调试及故障排除 现场设备详细介绍 • 数据分配举例
数字表示方法: INT: L 1D INT :L L#1REAL: L 1.234567e+13 TIME: L S5T#1H1M50S BYTE:L B#16#10L byte#16#10WORD:L 2#1000000000000L W#16#1000L word#16#1000DWORD:L DW#16#A21234L 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// 把指针指向STAT53L 0 // 把0装入ACCU1T DIW [AR1,P#0.0] //把地址寄存器内指向起始地址区的数据赋值
在线监视 很多时候需要在线监视的。 在线监视的情况如图,各个寄存器的情况详见下页。
累加器 32位 累加器1 (ACCU1) 主 2个32位累加器*** 累加器2 (ACCU2) 辅 地址寄存器 32位 地址寄存器1 (AR1) 2个32位地址寄存器** 地址寄存器2 (AR2) 数据块地址寄存器 32位 共享数据块 DB 2个32位数据块地址寄存器 背景数据块 DI 状态字寄存器 16位 1个16位状态字寄存器* 状态位 系统的内部寄存器: S7 CPU的寄存器有(7个):
外设I/O存储区 P 输出(映像区) Q 输入(映像区) I 系统存储区―存放操作数据(I/O、位存储、定时器等) 物理上是CPU的RAM ,存储区的大小因CPU型号而异。 位存储区 M 定时器 T 计数器 C 工作存储区―①存放CPU运行时,所执行的用户程序单元逻辑块(OB、FB、FC)、数据块(DB)的复制件;②存放临时本地数据,这部分存储区称L堆栈(主要是存放用户程序的临时变量) 物理上是CPU模块的部分RAM 可执行用户程序: ·逻辑块(OB、FB、FC) ·数据块(DB) 临时本地数据存储区 (L堆栈) 系统存储区: S7-300 CPU有三个基本存储区: 装载存储区――存放用户程序 物理上是CPU的部分RAM、EEPROM、外置FEPROM等 动态装载存储区: 存放用户程序
1,外设访问(P)不通过映像区; 2,有些变频器等超出了映像区的范围所以,只能使用外设访问(P) ; 3,外设访问(P)在程序执行到此位置时进行读写操作,而普通的输入输出,则在程序开始读入,结束输出;
状态字: 状态字表示CPU执行指令时所具有的状态,用户程序可以访问和检测状态字,并可以根据状态字中的某些位决定程序的走向和进程。 首次检测位* 逻辑操作结果* 状态位 或位 溢出位 溢出状态保持位 条件码0 条件码1 二进制结果位
逻辑操作结果(RLO): Result of Logic Operation, RLO 位置:状态字位 “1” 作用:存储位逻辑指令或算术比较指令的结果。 无法判断RLO的数值时,可以查看FC位的情况。 在某行按下F1,就知道该指令是否影响RLO。见下页
STA • STA表示被操作的数据的当前状态,0或者1; • 仅表示布尔量; • 非布尔量的数值以ACCU累加器表示 • 例如第一句为 AN I0.0 • I0.0 现在为0,则STA为0; • 但是执行完毕后RLO为1。
Q1.0 I0.0 I0.1 FC/RLO的变化示例:
DI 和 DB 的区别 • 访问背景数据块时,使用DI;当然也可以使用DB访问背景数据块; • DI的作用体现在:再单个FB里面调用了除背景数据块外的其他数据块时,可以用DB进行操作,而背景数据块可以使用DI进行操作。如右图:可以 OPN DB #DBMS //以后所有的DB*操作均是对应DB4, 而所有的DI*操作均对应DB433 CDB交换数据块内容,例如把背景数据块里面的内容与共享数据块交换,可以访问共享数据块,进行操作处理。
L 的对应 好多程序里面直接使用L变量,此时你可以上Temp里面查看,寻求对应关系,如果找不到对应关系也无所谓,当一个临时变量使好了,出了这个块就什么都没了。