问题: 1、程序中 L +10 //将16位整数10存入ACC1
L L#+10 //以32位形式
这两条指令中怎么第一个+10 就是16位的, L#+10 就是32位的呢??这个怎么区分??
2、这条指令中 A I[MD104] //对 I1.2进行与逻辑操作
这条指令中 MD104 等于10 , A I[MD104] = A I[10] 为什么不是 A IB10 呢??? 或者一个字节是8位 也应该是 A I1.1 也不是1.2啊??? 基础很差 求指教。
3、 这条赋值指令 =DIX[MD2] //赋值背景数据位DIX6.5!
是不是 32位的16进制数35 ,转换成32位 的十进制数是53 ,53转换成八进制位模式应该是DIX6.4 还有0位应该算进去把。 不知道自己理解对不对??
4、 程序中 L L#+10 与 L +10 ,是不是加上 L 或者 # 号 后, 16位的数 就变成32位 了 ??? L 局部存储器中的数 是不是都是32位的??
最佳答案
1. L#用来表示32位双整数常数,例如L#+56 , L# -43 。这个是西门子规定,只要记住就可以了。16位整数常数直接输入就可以了。例如十进制45直接输入45,如果是16进制常数45就输入W#16#45就可以了。详情参考西门子PLC数据类型:http://wenku.baidu.com/link?url=clUl4LXS5rztGm56lqXTDbGLrvrSejvvkMqC4uFoz_YdbHQTz0q05HL1DHIOWimLgFBIGp0dTSASIcuJo3Er04VLDe3-u7A9_1AdTorno3S
2.A I[MD104]这个是间接寻址,属于存储区间接寻址。32位地址指针也可以使用常数表示,32位地址指针数据与双整数可以相互转换,由于指针指到一个位地址上,每一个位地址加1,相应转换的整数值加1的倍数,例如P#0.0转换双整数为L#0,P#0.1转换双整数为L#1,每一个字节地址加1,相应转换的整数值加8的倍数,例如P#3.1转换双整数为L#25,因此MD104=10,就是P#1.2 。所以A I[MD104] 就是A I1.2 。详情参考西门子PLC间接寻址:http://wenku.baidu.com/link?url=vfNLUkdL-v2X_iH11KtkiPfXLx2ykOQTBiPX-ldzU12m-zZhMsS7X9sBRuR1mOaRaYQB3jxRCiHnz2pGf2EbTnD3-G3dxTzSVEHBfpcDEIG
3.是的,这个和第2个问题是同一个问题,你第2个问题理解了,这个也就理解了。
DIX[MD2】=DIX6.5,MD2=P#6.5,用10进进制整数表示就是53 。可以参考西门子PLC间接寻址资料看看。
4.这个L#是数据类型表示的格式,如果表示32位整数常数必须加L#,不可以加L或#,这个和L局部存储区没有关系。L局部存储区不都是32位的。L存储区使用请见以下链接:http://blog.sina.com.cn/s/blog_669692a60101b5bg.html
4.
提问者对于答案的评价:
我认为 A I [MD104]中 MD104是32位指针,包含具体数值单元。 MD104=L#10 , L#+10转换成二进制应该是 1000 0001 0000 0000 0000 0000 0000 1010 , 2的1次方加2的三次方等于10. 0到2位 表示位 。所以是 I1.2 这么理解对吗
最佳答案作者回复:
0-3位是位寻址,3-18位是字节寻址
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc204652.html