恭喜,你发布的帖子
发布于 2016-07-05 17:32:07
5楼
采用楼上zhangli0的方法,可以实现。Data为pointer数据类型,从共享DB里开辟出一段内存来用于FC的运算和数据保存,程序开始时用这段DB来赋值,FC内的运算结果再写到这段DB里,周而复始。先赋值再使用的原则就满足了。
名称,数据类型,接口
data ,pointer, in_out
ar2save ,dword,temp
source,dword,temp
dataswap,struct,temp
dbnumber,int,temp
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TAR2 //Addressregister safe
T #AR2Save
L P##Data //Data source
LAR1
L B [AR1,P#6.0] //data area type
L B#16#84 //84h = datablock
<>I
SAVE
BEC
//以上检查data接口是否有填写参数
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
L W [AR1,P#4.0] //DB Nummer
T #DB_Number
OPN DB [#DB_Number]
L D [AR1,P#6.0] //Bitaddresse
L DW#16#7FFFF
AD
LAR1
T #Source
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//DataSwap就是你要传递的参数部分,可以建立成Struct,在Temp区域
LAR2 P##DataSwap
L DBD [AR1,P#0.0]
T LD [AR2,P#0.0]
L DBD [AR1,P#4.0]
T LD [AR2,P#4.0] //程序开始时,先给赋值,如果实在很多,就使用loop吧
...
...
...
//省略的是程序逻辑部分
OPN DB [#DB_Number] //当程序逻辑功能结束时,将运算结果写回共享DB
LAR1 #Source
LAR2 P##DataSwap L LD [AR2,P#0.0]
T DBD [AR1,P#0.0]
L LD [AR2,P#4.0]
T DBD [AR1,P#4.0]
...
...
...
L #AR2Save
LAR2
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SET
SAVE
BEU
请填写推广理由:
分享
只看
楼主