指针用法?

FB1程序如下:
SET
SAVE
=   L   0.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".ramp         P#DB110.DBX0.0
acc_hold:="garb_var".s0         DB53.DBW0
dec_hold:="garb_var".s2         DB53.DBW2
...
ramp_coef是数组变量Array[1...10]of int,在这里,我没搞清楚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]of int ,那么就是从 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"数据块,这个数据块的部分内容如下:
Address       Name              Type
+0.0             ramp               ARRAY[1...10]
无法看到ramp_coef的值是从哪儿来的。这个问题我又提问了,希望能得到你的继续指导,谢谢!

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc213964.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年11月18日
下一篇 2017年11月18日

相关推荐