子程序局部变量不释放问题

已锁定

laoxun

西门子1847工业学习平台

  • 帖子

    111
  • 精华

    0
  • 被关注

    2

论坛等级:游士

注册时间:2006-07-17

普通 普通 如何晋级?

子程序局部变量不释放问题

854

4

2008-03-29 20:17:20

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的值是一样的.

最初编程的时候是用同一个子程序,出现此问题,我把它分为两个子程序.

请问我的程序错在那里了?
子程序局部变量不释放问题 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33289条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。