quote:以下是引用伊默在2014-03-21 08:29:49的发言:
你都写了个俄罗斯方块了,就这点事对你也叫个事?呵呵
不要拿300/400的眼光来看1500。 在1500里的用户数据,虽然继承的名称是300里的UDT,但是它又不同于UDT,它可以作为参数直接赋值的! 看西门子网上的FAQ,1500里当功能块的接口参数过多时,就推荐将这些参数做成UDT,然后直接用该UDT作为参数传递,这样可以减少调用FB/FC接口的数量,程序会看起来简洁。 看看STEP7V5.5里的PID功能块FB41,那参数一大堆……
其实呀,在Step7 V55,UDT也是可以作为一个参数传递的,我经常这么用,但是为了减少 FB背景块的大小和提高效率,我都是用 IN_OUT类型,这样不会 copy实参到形参了,IN_OUT类型的UDT其实是个指针,指向UDT块所在实例化DB块中的首地址。
我曾经做了一个队列,队列存储的对象是一个64个字节的UDT对象数组,用来队列执行设备动作指令,全自动的哦,还可以在触摸屏编辑,随时添加或者删除设备。比如有有3台变频器,但是,有10个传动装置,我需要用切换的方式用3个变频器驱动10个传动装置。10个装置执行的时间有差异,比如1号已经执行完了,它占用的变频器必须释放,然后给未执行的,比如说3号,然后3号从队列取指令,开始动作。每个循环都去检测有无变频器被释放,如果有,立即从队列中取设备和指令继续执行未执行的任务,直至无任务可执行位置。这个类似于操作系统的抢占性,3台变频器就是资源。