什么叫做带参数的子程序?

我的提问请看以下链接:http://www.gongkong.com/Forum/ForumTopic.aspx?Id=2009042219011500001
 大家有关于这方面的资料发我邮箱里,谢谢了。邮箱:lzhosky@qq.com

最佳答案

比如有十二个压力传感器,或更多的传感器,量程是0到1MPa ,变送输出的标准模拟信号是4到20MA,那么怎么计算实际压力值?像下面一样将计算过程写12遍?
 网络1: 
 LD     SM0.0
 MOVD   0, AC0
 MOVW   AIW0, AC0
 -I     +6400, AC0
 DTR    AC0, AC0
 MOVR   AC0, VD0
 /R     25600.0, VD0      //VD0就是第一个压力传感器的实际压力值   
 网络2:
 LD     SM0.0
 MOVD   0, AC0
 MOVW   AIW2, AC0
 -I     +6400, AC0
 DTR    AC0, AC0
 MOVR   AC0, VD4
 /R     25600.0, VD4      //VD4就是第二个压力传感器的实际压力值   
 网络3:
 LD     SM0.0
 MOVD   0, AC0
 MOVW   AIW4, AC0
 -I     +6400, AC0
 DTR    AC0, AC0
 MOVR   AC0, VD8
 /R     25600.0, VD8     //VD8就是第三个压力传感器的实际压力值 

 等等

 其实不用这样,他们的特点是计算过程相同,但数值不同,所以就不需要将计算过程写12遍,只要写一遍就可以了,将AIW值传入到子程序,然后从子程序输出一个结果就可以了。
 ORGANIZATION_BLOCK 主程序:OB1
 TITLE=程序注释
 BEGIN
 Network 1 // 网络标题
 // 网络注释
 LD     SM0.0
 CALL   SBR0, AIW0, VD0
 CALL   SBR0, AIW2, VD4
 CALL   SBR0, AIW4, VD8
 CALL   SBR0, AIW6, VD12
 CALL   SBR0, AIW8, VD16
 CALL   SBR0, AIW10, VD20
 CALL   SBR0, AIW12, VD24
 CALL   SBR0, AIW14, VD28
 CALL   SBR0, AIW16, VD32
 CALL   SBR0, AIW18, VD36
 CALL   SBR0, AIW20, VD40
 CALL   SBR0, AIW22, VD44

 END_ORGANIZATION_BLOCK
 SUBROUTINE_BLOCK SBR_0:SBR0
 TITLE=子程序注释
 VAR_INPUT
 输入:INT;
 END_VAR
 VAR_OUTPUT
 输出:REAL;
 END_VAR
 BEGIN
 Network 1 // 网络标题
 // 网络注释
 LD     SM0.0
 MOVD   0, AC0
 MOVW   LW0, AC0
 -I     +6400, AC0
 DTR    AC0, AC0
 MOVR   AC0, LD2
 /R     25600.0, LD2

 将以上程序复制到记事本里,然后将后缀改为.awl,将编程软件打开,文件--导入即可查看该程序。

 
 

提问者对于答案的评价:
谢谢怀工的指教

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc352198.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月5日 上午1:05
下一篇 2021年7月5日

相关推荐

发表回复

登录后才能评论