低压
西门子PLC
- sismens ET-200
- siemens S7-200
- siemens S7-300
- siemens S7-400
- siemens 伺服驱动6SN
- siemens 伺服驱动6FC
- siemens 变频器6SL
- siemens 6DD功能模块
- siemens 6AG宽温型模块
- siemens 6DR定位模块
- siemens 6SX
- siemens 6GT
- siemens 3RW软起动
- siemens 低压3TF
- siemens 6ES5
- siemens 低压3RT
- siemens 低压
- siemens 6SY
- siemens 低压3RK
- siemens 低压3RV
西门子人机界面
西门子以太网6GK
西门子电源6EP
西门子变频器
西门子LOGO!
西门子驱动
1200
西门子总线电缆
S7-1200
联系我们
联系人:杨艳
技术文章
子程序要用上16个以上传入传出参数,你可以这么做
点击次数:869 发布时间:2015/3/5 14:02:58
商家名片
杨*
联系我时,请说明是阿仪网看到的,谢谢!
- 电话: 02*******308
- 手机: 18******469
- 微信:
- 交换名片后展示联系方式 → →
方法我想到了两个。
第一。间接寻址。
第二。库内存。子程序要用上16个以上传入传出参数,你可以这么做
下面简单解释一下。
间接寻址需要在子程序内部重新计算指针,然后才能做相应的读写。因为你再没有多余的参数可以接驳子程序。每次使用额外的参数都要这么做。
因为间接寻址作为参数的话只有一种方法(也可以适当变通),就是把&Xyyyy作为参数传进去子程序,然后这个参数目标的下一个地址&X(yyyy+1)要通过双字加指令对指针进行加法操作,然后读写。至于这个双字加计算,可以在子程序里加任何一个值(或者减)就可以找到任何的地址。
要子程序每次都这么的计算一次双字加指令挺费时间的。想稍微缓解一下这个事情,可以把很经常用的地址计算好后的值写入L里面。
例如:传入参数是&vb0。vb0这个参数可以直接使用传入参数就可以读写,不必计算。而vb16这个地址也经常使用,也希望可以直接引用。就可以用双字加计算了vb0+16的结果,然后把结果(80000010)保存在LD56里面。以后就可以直接引用*LD56找到目的地址。此时L区可以帮你保存好几个待命指针值。
然而,LD的范围相当有限,当你记录了好几个直接引用的结果的时候,LD区域几乎耗尽了,剩下的空间是要留一部分让出来给temp参数使用的,输入输出参数就更加必须的啦。所以还有参数要传入的话就只能再次经过双字加计算了。耗费时间的情况不可避免。
这个时候你还希望有更多空间可以直接引用的话,那么话题来了。库内存。
把上述事情的计算结果直接写到库内存里面,这就有相当大的空间保存待命指针值了。
更进一步,把参数直接写在库内存里面,就可以直读参数。错了,错了,这个错了,不可以直接把参数保存在库里面。因为一个子程序多次调用的,而每个子程序的参数不尽相同。你不可能做库程序的时候可以预知而且预留这个子程序可以使用n次的参数空间。所以你只能把跟多的待命参数保存在库中。(这里可能很难理解,回帖再议论)
以上L区相当于电脑cpu的L1L2高速缓存,库相当于电脑的常规内存。高速缓存就是经常用的数据的存放的。一个子程序调用一次,某一个地址有可能要使用到几次十几次的,是有必要把指针缓冲到高速缓存。
综上所述,使用间接寻址是可以非常灵活地把参数扩展成任意的。
那么库呢?
简单讲,库不可以直接装载参数,除非此子程序只使用一次。
第一。间接寻址。
第二。库内存。子程序要用上16个以上传入传出参数,你可以这么做
下面简单解释一下。
间接寻址需要在子程序内部重新计算指针,然后才能做相应的读写。因为你再没有多余的参数可以接驳子程序。每次使用额外的参数都要这么做。
因为间接寻址作为参数的话只有一种方法(也可以适当变通),就是把&Xyyyy作为参数传进去子程序,然后这个参数目标的下一个地址&X(yyyy+1)要通过双字加指令对指针进行加法操作,然后读写。至于这个双字加计算,可以在子程序里加任何一个值(或者减)就可以找到任何的地址。
要子程序每次都这么的计算一次双字加指令挺费时间的。想稍微缓解一下这个事情,可以把很经常用的地址计算好后的值写入L里面。
例如:传入参数是&vb0。vb0这个参数可以直接使用传入参数就可以读写,不必计算。而vb16这个地址也经常使用,也希望可以直接引用。就可以用双字加计算了vb0+16的结果,然后把结果(80000010)保存在LD56里面。以后就可以直接引用*LD56找到目的地址。此时L区可以帮你保存好几个待命指针值。
然而,LD的范围相当有限,当你记录了好几个直接引用的结果的时候,LD区域几乎耗尽了,剩下的空间是要留一部分让出来给temp参数使用的,输入输出参数就更加必须的啦。所以还有参数要传入的话就只能再次经过双字加计算了。耗费时间的情况不可避免。
这个时候你还希望有更多空间可以直接引用的话,那么话题来了。库内存。
把上述事情的计算结果直接写到库内存里面,这就有相当大的空间保存待命指针值了。
更进一步,把参数直接写在库内存里面,就可以直读参数。错了,错了,这个错了,不可以直接把参数保存在库里面。因为一个子程序多次调用的,而每个子程序的参数不尽相同。你不可能做库程序的时候可以预知而且预留这个子程序可以使用n次的参数空间。所以你只能把跟多的待命参数保存在库中。(这里可能很难理解,回帖再议论)
以上L区相当于电脑cpu的L1L2高速缓存,库相当于电脑的常规内存。高速缓存就是经常用的数据的存放的。一个子程序调用一次,某一个地址有可能要使用到几次十几次的,是有必要把指针缓冲到高速缓存。
综上所述,使用间接寻址是可以非常灵活地把参数扩展成任意的。
那么库呢?
简单讲,库不可以直接装载参数,除非此子程序只使用一次。
原创作者:武汉鑫福诚自动化有限公司



