QQ登录

只需一步,快速开始

有关step7 V12( PLC 1500) 利用Scl编程的间接寻址DB块内容的问题

[ 复制链接 ]
有关step7 V12( PLC 1500) 利用Scl编程的间接寻址DB块内容的问题最近一段时间正在利用V12 的scl语言编写程序,在使用过程中发现一些问题和疑惑想跟大家分享讨论一下。
我们的程序需要在FC 和FB 中调用DB中的内容,DB中是一些结构体Struct1,struct2....,我现在的做法是声明DB为DB_ANY,同时把DB的属性改为非优化的(优化的数据块不能够直接使用绝对地址也就不能使用peek指令了),然后再FC或FB中利用peek指令就可以把DB中的内容读进来了。
但是,我觉得作为Portal TIA 1500 一直都主张使用符号优先的编程方法,能不能彻底抛弃利用绝对地址来间接寻址呢???清大家给些意见
另外。对于变量覆盖的功能,我不知道可以不可以实现我的功能。简单的试过几次,没有成功。希望有用过的朋友给些帮助。
帮助文件太不给力了觉得,许多新定义的概念或专有名字不像以前都有超链接去解释,不好理解,而且例子特别少,我觉得这一点很不好。希望在马上要出来的V13版本中得到改变。


------应该是可以全部都用符号名来编程的,只是一直还没有机会试一下。


----可以用索引访问替代啊 – 例如: L #my_array[#index]


---------通过矩阵引用时可以实现所要的功能,那么这样的话我觉得就没有必要使用DB块了,直接在M区定义就可以了,这就像是AB的编程方式了。我的意思是既然西门子有了DB这样一个数据结构,那么就应该有相应的指令来实现在FC中打开这个DB块,并且使用这个DB块的内容。像在stl中用open指令,然后就可以直接引用块里的符号变量了


-------要用间接寻址 你还只能用非优化的块 使用PEEK Poke 或者可以用 DB1.dbw[变量] 等方式来访问
用符号名 肯定是用数组传进来为最简单
你也可以把结构变量传进来 例如 Struct1 作为Input 那么你可以在程序里面 访问 #Struct1.A #Struct1.B 也可以直接用#Struct1:= Struct2 来赋值整个结构变量


------应该是可以的。 直接用优化的块。
楼主举个详细的直接点的例子,大家来试试看看有没有办法?

-----谢谢。通过最近查阅大量的文件,我觉得是不能实现的。举例子的话,我觉得最简单就是把DB块作为参数传递进入FC中,在FC中就没有办法使用符号访问DB的内容(FC和DB都是优化的块)。


------用数组传递DB中的数据是不现实的,DB的内容不可能是8个bit,10个word,肯定是比较复杂的结构。
使用结构体struct或者UDT是能够实现的,但是这样跟DB没有关系了,用不用DB就不重要了。
我的问题是在DB块作为一个参数(例如DB_any)传递进FC块时,在FC中如何间接访问DB的内容 (所有的块都是优化的块)

--------谢谢。通过最近查阅大量的文件,我觉得是不能实现的。举例子的话,我觉得最简单就是把DB块作为参数传递进入FC中,在FC中就没有办法使用符号访问DB的内容(FC和DB都是优化的块)。
回复

使用道具 举报

快速回复 返回列表 客服中心 搜索