大家好,我正在学习S7-200,请大家多指教。
我想编一个由编码器显示转速的程序,由于没有编码器没有我打算通过PWM脉宽调制改变周期以仿真速度的增减,具体的编程思路如下:
1。定义PWM。
2。定义HSC
3。通过PTO设定PWM的周期(用I0.3上升沿触发)
4。通过I0.2上升沿来触发中断程序,使PWM的周期加一或减一,来仿真速度增件。
5。100MS采样计数值(计数值到达设定值复位),计算每分钟转速。
程序如下:
ORGANIZATION_BLOCK MAIN:OB1
TITLE=PROGRAM COMMENTS
BEGIN
Network 1 // Network Title
// 初始化
LD SM0.1
R Q0.0, 1
CALL SBR_0
MOVD +0, VD100
MOVD +0, VD104
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK SBR_0:SBR0
TITLE=SUBROUTINE COMMENTS
BEGIN
Network 1 // Network Title
// 定义PWM
LD SM0.0
MOVB 16#D3, SMB67
MOVW +20, SMW68
MOVW +5, SMW70
PLS 0
Network 2
// 定义HSC
LD SM0.0
MOVB 16#F8, SMB37
HDEF 0, 0
MOVD +0, SMD38
MOVD +500000, SMD42
HSC 0
Network 3
// 100MS时间中断
LD SM0.0
MOVB 100, SMB34
ATCH INT_2, 10
ENI
Network 4
// I0.3上升沿中断(通过PTO设定PWM的周期和脉宽)
LD SM0.0
ATCH INT_0, 6
ENI
Network 5
// I0.2上升沿中断(手动增减脉冲周期(仿真增速减速))
LD SM0.0
ATCH INT_1, 4
ENI
Network 6
// HSC中断(当前值复位)
LD SM0.0
ATCH INT_4, 12
ENI
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=INTERRUPT ROUTINE COMMENTS
BEGIN
Network 1 // Network Title
// 通过PTO设定PWM的周期和脉宽
LD SM0.0
BTI SMB28, VW200
MOVW +2, SMW68
+I VW200, SMW68
MOVW SMW68, SMW70
/I +2, SMW70
PLS 0
END_INTERRUPT_BLOCK
INTERRUPT_BLOCK INT_1:INT1
TITLE=INTERRUPT ROUTINE COMMENTS
BEGIN
Network 1 // Network Title
// 手动增减脉冲周期(仿真增速减速)
LD SM0.0
LPS
AN I0.4
INCW SMW68
LRD
PLS 0
LPP
A I0.4
DECW SMW68
END_INTERRUPT_BLOCK
INTERRUPT_BLOCK INT_2:INT2
TITLE=INTERRUPT ROUTINE COMMENTS
BEGIN
Network 1 // Network Title
// 速度计算
LD SM0.0
MOVD HC0, VD100
MOVD VD100, VD108
-D VD104, VD108
MOVD VD108, VD112
*D +600, VD112
DTR VD112, VD116
MOVR VD116, VD120
/R 1024.0, VD120
MOVD VD100, VD104
END_INTERRUPT_BLOCK
INTERRUPT_BLOCK INT_4:INT4
TITLE=INTERRUPT ROUTINE COMMENTS
BEGIN
Network 1 // Network Title
// 计数器复位
LD SM0.0
MOVD +0, SMD38
MOVB 16#F8, SMB37
HSC 0
MOVD +0, VD104
-D VD108, VD104
END_INTERRUPT_BLOCK
程序中有什么不合理的地方,请大家指点一下。谢谢!