发布于 2011-04-14 13:45:13
7楼
几年以前也遇到过这个情况,当时编了一个电机通用块,为了少填一些参数,用到了间接寻址。一个电机占一个字节,字节的地址由"aalm"定义。毕竟一个项目这样的功能块有上百个。
“aalm"定义为输入BOOL类型。
源程序如下:
L P##aalm
AD DW#16#FFFFFFF8//取字节地址
LAR1
A(
A #DRV //开机失败,撤除驱动并报警
L S5T#3S
SD #DELAY_TIMER
NOP 0
NOP 0
NOP 0
A #DELAY_TIMER
)
AN #RUN
R #DRV
S [AR1,P#0.1]//置报警位
A #DOWN //联锁跳
FN [AR1,P#0.3]//下跳沿暂存位
AN #UNLOCK
A #RUN
S [AR1,P#0.1]//置报警位
R #DRV
当时在OB1中用LAD去调用这个功能块时,也出现楼主描述的问题,把LAD转成STL发现实际上传送到功能块的输入参数都是L地址,当时没想到把aalm参数放到IN/OUT参数中,最后的解决方案是全部使用STL编程。
呵呵,想问一下为什么LAD编程时会把所有的输入放到L区,然后再做为参数传送呢?。