main:
网络一
LD SM0.0
CALL 管道浓度:SBR2, VB404, VW405, 100.0, 0.0, VD1000
//调用管道浓度子程序,vb404为程序的输入,vw405为数据,量程为100,结果存如vd1000中
网络2
LD SM0.0
CALL 管道温度:SBR12, VB407, VW408, 200.0, 0.0, VD1004
//调用管道温度子程序,vb404为程序的输入,vw405为数据,量程为100,结果存如vd1004中
子程序:
/*我程序要实现的功能:
数据格式为3个字节,第一个字节为标志为0为模拟量,80为负温度.以上数据通过自由口通讯得到.第二\三字节为数据.数据为16进制的整数,把它转化成浮点数,然后缩小100倍.在量程范围内输出,不在则不输出.
d0---为标志位
lihi---为数据
result1\result11---为输出
lih---量程高限
lil---量程低限
定义变量:
d0 in bety
lihi in word
lih in real
lil in real
result1 out real
temp1 temp dword
temp2 temp real
temp3 temp real
*/
管道浓度
LDB= #d0:LB0, 16#0 //当D0为0时
ITD #lihi:LW1, #temp1:LD15 //lihi转换为双整形数据
DTR #temp1:LD15, #temp2:LD19 //在转换成实数
MOVR #temp2:LD19, #temp3:LD23 //得到的实数/100
/R 100.0, #temp3:LD23
AR<= #temp3:LD23, #lih:LD3 //小于量程高限
AR>= #temp3:LD23, #lil:LD7 //大于量程低限
MOVR #temp3:LD23, #result1:LD11 //在量程范围为输出,在量程范围外不输出
管道温度
LDB= #d0:LB0, 16#0 //当D0为0时
ITD #lihi:LW1, #temp11:LD15 //lihi转换为双整形数据
DTR #temp11:LD15, #temp12:LD19 //在转换成实数
MOVR #temp12:LD19, #temp13:LD23 //得到的实数/100
/R 100.0, #temp13:LD23
AR<= #temp13:LD23, #lih:LD3 //小于量程高限
AR>= #temp13:LD23, #lil:LD7 //大于量程低限
MOVR #temp13:LD23, #result1:LD11 //在量程范围为输出,在量程范围外不输出
现象:在程序过程中,当管道浓度的标志为0,执行子程序.计算结果存在VD1000中,管道温度的标志为80,子程序不执行,但temp13的值和管道浓度的值是一样的,并且和管道浓度的值一起变化.VD1004的值和vd1000的值是一样的.
最初编程的时候是用同一个子程序,出现此问题,我把它分为两个子程序.
请问我的程序错在那里了?