这个m0.0是1吗?区域内寄存器寻址,这里帮忙解释一下

L B#16#47
T temp1
Lar1 p##temp1
A [ar1,p#0.0]
=m0.0

问题补充:
这里确实是没有写上存储区符号,原程序是图片1,啊鸣帮我看看吧,是不是存储区符号是db239,因为这里调用了sfc14传到db239中,而这个sta94是一个数组array[0…19]of byte

图片说明:

这个m0.0是1吗?区域内寄存器寻址,这里帮忙解释一下   

最佳答案

1、楼主程序中A [ar1,p#0.0]有误,应为:
A  I[ar1,p#0.0]或A  M[ar1,p#0.0]或A Q [ar1,p#0.0]等,A后面要有存储区符号。
本例按A  I[ar1,p#0.0]。
2、要熟悉根据32位指针格式:
其0-2bit,指定bit位,3-18bit指定byte字节。其第31bit固定为0。  
 AR: 0000 0000 0000 0BBB BBBB BBBB BBBB BXXX  。
将十六进制常数47作为地址常数,即0000 0000 0000 0000 0000 0000 0100 0111,实际为8.7。
3、程序解释:
L B#16#47
T temp1     
Lar1 p##temp1   //将十六进制常数47作为地址常数送人AR1中,即8.7
A I[ar1,p#0.0]
=m0.0    //如果I8.7为1,则m0.0为1,否则m0.0为0.。
4、相关资料:
见《关于S7-300和S7-400指针寻址的说明与例程(更新版)》下载:
http://www.ad.siemens.com.cn/download/SearchResult.aspx?searchText=F0215
5、问题补充:新上传的图片是将#STAT92中的内容装入AR1。这个#STAT92必定:
第31bit被固定为1,同时,第24、25、26位有了可以取值的范围。bit24-26的取值确定了要寻址的区域,它的取值是这样定义的:   26、25、24位 :
如果我们把这样的AR内容,用HEX表示的话,那么就有:  
当是对P区域寻址时,AR=800xxxxx;  当是对I区域寻址时,AR=810xxxxx;  当是对Q区域寻址时,AR=820xxxxx;  当是对M区域寻址时,AR=830xxxxx;  当是对DB区域寻址时,AR=840xxxxx;  当是对DI区域寻址时,AR=850xxxxx;  当是对L区域寻址时,R=870xxxxx

你看看#STAT92究竟是什么?L B#16#47,T temp1,Lar1 p##temp1这种程序肯定是不对的,因为第31bit被固定为0,同时,第24、25、26位没有可以取值的范围。

提问者对于答案的评价:
谢谢

专家置评

已阅,最佳答案正确。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc231167.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 上午4:58
下一篇 2018年12月1日 上午4:58

相关推荐