发布于 2010-12-22 10:40:07
10楼
做好一个。拿去。
程序的编码器用1000脉冲的。程序把编码器一周分成4等分。每个象限点为分割点。并在q0.0到0.3标志这4个位置。
下面程序开始
ORGANIZATION_BLOCK 主程序:OB1
TITLE=
BEGIN
Network 1
LD SM0.1
CALL SBR0
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK 初始化:SBR0
TITLE=初始化使高计进入9模式并开始工作。
// 但是并没有真正的当前值和预置值。
// 因为还没有绝对定位。
// 连接一个4号事件。就是0位脉冲。I0.2的上升缘。
BEGIN
Network 1
LD SM0.0
ENI
MOVB 16#F8, SMB37
HDEF 0, 9
HSC 0
ATCH INT0, 4
ATCH INT1, 27
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK 复位中断:INT0
TITLE=高计产生复位。并获得真正的当前值,获得预置值。
// 同时标记当前处于的位置的段号。用Q点指示。
BEGIN
Network 1
LD SM0.0
MOVB 2#11101000, SMB37
Network 2
LD SM36.5
MOVD 0, SMD38
MOVD 1000, SMD42
ATCH INT2, 12
= Q0.0
NOT
MOVD 3996, SMD38
MOVD 3000, SMD42
ATCH INT4, 12
= Q0.3
Network 3
LD SM0.0
HSC 0
MOVB 2#10101000, SMB37
END_INTERRUPT_BLOCK
INTERRUPT_BLOCK 反向中断:INT1
TITLE=
BEGIN
Network 1
LD SM36.5
LPS
A Q0.0
ATCH INT2, 12
MOVD 1000, SMD42
LRD
A Q0.1
ATCH INT3, 12
MOVD 2000, SMD42
LRD
A Q0.2
ATCH INT4, 12
MOVD 3000, SMD42
LPP
A Q0.3
ATCH INT0, 4
Network 2 // 网络标题
// 网络注释
LDN SM36.5
LPS
A Q0.1
ATCH INT2, 12
MOVD 1000, SMD42
LRD
A Q0.2
ATCH INT3, 12
MOVD 2000, SMD42
LRD
A Q0.3
ATCH INT4, 12
MOVD 3000, SMD42
LPP
A Q0.0
ATCH INT0, 4
Network 3
LD SM0.0
HSC 0
END_INTERRUPT_BLOCK
INTERRUPT_BLOCK 三点位:INT2
TITLE=
BEGIN
Network 1
LD SM36.5
MOVD 2000, SMD42
ATCH INT3, 12
= Q0.1
NOT
ATCH INT0, 4
= Q0.0
Network 2
LD SM0.0
HSC 0
END_INTERRUPT_BLOCK
INTERRUPT_BLOCK 六点位:INT3
TITLE=
BEGIN
Network 1
LD SM36.5
MOVD 3000, SMD42
ATCH INT4, 12
= Q0.2
NOT
MOVD 1000, SMD42
ATCH INT2, 12
= Q0.1
Network 2
LD SM0.0
HSC 0
END_INTERRUPT_BLOCK
INTERRUPT_BLOCK 九点位:INT4
TITLE=
BEGIN
Network 1
LD SM36.5
ATCH INT0, 4
= Q0.3
NOT
MOVD 2000, SMD42
ATCH INT3, 12
= Q0.2
Network 2
LD SM0.0
HSC 0
END_INTERRUPT_BLOCK
上面程序结束