新建程序:临时变量#TEMP0 双字 地址0.0 程序:L MB0 T #TEMP0
A L[#TEMP0] =M100.0 当给MB0赋值为27或28 M100.0接通 请高手解释下
问题补充:
高手 您好!1:因为我是新建的程序,没有对L3.3赋值。而且只有这一段语句,我是把数值一个一个的试才知道赋值27或28,M100.0才能接通。2:如果我不逐个试的 那又改怎么对应起来了。有或者我的临时变量的地址是8.0 然后赋值是27,M100.0接通。是不是也是查L3.3呢?
图片说明:
最佳答案
本人认为楼主所给的程序有问题,应该为:
L MD0 //将MB0改为MD0,应该为双字长。理由见下述解释。
T #TEMP0//如果#TEMP0(必须双字长)中为27
A L[#TEMP0]
=M100.0 //即当L 3.3置位,则M100.0置位。
1、关于间接寻址:
这是间接寻址:间接寻址就是间接的给出指令的确切操作数。存储器间接寻址具有两个指针格式:单字和双字。
单字指针是一个16bit的结构,从0-15bit,指示一个从0-65535的数值,这个数值就是被寻址的存储区域的编号。
双字指针是一个32bit的结构,从0-2bit,共三位,按照8进制指示被寻址的位编号,也就是0-7;而从3-18bit,共16位,指示一个从0-65535的数值,这个数值就是被寻址的字节编号。
因此就本程序来讲,#TEMP0必须是双字(所以要用MD0来传送)。
2、上述程序问题:
L 是临时变量,只在本程序段内有效。
A L 10.0
=M100.0
如果要达到上述指令的效果,#TEMP0必须是双字(所以要用MD0来传送),因为需要形成带有字节与位编号的地址。
例如赋值为十进制27时,换算方法:
1、十进制27为十六进制的1B,即0001 1011.
2、32bit的结构:0000 0000 0000 0000 0000 0000 0001 1011;从0-2bit,共三位,按照8进制指示被寻址的位编号,则为3。而从3-18bit,共16位,这个数值就是被寻址的字节编号,则为3。
3、位编号为3,字节编号为3。这样,即形成地址3.3.
4、A L[#TEMP0]则等价于,A L3.3。
5、相关文档:
见《关于S7-300和S7-400指针寻址的说明与例程(更新版)(2008.03.04) 》下载:
http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=F0215
详见《step7编程之地址概念详解》连接:
http://www.plc365.com/jishu/57.html
提问者对于答案的评价:
通过查找资料 终于明白了
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc303371.html