fb1程序如下:
SET
SAVE
=L0.1
L#ramp_coef[1]
L#ramp_coef[9]
/I
L#ramp_coef[10]
TAK
/I
T#acc_hold
…
FB1在FC1中的应用:
CALL"Ramp_STep","Garb_Ramp_step"FB1/DB11
ramp_coef:="garb_vaLUe".rampP#DB110.DBX0.0
acc_hold:="garb_var".s0DB53.DBW0
dec_hold:="garb_var".s2DB53.DBW2
…
ramp_coef是数组变量Array[1…10]ofint,在这里,我没搞清楚P#DB110.DBX0.0的用法,而且没搞清楚P#DB110.DBX0.0跟什么对应?指针指向了哪里?请大侠指教,谢谢!
问题补充:
我之所以没搞清楚,是因为从DB110.DBX0.0开始装的就是
ramp_coef[1…10],只有指针,没有看到ramp_coef[1…10]从哪儿来的。
最佳答案
P#DB110.DBX0.0就是指向DB110数据块从0开始的位置,如果ramp_coef是数组变Array[1…10]ofint,那么就是从DB110.DBW0开始。P#DB110.DBX0.0,表示的就是从DB110.DBX0.0开始取数据,是字节,字还是双字就要看DB块里的数据定义和FB1里程序。
补充:首先看看DB110这个DB块的名称是否为garb_value,然后DB块里是否有一个命名为ramp的array的数组。ramp_coef:="garb_value".ramp这句的意思就是将"garb_value".ramp这个数组赋值给FB1的一个输入端ramp_coef,数组等复杂的数据在传递的时候是用POINTER指针形式来进行的,所以就能看到P#DB110.DBX0.0这个符号。就是数组之间的赋值,但是这个数据比较复杂罢了。
“没有看到ramp_coef[1…10]从哪儿来的”:在FB1块的输入端定义的。
按上面提示的看看,问题应该就解决了。
提问者对于答案的评价:
DB110就是"garb_value"数据块,这个数据块的部分内容如下:
AddrESsNameType
+0.0rampARRAY[1…10]
无法看到ramp_coef的值是从哪儿来的。这个问题我又提问了,希望能得到你的继续指导,谢谢!