各位大虾:
我刚接触S7-200不久,试着编了一个小程序,但无法实现预定功能。
要实现的功能:对一水箱进行温度控制(假设设定值为40摄氏度),0---10摄氏度,加热器输出功率100%(输出全1),10---20摄氏度,加热器输出功率为50%,20---40摄氏度,加热器输出功率为25%;想用脉宽调制实现(设定周期为4秒),通过温度变送器采集水温,经EM235读入模拟量,与设定值比较。
目前只能执行到输出全1,就不能继续执行。
急盼回音!!!!!!!!!
程序如下:
MAIN //
LD SM0.1
R A0.1, 2
CALL SBR_0 //初始化
NETWORK 2
LD SM0.0
CALL SBR_1 //模拟量采集
NETWORK3
LDW>= VW20, VW114 //采样值(VW20)与第一个设定值(vw114---10摄氏度 )比较
S E0.0, 1
ATCH INT_0, 0
NETWORK4
LDW>= VW20, VW118 //采样值(VW20)与第二个设定值(vw118-----20摄氏度)比较
S E0.0, 1
ATCH INT_1, 0
NETWORK5
LDW>= VW20, VW110 //采样值(VW20)与第三个设定值(vw110----40摄氏度)比较
S E0.0, 1
ATCH INT_2, 0
END
子程序0 实现的是初始化一些用到的寄存器和启动PWM
SBR_0
LD SM0.0
MOVW +0, VW0
MOVW +64, VW2
MOVD +0, VD10
MOVD +0, VD14
MOVD +0, VD18
MOVW +13227, VW110 //40度
MOVW +8107, VW114 //10度
MOVW +11520, VW118 //20度
MOVB 16#DB, SMB77
MOVW +4000, SMW78
MOVW +4000, SMW80
ENI
PLS 1 // (占空比100%)
MOVB 16#DA, SMB77
CRET
子程序1实现的是读模拟量,采样64次求和
SBR_1
LD SM0.0
MOVW AEW2, VW12
LDW>= VW12, +0
MOVW +0, VW10
NOT
MOVW 16#FFFF, VW10
LD SM0.0
+D VD10, VD14
INCW VW0
LDW>= VW0, VW2
MOVD VD14, VD18
ENCO VW2, AC1
SRD VD18, AC1
MOVD +0, VD14
MOVW +0, VW0
CRET
中断0实现的是改变脉宽,使脉宽为2秒(占空比50%)
INT_0
-I +2000, SMW80
PLS 1
DTCH 0
CREI
中断1实现的是改变脉宽,使脉宽为1秒 (占空比25%)
INT_1
-I +3000, SMW80
PLS 1
DTCH 0
CRETI
中断1实现的是停止 (占空比0%)
INT_2
-I +4000, SMW80
PLS 1
DTCH 0
CRETI