当前位置: 主页 > PLC控制

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

LB#16#47
Ttemp1
Lar1p##temp1
A[ar1,p#0.0]
=m0.0

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

图片说明:

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

最佳答案

1、楼主程序中A[ar1,p#0.0]有误,应为:
AI[ar1,p#0.0]或AM[ar1,p#0.0]或AQ[ar1,p#0.0]等,A后面要有存储区符号。
本例按AI[ar1,p#0.0]。
2、要熟悉根据32位指针格式:
其0-2bit,指定bit位,3-18bit指定byte字节。其第31bit固定为0。  
 AR: 0000000000000BBBBBBBBBBBBBBBBXXX  。
将十六进制常数47作为地址常数,即00000000000000000000000001000111,实际为8.7。
3、程序解释:
LB#16#47
Ttemp1
Lar1p##temp1//将十六进制常数47作为地址常数送人AR1中,即8.7
AI[ar1,p#0.0]
=m0.0//如果I8.7为1,则m0.0为1,否则m0.0为0.。
4、相关资料:
见《关于S7-300S7-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究竟是什么?LB#16#47,Ttemp1,Lar1p##temp1这种程序肯定是不对的,因为第31bit被固定为0,同时,第24、25、26位没有可以取值的范围。

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

专家置评

已阅,最佳答案正确。

  • 关注微信

猜你喜欢

微信公众号