西门子PLC模块总代理---中国授权一级代理商
- 供应商
- 广东湘恒智能科技有限公司
- 认证
- 西门子PLC
- 西门子伺服电机
- 西门子触摸屏
- 西门子电缆
- 西门子变频器
- 西门子模块
- 联系电话
- 13510737515
- 手机号
- 13185520415
- 联系人
- 董海波
- 所在地
- 惠州大亚湾澳头石化大道中480号太东天地花园2栋二单元9层01号房(仅限办公)
- 更新时间
- 2024-09-27 08:00
any数据类型共10个字节,数据格式如下
byte 0:固定10h 表示s7
byte 1:表示数据类型
byte 2,3 /word2:表示传送的数据长度,重复因子
byte 4,5/word3:表示db块号或者为0
byte 6:表示存储区域
any类型占10字节
比如p#db1.dbx0.0 byte 10
byte 0 对于s7plc 固定是16进制10
byte 1 对应 数据类型,2代表是byte。
byte2到3 是重复系数,相当于p#db1.dbx0.0 byte 10的数字10.
byte 4到5 是db号,如果 为0,则是非db区。
byte 6到9 是32位指针,即相当于p#db1.dbx0.0 byte 10中的指针地址 dbx0.0即dw#16#84000000
这个程序执行后结果为:
. 首址为uelle:
. 地址zeiger_单元中:存入了w#16#1002 ,即常数w#16#1002;
. 地址zeiger_单元中:存入了source_dbnr,即数据块号 db25
.地址zeiger_单元中:存入了由#ziel_anfang(db块内的起始地址)左移3位并或#16#84000000运算结果。该结果即形成的一db数据块某位的指针,即例如dbx96.0的指针;
. 地址zeiger_单元中:存入了#laenge,即长度。
说明:
sld 3 //因为l #是字节偏移量,如果不左移,则对齐了指针的后三位是xxx 小数位
od dw#16#8400000
上述两指令的用途:
地址寄存器是专门用于寻址的一个特殊指针区域,西门子的地址寄存器共有两个:ar1和ar2,每个32位。
当使用在区域内寄存器间接寻址中时,我们知道这时的ar中的内容只是指明数值单元,因此,区域内寄存器间接寻址时,寄存器中的内容等同于上帖中提及的存储器间接寻址中的双字指针,也就是:
其0-2bit,指定bit位,3-18bit指定byte字节。其第31bit固定为0。
ar:00000000 0000 0bbb bbbb bbbb bbbb bxxx
这样规定,就意味着ar的取值只能是:0.0 ——65535.7
例如:当ar=d4(hex)=0000 0000 0000 0000 0000 0000 11010100(b),实际上就是等于26.4。
而在区域间寄存器间接寻址中,由于要寻址的区域也要在ar中指定,显然这时的ar中内容肯定于寄存器区域内间接寻址时,对ar内容的要求,或者说规定不同。
ar:10000yyy 0000 0bbb bbbb bbbb bbbb bxxx
比较一下两种格式的不同,我们发现,这里的第31bit被固定为1,同时,第24、25、26位有了可以取值的范围。聪明的你,肯定可以联想到,这是用于指定存储区域的。对,bit24-26的取值确定了要寻址的区域,它的取值是这样定义的:
区域标识符
26、25、24位
p(外部输入输出)
000
i(输入映像区)
001
q(输出映像区)
010
m(位存储区)
011
db(数据块)
100
di(背景数据块)
101
l(暂存数据区,也叫局域数据)
111
如果我们把这样的ar内容,用hex表示的话,那么就有:
当是对p区域寻址时,ar=800*xx
当是对i区域寻址时,ar=810*xx
当是对q区域寻址时,ar=820*xx
当是对m区域寻址时,ar=830*xx
当是对db区域寻址时,ar=840*xx
当是对di区域寻址时,ar=850*xx
当是对l区域寻址时,ar=870*xx
经过列举,我们有了初步的结论:如果ar中的内容是8开头,那么就一定是区域间寻址;如果要在db区中进行寻址,只需在8后面跟上一个40。84000000-840fffff指明了要寻址的范围是:
db区的0.0——65535.7。
例如:当ar=840000d4(hex)=1000 0100 0000 0000 0000 0000 11010100(b),实际上就是等于dbx26.4
展开全文