利用TIA Portal V12 编程的一些看法最近使用了V12对PLC进行编程,没用多久,随便谈一下自己的感受。
以前大量使用stl对300\400编程,熟练也熟悉了使用绝对地址进行编程,特别是在使用间接寻址的时候,非常方便寻址。同时也用Rockwell编写程序。Rockwell软件最大看点就是1符号寻址,2拖拽编程,其它方式都不如西门子的方便(个人理解,用AB的东西不是很多)。但是西门子Portal这个软件一方面吸取了他的优势,同时也把自己搞混乱了。
举例来说一下,portal是偏重符号编程的,也偏重scl语言的。数据块和FC、FB都有个优化的块这么个属性,点上就是符号寻址,不点就可以寻址。优化的块优化程序,优化代码和执行。但是在一些FC、FB参数传递时,特别是DB作为参数传递时我到现在还不知道怎么直接通过符号传递。使用Peek或者peek_bool时都需要使用绝对地址,而不能使用符号编程。
我个人看法,也许可以编程而我不知道。有时间大家讨论一下
------总结一下,西门子现在又想使用符号编程,又没有充分准备好相应的软件指令。在编程中,使用者虽然愿意使用新的功能,但是又不能完全使用现有指令完成。典型的问题就是DB块的间接寻址问题。如果使用优化的块进行寻址,那么无法实现在FC和FB中间接寻址。如果要使用间接寻址(peek/pork)又不能具有优化的属性。那么最终就得放弃DB块编程这种方式,而改用结构体和UDT方式全局访问。我感觉西门子在全面向AB的编程方式转变。有点泪奔啊!!!
-------优化的DB块有优化的优势,我觉得标准的地址提供的访问方式,优化的DB都可以。
比如:
可以用索引访问替代 – 例如: L #my_array[#index]
支持“Field_Data”.Numbers[“i”]方式访问
支持Slice 访问
更重要的是优化的DB提供了更快的访问速度!!PLC运行更快!
----------详细问一下,还是没有完全明白。你的意思是不是要用矩阵来解决呢?我举个例子,你帮忙看一下:
一个DB(DB1 符号名字Data_Block1)的内容是两个结构index1、index2,每个结构里有一个布尔一个整数(也许有很多的更复杂的数据类型,这里只是举例子),我们给他们命名为Bool1、Int1,Bool2、Int2。现在我要在一个FC(FC1 符号名Test)中调用这个DB块,FC1有个形参(DB_Para 数据类型为DB_Any)用来传递DB1.现在我要在FC1使用DB中的参数,怎么使用呢???要保证FC和DB是优化的块。
另外只是使用矩阵,在M区建立相应的结构,在FC中调用矩阵中的结构,然后引用变量,这种方法是可以的,这就是AB的解决方案。对于simens来说他有一个DB这样一个特殊的结构,还是想利用DB来传递参数,否则是不就没有必要利用DB了。
-------看看这个,能解决楼主的问题了吧。
利用TIA Portal V12 编程的一些看法
---------可以利用结构数据进行数据传递,这方面西门子和AB没有太的区别
----------你好,谢谢回复。其实我的主要问题还是想讨论一下,在各种块都是优化的情况下(如你所说,在这种情况下代码的运行效率高),如何间接调用DB块呢?如你的图片所示,我想知道在那个的功能块中如何来间接调用DB呢,因为是优化的块所以不能使用Peek/pork。而如果使用符号间接寻址,如图所示,DB_any只不过传递了一个Uint,肯定不能完成寻址的功能。
有些朋友说使用矩阵或者AT,这些好像都不能实现利用符号间接寻址DB块的目标。
如果DB不能间接寻址,那么他在使用时的优势还怎么体现呢。
----------是的,的确可以使用结构,或者UDT来解决这个问题,但是是不是DB块越来越鸡肋了。随着硬件的发展,以后的工作存储空间越来越大,M区越来越大,那我们就没有使用DB的意义了,西门子的一些亮点就消失了,越来越像AB学,觉得挺郁闷。
-----------结构数据就是数据块,M区是无法实现结构数据的,其实是殊途同归,并不存在谁抄谁的问题。AB的编程方式也并不是那么完美的,
-----------想了想,或许可以这样。如果原需求是在多个DB之间进行间接寻址,比如配方(打个比方不同DB内存着不同的配方),目前由于Peek指令目前尚不支持优化DB,那么我们可以建一个大DB(1500优化的DB可以建很大),将原配方数据结构做成UDT,然后都在这一个DB内创建多个UDT的配方,然后就可以很方便的用索引等指令进行间接寻址了。
----------朋友,DB存在的意义还是大大的,当不同PLC之间需要拷贝程序时,如果用M地址打架的概率那是相当高,但如果都是DB呢?最多就是DB换个块号而已。
西门子现在S7-1200/1500的工艺对象,通信参数实际都存储在DB中。
---------是的,如果西门子想要很好的使用DB与符号寻址,那么可能它还需要更强的指令来处理。例如,出现一个类似于open的指令,执行打开DB,打开后就可以直接引用DB内的符号了。西门子底层的东西我不清楚,也许这样做不适合西门子的整个底层代码的执行原理。但是就现在的情况,要想间接符号寻址还是要改变一下编程思路的。
---------我其实主要目的不是说哪个品牌的好,我只是想说西门子的这个版本的软件,有些不完美的地方,或者说有什么东西我还不明白,导致我还不明白如何利用符号间接寻址。这是我想说的重点
---------楼上的,看看我列出的FAQ,这个在博途里针对S7-300/400的。 但是到了1200/1500里还是不一样,毕竟内核肯定还是有区别的,
至于西门子怎么考量的就不得而知了。看附件
----------谢谢。内容很不错。集中了在Portal中间接寻址的表达式。是个好文档。但是如你所说,只是针对300/400的。我觉得1200/1500的内核是发生变化的,但是其指令却没有跟上变化。到现在我觉得就是无法把DB中的内容随意的传进功能块里
---------内核是发生了很大变化:
1:使用32位处理器,所以现在最长能处理64位数据了。
2:CPU编码方式与S7-300/400正好相反(指大小编码方式),这是导致1200/1500的程序块兼容模式下运行速度变慢的最根本原因,因为兼容模式下编码方式与1200/1500不一样,CPU要花费大量时间在处理大小编码转换的事情上。
3:正因为大小编码方式不同,所以在1200/1500中建议采用优化块,因为这样程序执行时编码方式与CPU正好一致!
4:只要程序设计合理,DB块中的内容仍然可以随意传进块里。(DB用优化的,里面的各种数据结构用UDT生成,这样所有变量都在一个DB内)。
5:纯符号寻址,你只需要关心变量名称,而不需要总是考虑他们的地址是多少(因为你无需考虑),所以在DB块中任意位置加入任意变量,并不影响程序中你对该DB内其它变量的访问。
6:对DB的符号访问,优势还在于:你不用关心变量在何处,只需要知道它的名字就好了。这就好比你去一个大会议室找人张三,你说是在门口喊声张三出来容易呢?还是必须知道张三的座位才能把张三找到容易呢?显然,是前者!!!
综上所述:朋友,新的产品,你需要用新的思维去使用它!没有不行,只是方法。
很多人正因为300/400使用多年,编程思维被固化了!
现在我们需要改变,当你接收了这些新的思想后,你就会发现,1200/1500编程会是一个更便捷,更方便的事情!
--------感谢各位的讨论,通过讨论了解了新的PLC的,新功能与优势。应该说符号编程,高级语言编程都应该是将来的方向。使用起来越来越方便,给调试带来了很大的方便。再次感谢大家提出的看法,共享的知识。
-------才疏学浅,不会用指针和绝对地址间接访问,凡是涉及到此的,统统UDT 或输入输出、静态变量区Struct解决之
---------对我来说V12有一个很大的习惯性的不便,因为我以前用的块都是极编号的,现在整的只能看名字,搞的我要对比半天,还从v5的里面专门打印了功能块的表格!
|