在看别人写包含STL的程序时,如何能快速读懂STL程序?

对于一般初学PLC或只熟悉LAD、FBD语言的人来说,再看到STL语言编写的程序会很迷糊,觉得无从下手,通常会转换成自己熟悉的编程语言(当然了大部分是转换不过去的),其实STL语言还是比较好理解的,今天就跟大家聊聊如何快速读懂STL程序。

一、STL指令及其结构:

在看别人写包含STL的程序时,如何能快速读懂STL程序?

有些语句指令不带操作数,它们操作的对象是唯一的。

如:NOT //对逻辑操作结果(RLO)取反。

在看别人写包含STL的程序时,如何能快速读懂STL程序?

二、寻址方式:

1、立即寻址:对常数或常量的寻址方式,操作数本身包含在指令中。

如下面的指令:

set //把 RLO (Result of Logic Operation)置“1”

L 27 //把整数27装人累加器1

L C#0100 //把 BCD码常数0100装入累加器1

2、直接寻址:在指令中直接给出操作数的存储单元地址。

如下面的指令:

A I0.0 //对输入位I0.0进行“与”逻辑操作

S L20.0//把本地数据位L20.0置1

= M115.4 // 将RLO的内容传给位存储区中的位M115.4

L DB1.DBD12 //把数据块DB1双字DBD12中的内容传送给累加器1。//双字表示32位,如浮点数为32为双字

3、存储器间接寻址

标识参数由一个存储器给出,存储器的内容对应该标识参数的值(该值又称为地址指针),这种寻址方式能动态改变操作数存储器的地址,常用于程序循环过程中的寻址。

如下面的例子:

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

4、寄存器间接寻址 :在S7中有两个地址寄存器(AR1和AR2)地址寄存器的内容 + 偏移量 = 地址指针

如下面的例子:

L P#8.6//将P#8.6装入累加器1

LAR1//将累加器1的内容传送至地址寄存器1

L P#10.0//将P#10.0装入累加器1

LAR2//将累加器1的内容传送至地址寄存器2

A I[AR1,P#1.0]//AR1+偏移量(9.6)

Q[AR2,P#4.1] //AR1+偏移量(14.1)

三、在线监视

我们在看程序时,一般需要在线监视程序执行状态,STL程序的在线状态及说明如下图所示:

在看别人写包含STL的程序时,如何能快速读懂STL程序?

1、系统内部寄存器:

S7 CPU的寄存器有(7个)

在看别人写包含STL的程序时,如何能快速读懂STL程序?

2、STA状态位:

• STA表示被操作的数据的当前状态,0或者1;

• 仅表示布尔量;

• 非布尔量的数值以ACCU累加器表示

例如:

AN I0.0 //I0.0 现在为0,则STA为0,但是执行完毕后RLO为1。


分享到:


相關文章: