1.指令操作数
指令操作数由操作标示符和参数组成。操作标识符由主标识符和辅标识符组成。
主标识符有:I(输入过程影像寄存器)、Q(输出过程映像寄存器)、M(位寄存器)、PI(外部输入寄存器)、PQ(外部输出寄存器)、T(定时器)、C(计数器)、DB(数据块寄存器)、L(本地数据寄存器)
辅助标识符有:X(位)、B(字节)、W(字或2B)、D(2DW或4B)
详细介绍可以参看下图:
2.寻址方式
S7-300的4种寻址方式有:
1)立即寻址
立即寻址是对常数或常量的寻址方式。例子如下:
L66 //表示把常数66装入累加器1中 AW W#16#168 //将16进制数168与累加器1的低字进行“与”运算 SET //默认操作数为RLC,该指令实现对RLO置“1”操作
2)存储器直接寻址
直接寻址指在指令中直接给出操作数单元地址。存储单元地址可用符号地址(如“sb1_start”等)或绝对地址(如“I0.0"、"Q4.1”等)。例子如下:
A I0.0 //对输入位I0.0执行逻辑“与”运算 = Q4.1 //将逻辑运算结果送给输出继电器Q4.1 L MW2 //将存储字MW2的内容装入累加器1 T DBW4 //将累加器1低字中的内容传送给数据字DBW4
3)存储器间接寻址
间接寻址指:在指令中以存储器的形式给出操作数所在存储单元的地址。在指令中一般写在“[]”中,采用地址指针,地址指针在地址范围小于65535的存储器中可以使用字指针;而其他的存储器则需要使用双字指针。例如:
A.存储器地址单字节地址指针寻址
OPN DB[MW0] //打开数据块,若MW0为1,则就是打开DB2.MW0的改变,则打开的数据块儿也改变B.存储器地址双字节地址指针寻址
L P#8.7 //把指针值装载到累加器
//P#8.7的指针值为:2#0000_0000_0000_0000_0000_0000_0100_0111
T [MD2] //把指针值送到MD2
A I[MD2] //查询I8.7的信号状态
= Q[MD2} //给出输出位Q8.7赋值
4)寄存器间接寻址
寄存器间接寻址指通过地址寄存器和偏移量间接获取操作数,地址寄存器和偏移量需写在“[]”中。S7-300中有两个地址寄存器AR1、AR2。
地址寄存器地址有两种格式,其长度均为双字,格式如下:
位24~26 地址指针区域标识位的含义:
A.区内寄存器间接寻址
该寻址对于哪个存储区寻址需明确给出。
L P#3.2 //将间接寻址的指针装入累加器1 //P#3.2的指针值为:2#0000_0000_0000_0000_0000_0000_0001_1010 LAR1 //将累加器1的内容送入地址寄存器AR1 //AR1的指针值为:2#0000_0000_0000_0000_0000_0000_0001_1010 A I[AR1,P#5.4] //P#5.4的指针值为:2#0000_0000_0000_0000_0000_0000_0010_1100 //AR1与偏移量相加结果:2#0000_0000_0000_0000_0000_0000_0100_0110 //对输入位I8.6进行逻辑“与”操作 = Q[AR1,P#1.6] //P#1.6的指针值为:2#0000_0000_0000_0000_0000_0000_0000_1110 //AR1与偏移量相加结果:2#0000_0000_0000_0000_0000_0010_1000 //对输出位Q5.0进行赋值操作B.区域间寄存器间接寻址
该选择通过区域标识位26~24位确定。
L P#I8.7 //把指针值及存储区域标识装载到累加器1 //P#I8.7的指针值为:2#1000_0001_0000_0000_0000_0000_0100_0111 LAR1 //把存储区域I和地址8.7装载到AR1 L P#Q8.7 //把指针值和地址标识符装载到累加器1 //P#Q8.7的指针值:2#1000_0010_0000_0000_0000_0000_0100_0111 LAR2 //把存储区域Q和地址8.7装载到AR2 A [AR1,P#0.0] //查询输入位I8.7的信号状态(偏移量0.0不起作用) = [AR2,P#1.2] //输出位Q10.1赋值3.CPU中的寄存器
1)累加器(ACCUx)
累加器用于处理字节、字、双字寄存器。S7-300有2个32位累加器(ACCU1、ACCU2)。S7-400有4个32位的累加器(ACCU1~ACCU4)。数据放在累加器的低位(右对齐)。
2)状态字