当前位置: 主页 > PLC控制

老外编的程序中 一个间接寄存器地址问题 LAR1 中具体装载的 地址是什么

//CopypointerSToareASinstandarddrivesdatablock
CALL"PIA_FC_GET_ANY_PTR"//fc129
pIN:="DRVCBP_FIRSTDRIVE".OUT_SPEED//db1250.dbd8
pOUT:=#P_out_speed//临时变量地址L220.0

//CopydatafromDataBlock

OPN#TL_EN_BRD_R1_DB//readdataofbridlebeforeTL/SCBRroll1

//geTPointerintodatablock
LAR1P##P_out_speed
LLD[AR1,P#6.0]//这个语句为什么,没有将累加器1中偏移量6.0地址指针//内容装载到AR1中。
LAR1//用ACCU1内容(32位指针)装载地址寄存器AR1
//usespointeRTodatainactualdatablock
LDBD[AR1,P#0.0]//dbd8
T#en_tl_brd_speed1

LDBD[AR1,P#14.0]//dbd22
T#en_tl_brd_diameter1

LDBD[AR1,P#18.0]//dbd26
T#en_tl_brd_gear1
//————————————————————————–
fc129
定义输入管脚pINAny
输出管脚pOUTAny

LP##pIN
LAR1
LP##pOUT
LAR2
LD[AR1,P#0.0]
TD[AR2,P#0.0]
LD[AR1,P#4.0]
TD[AR2,P#4.0]
LW[AR1,P#8.0]
TW[AR2,P#8.0]
//—————————————————————————————–
个人理解
getpointerintodatablock
LAR1P##P_out_speed//取地址dbd8首地址8.0
LLD[AR1,P#6.0]//8.0+6.0=12.0
LAR1//12.0,但是监控地址好像还是8.0,不是很懂。
//——————————————–
请教大家。描述的不是很好,不知道能说清楚问题了吗。

图片说明:

老外编的程序中 一个间接寄存器地址问题 LAR1  中具体装载的 地址是什么老外编的程序中 一个间接寄存器地址问题 LAR1  中具体装载的 地址是什么 老外编的程序中 一个间接寄存器地址问题 LAR1  中具体装载的 地址是什么老外编的程序中 一个间接寄存器地址问题 LAR1  中具体装载的 地址是什么 b1f24564e98b599ad8c863f2CE6ff981老外编的程序中 一个间接寄存器地址问题 LAR1  中具体装载的 地址是什么

最佳答案

利用any指针进行寻址
LAR1P##P_out_speed//把P_out_speed的地址赋值到地址寄存器1里面
LLD[AR1,P#6.0]//地址寄存器便宜6个字节,P_out_speedany类型里面的存储类型和地址。如果P_out_speed输入的参数是p#db1.dbx100.0byte10,这句话寻址之后就相当于LLD100

关于any类型的数据格式,参考:
SIMATIC用STEP7V5.5编程手册
https://support.industry.siemens.com/cs/cn/zh/view/45531107
610页27.3.4.5参数类型ANY的格式介绍
还可以参考下面的文档;
FC中如何传递ANY指针
https://support.industry.siemens.com/cs/cn/zh/view/76779257
如何计算ANY型指针的偏移量或改变指针?
https://support.industry.siemens.com/cs/cn/zh/view/22422028
西门子STL间接寻址常问问题集
https://support.industry.siemens.com/cs/cn/zh/view/76492353

提问者对于答案的评价:
谢谢RENHQ和宁ゐ玉碎的解答,我学习了any指针的数据结构6-9才是存放的地址信息。

  • 关注微信

猜你喜欢

微信公众号