程序如下:
SET
SAVE
TAR1 #d_ar1
L #DB_NO
T #dbnr
OPN DB[#dbnr]
LAR1 DBD 14
L PIW [AR1,P#0.0]
CAW
T DBB36
......
问题:
1、这个项目的程序开头和结尾都使用TAR1 #d_ar1,程序开头AR1=?
2、DBD14的Actual Value=DW#16#880,那外设输入字PIW地址应该是多少?
3、经过CAW后,给DBB的数据是多少?
谢谢!越详细越好!
最佳答案
TAR1 将地址寄存器 1 中的内容传送到累加器 1,TAR1 <D>将地址寄存器1的内容传送到目的地(32位指针)。
例如:TAR1 DBD20 // 将 AR1 中的内容传送到数据双字 DBD20。
1.程序开头AR1=?要看你程序中LAR1 指令。
2.DBD14=DW#16#880,就是十进制数值2176,就是32位指针P#272.0 ,所以 PIW 地址就是272,就是PIW272 。
3.CAW 是转换指令。 交换累加器 1 低字中的字节顺序(16 位) 。这个要具体看PIW272 数值是多少。L PIW[AR1, P#0.0] 就是 L PIW272 ,将模拟量输入PIW272 数值装载到累加器1中。因为PIW272 是16位WORD 数据类型,只占用累加器低16位。假设PIW272=W#16#4080,就是2进制1000执行CAW 指令后,变为W#16#8040 ,则DBB36= W#16#4080 。
建议楼主了解STL 编程语言。可以下载STL 编程指令手册。链接如下:
http://wenku.baidu.com/link?url=6_QYoTyjFAmnvQ2wgppASlfX1Dj9C2aZVQd90lkGNmI27sRcHGQBQXKnBXqn--4L4FOhwBQkUAJ3XcfpBHSy18qdcQMT4bfkQBueMVyR8Sm
提问者对于答案的评价:
谢谢!你提供的链接内容我有,一直都在学,就是遇到具体程序时拿捏不准。再请教一个问题:十进制数值2176,就是32位指针P#272.0,这个是怎么算出来的?谢谢!
最佳答案作者回复:
最简单的就是直接除以8。建议你看看崔坚老师的间接寻址文章。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc195298.html