发布于 2015-06-14 22:23:13
7楼
7. 今天说一下关于 SCL 中关于间接寻址的不同之处。
在STEP7中 间接寻址比较方便,如 S:=DB_NO.DW[X]; // DB_NO (BLOCK_DB) 为 DB块号, X 为指针地址,是个变量。麻烦的就是有些需要格式转换。
在TIA的 S7-1500的间接寻址,我就搞得有点懵了。
先把DB块的间接寻址弄出来了 #S := #DBNO.%DBW20; // DBNO(DB_ANY) 为 DB块号, DBW20 为地址。
接下来要把 DBW20替换为变量就不知道怎么弄了。 #S := #DBNO.#X; 这个 X定义了好几种数据类型都会报错,没辙了,那就再想想别的办法吧。
那上万页的手册告诉我可以用 PEEK,好吧,这个也可以弄一弄,#S := PEEK_WORD(area:=16#84,dbNumber:=#DBNO,byteOffset:=#X) ; 这个弄出来后问题又来了, PEEK后面的数据类型 除了 WORD,BOOL和默认的 BYTE外,定义为 INT,REAL等常用的数据类型都会报错,这是几个意思? byteOffset 这个 “byte” 也是改不了的啊。
我现在的目的就是想知道:#S := #DBNO.#X; // (S:REAL DBNO为DB块号, X是地址变量) 在1500的 SCL程序中,该如何表达。
请大家指点指点我的疑问,谢谢!
以上仅供参考,如有差错,敬请原谅!