quote:以下是引用xkqxwhz在2013-12-28 16:04:15的发言:




L P##PPO //从上一级FB209的静态变量区传过的地址:656
LAR1
L W [AR1,P#0.0]
T #DBNumber //这个数据块地址难道是656?,肯定是不对的,实际为FB209的背景数据块DB101,有点搞不懂了!
L D [AR1,P#2.0]
T #StartAddress //这个地址怎么感觉是658啊? 实际应为656啊,有点搞不懂 !
LAR1 P##StatusAny //建立状态字的ANY地址指针,指向的地址DB101.DBB656~DBB667 12个字节
L B#16#10
T LB [AR1,P#0.0]
L B#16#2
T LB [AR1,P#1.0]
L 12
T LW [AR1,P#2.0]
L #DBNumber
T LW [AR1,P#4.0]
L #StartAddress
T LD [AR1,P#6.0]
LAR1 P##ControlAny //建立控制字的ANY地址指针 ,指向的地址DB101.DBB668~DBB679 12个字节
L B#16#10
T LB [AR1,P#0.0]
L B#16#2
T LB [AR1,P#1.0]
L 12
T LW [AR1,P#2.0]
L #DBNumber
T LW [AR1,P#4.0]
L 12
SLD 3
L #StartAddress
+D
T LD [AR1,P#6.0]
Zane 斑竹前辈能否帮忙看一下前边的疑问,看了半天实在是有点困难,请高手指教一下。谢谢
你前面读的程序都挺准确的,基本上可以满足楼主的读程序需求了。
反正我们可以知道#ControlAny描述了PPO之中的control这个结构部分的内容。
所以那段程序费了很大的劲,把从IN_OUT传进来 指针PPO之中的DB块、地址偏移量等信息读出来,然后送给了自己定义的controlany指针,用于最终送给6SE70。
其实绕这么多弯的主要原因是他使用的是FC,而不是FB。然后变量还要从IN_OUT传进来(只是给了块空间,#FC_19.PPO 数据在外面根本没有访问过)。而IN_OUT变量不仅不支持SFC14,15,也不能被SFC20识别。
如果使用FB,就没有这些麻烦了,因为可以直接使用STAT, SFC14/15 读写也可以直接使用PPO.status 和PPO.CONTROL。
总的来说程序规划有些毛病。