我的提问请看以下链接: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