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
图片说明:
最佳答案
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