S7-300程序中,已知变量INT变量TEMP0的值,想装载到L W[AR1,TEMP0]中,但语法有错误,L W[AR1,P#TEMP 0]也是不对的,请问怎么才能实现?是不是偏移量只能是常数?
问题补充:
我想实现多个数据在一个区域里按顺序存储的功能,也就是"ATT"功能,但我不想用西门子现成的块。我也是用存储区域的第二个字来保存可以存储的数据的数量。用第一个字来存储现有的数量。在块里声明了一个临时变量TEMP0来计算下一个存储进来的数据要存储的位置。具体编程见下图,可是指针编程的偏移量只能用地址常数来表示,但我的现有数据个数的值是变化的,那我这个功能应该怎么实现呢?
图片说明:
最佳答案
1、偏移量只能用常数来表达,具体地讲是地址常数,即为P#byte.bit形式。
〖寄存器,P#byte.bit〗统称为:寄存器寻址指针
在寄存器寻址指针 [AR1/2,P#byte.bit] 这种结构中,P#byte.bit如何参与运算,得出最终的地址呢?
运算的法则是:AR1和P#中的数值,按照BYTE位和BIT位分类相加。BIT位相加按八进制规则运算,而BYTE位相加,则按照十进制规则运算。搜索
例如:寄存器寻址指针是:[AR1,P#2.6],我们分AR1=26.4和DBX26.4两种情况来分析。
当AR1等于26.4,
AR1:26.4
+ P#: 2.6
= 29.2 这是区域内寄存器间接寻址的最终确切地址数值单元。
2、问题补充:
楼主上传的程序中的L W[AR1,TEMP0]指令不能被执行。建议楼主不要在偏移量P#byte.bit上花费功夫、精力了,要在AR1指针方面考虑,AR1指针的内容可以读出及运算。即,将AR1指针进行变化来实现你要的功能。
提问者对于答案的评价:
谢谢指导
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc229838.html