每次执行程序时都是从VB0+VB1+VB2如果不等于30,指针加1变为VB1+VB2+VB3然后结果再作判断,等于则停止。但我的程序没有按设想运行,调用一次就不运行了。
ORGANIZATION_BLOCK 主程序:OB1
TITLE=程序注释
BEGIN
Network 1 // 网络标题
// 上位机存入数据
LD SM0.0
MOVB 0, VB0
MOVB 1, VB1
MOVB 2, VB2
MOVB 3, VB3
MOVB 4, VB4
MOVB 5, VB5
MOVB 6, VB6
MOVB 7, VB7
MOVB 8, VB8
MOVB 9, VB9
MOVB 10, VB10
MOVB 11, VB11
MOVB 12, VB12
MOVB 13, VB13
MOVB 14, VB14
MOVB 15, VB15
Network 2
// QIDONG调用子程序
// ZHIZHENG起始地址
// ZHIJIGESHU字节个数
// ZHONGJIAN2起始地址变化,每次加1
// ZHONGHE每次调用SBR0的累加和
// WANCHENG子程序运行结束置位
LD M0.0
O M0.1
O SM0.1
= L60.0
LD M0.0
O M0.1
= L63.7
LD L60.0
CALL SBR0, L63.7, &VB0, 3, VD20, VW30, VW40, M1.0
Network 3
// 结果不符进行变址加1
LD SM0.0
A M1.0
AW<> VW30, 30
AN C0
EU
INCD VD20
S M0.1, 1
Network 4
LD SM0.0
A M1.0
AW<> VW30, 30
A M0.1
EU
LD SM0.0
A M1.0
ED
O SM0.1
CTU C0, 1
Network 5
LD SM0.0
A M1.0
ED
R M0.1, 1
Network 6
// 第一次启动
LD I0.0
EU
= M0.0
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK SBR_0:SBR0
TITLE=子程序注释
VAR_INPUT
QIDONG:BOOL;
ZHIZHENG:DWORD;
ZHIJIGESHU:WORD;
ZHONGJIAN2:DWORD;
END_VAR
VAR_OUTPUT
ZHONGHE:WORD;
DIZHI:WORD;
WANCHENG:BOOL;
END_VAR
VAR
ZHONGJIAN1:DWORD;
ZHONGJIAN3:DWORD;
ZHONGJIAN4:WORD;
END_VAR
BEGIN
Network 1
// 复位一下
LD L0.0
EU
R L15.0, 1
Network 2 // 网络标题
// 网络注释
LD L0.0
MOVD LD1, LD16
MOVD LD16, LD20
+D LD7, LD20
MOVB *LD20, AC0
DECW LW5
Network 3
LD L0.0
FOR LW24, +1, LW5
Network 4
// 加
LD L0.0
+D +1, LD20
MOVB *LD20, AC1
+I AC1, AC0
Network 5
NEXT
Network 6
// 输出
LD L0.0
AW= LW24, +3
MOVW AC0, LW11
= L15.0
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=中断程序注释
BEGIN
Network 1 // 网络标题
// 网络注释
END_INTERRUPT_BLOCK