[西门子] 西门子 200smart 间接寻址以及累加器AC的使用

[复制链接]
查看376 | 回复0 | 2024-7-10 19:49:38 | 显示全部楼层 |阅读模式
>
01
什么是间接寻址PLC的寻址方式分为直接寻址和间接寻址两种,直接寻址就是直接使用存储区或寄存器的元件名加地址编号,根据这个地址去找到该数据。而间接寻址是指用指针来访问存储区的数据。


在S7-200系列PLC中,可以间接寻址访问的存储有:输入过程映像区(I)、输出过程映像区(Q)、位存储器(M)、全局变量存储区(V)、顺控状态继电器(S)以及定时器(T)和计数器(C)。



什么是指针?
指针以双字的形式存储其它存储区的地址,只能将V存储单元、L存储单元或累加器寄存器(AC1、AC2、AC3)用作指针。AC0只能存入指针变量中的数值,不能做指针。


指针可以理解为房间的房卡,房间号是实际的物理地址,客人可以看作是房间的数据值,客人入住房间只需在前台办理房卡,房卡上面写有入住的房间号,房卡指向具体的房间地址,客人只需要用房卡打开具体的房间就可以入住了,如果需要更换房间,也只需要在前台更换房卡上面的房间号就可以入住对应的房间了。



​&为取地址符号。*为取值符号,表示该操作数为一个指针。指针可按字节,字,双字存取数据。指针指向存储区地址的值。



注意:【VD2000+10】与【*VD2000+10】的含义不一样,前者是地址加10(因为VD2000里面放的是地址指针),表示这时的指针地址指向了VB110,而后者是表示VB100内的数据值再加10。


要建立一个指针,必须以双字传送(MIV_DW)的形式将需要间接寻址的存储器地址(上例中的“&VB200”移动到指针中(上例中的“*VD500”)。指针也可以作为参数传递到子程序中。


​指针的偏移,如果要连续存取指针所指向的数据时,由于指针是32位的数据,应使用双字指令来修改指针值,修改指针时可用双字加法指令和双字自加一指令。但需要注意,存取字节时,指针值加1,存取字时,指针值加2,存取双字时,指针值加4。


注意:不能使用间接寻址访问单个位或访问 HC、L 或累加器存储区。

什么是指针变量?
整型变量存放整数,实型变量存放实数。同样,指针变量存放指针。指针其实就是地址,因此指针变量中存放的是另一个变量的地址。也可以说,指针变量指向另一个变量。

要点:&符号为取变量地址,*符号为取指针所对应地址里面的数据值。取定时器、计数器的当前值时,指针值加2。
02
为什么需要间接寻址直接寻址直观简单,适合单个或少量的寻址,不管有没有规律都可以使用,能满足大部分寻址要求。间接寻址适合批量且连续或有一定规律的地址,当寻址量较大时,可以将数据设计成有规律,用间接方式寻址可以少写很多步程序,使编程更加简单。例如有10个数字,需要进行从小到大或是从大到小的一个排列,如果使用直接寻址,需要一个个去做比较,很麻烦,而使用间接寻址就会很方便,自动的去改变地址做比较。




​通过访问指针指向的地址来进行寻址。间接寻址支持字节,字,双字方式访问。
03
累加器AC累加器和V区的性质类似,都是用来存储数据用的,但累加器比较灵活, 不用考虑数据长度(B、W、D)的问题,用来保持中间结果特别方便,同一个累加寄存器地址可以在一个程序段的不同的地方存储和取出不同的数据而不混乱,只是每个网络的运算必须得出结果并转存到非AC的地址里存储,累加器主要用在间接寻址这一块。累加器用来暂时存储计算的中间值,也可向子程序传递参数或返回参数。


200 SMART有4个32位的累加器(AC0、AC1、AC2、AC3)。




​累加器是可读可写单元,可以按字节、字、双字存取累加器中的数值。由指令标识符决定存取数据的长度。MOV_B指令存取累加器的字节,MOV_W指令存取累加器的字,MOV_DW指令存取累加器的双字。按字节、字存取时,累加器只存取存储器中数据的低8位、低16位,双字存取时,存取存储器的32位。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则