哪位编程高手帮我分析分析程序哪错了

已锁定

xgg

  • 帖子

    45
  • 精华

    0
  • 被关注

    0

论坛等级:游民

注册时间:2006-01-06

普通 普通 如何晋级?

哪位编程高手帮我分析分析程序哪错了

955

12

2007-08-18 22:32:21

程序要求仪器开机1小时自动完成一次数据零点校正,然后是每48小时完成一次校准,数据要求把采集的零点系数存入EEPROM中,在时间中间被打断就重新计时,下面这个程序中用到了西门子提供的免费提供的一个存储库,结果就执行不了,不知道为什么,哪为高手帮忙看看,删除掉这个调用就可以执行
ORGANIZATION_BLOCK 主程序:OB1
TITLE=程序注释程序注释M18.7开机一小时产生的一个标志位
// M18.0程序执行一次自校准后自动复位
// M29.0手动校准的标志,执行手动就复位校准计时
BEGIN
Network 1
LD SM0.1
R M18.0, 6
S M18.7, 1
Network 2 // 网络标题
LD SM0.0
= L60.0
LD M18.0
= L63.7
LD M29.0
= L63.6
LD L60.0
CALL SBR0, L63.7, L63.6, VB2700, VB2701, VD2702
Network 3
// 手动控制产生的标志
LD M29.0
S M18.3, 1
Network 4
// 中断前的数据保持
LD SM0.0
AN M18.1
MOVB MB1, VB2706
Network 5
// 正常状况下开机一小时执行一次自校准,然后每48小时循环执行一次,如果在一小时中间手动控制打断将不执行开机一小时的控制,而是重新计数,然后48时循环执行
LD M18.7
AN M18.3
AD>= VD2702, +1
OD>= VD2702, 48
EU
S M18.1, 1
S M18.2, 1
S M18.0, 1
R M18.7, 1
Network 6
LD M18.2
CALL SBR1
Network 7
// 把执行结果存在EEPROM中
LD SM0.0
= L60.0
LD M29.7
= L63.7
LD L60.0
CALL SBR2, L63.7, MD20, MW24, MW26, M14.0, M14.1
Network 8
LD M14.0
R M29.7, 1
Network 9
// 自校准执行后把MB1的状态恢复至执行前
LD M18.6
EU
MOVB VB2706, MB1
R M18.6, 1
R M18.0, 1
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK 校准计时:SBR0
TITLE=子程序注释
VAR_INPUT
自动清零:BOOL;
手动清零:BOOL;
END_VAR
VAR_OUTPUT
秒:BYTE;
分:BYTE;
小时:DWORD;
END_VAR
BEGIN
Network 1 // 网络标题
// 网络注释
LD L0.0
O L0.1
FILL +0, LW1, 3
Network 2
LDN T40
TON T40, +10
Network 3
LD T40
INCB LB1
Network 4
LDB>= LB1, 60
INCB LB2
MOVB 0, LB1
Network 5
LDB>= LB2, 60
INCD LD3
MOVB 0, LB2
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK 自动校准:SBR1
TITLE=子程序注释MB1是一系列的泵的控制M1.0 是泵停(1)标志,下面是采集VD2012的数据进行校准运算,且VD2012的数要求保存在EEPROM中
VAR
temp:REAL;
END_VAR
BEGIN
Network 1 // 网络标题
// 在M1.0(1)泵时停状态下须开泵,
LD SM0.0
LPS
MOVW +0, VW200
AENO
S M31.4, 1
= Q1.7
LPP
A M1.0
ANDB 250, MB1
Network 2
LD SM0.0
MOVR VD2012, LD0
Network 3
// 采集运算间隔10MS
LDN M19.4
TON T47, +100
Network 4
LD T47
= M19.4
Network 5
LD T47
LDW>= C5, +3
CTU C5, +3
Network 6
LDW= C5, +1
EU
MOVR LD0, VD2046
AENO
MOVD &VB2046, VD20
AENO
S M29.7, 1
Network 7
LDW= C5, +2
EU
R Q1.7, 1
R M31.4, 1
R M18.2, 1
S M18.6, 1
Network 8 // 网络标题
// 网络注释
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK EEPROM_Indirect:SBR2
TITLE=##########################################################
// LICENSE:
// This program is distributed as freeware.
//
// Siemens makes no warranty, expressed or implied, with regard to this software. All implied warranties, including the warranties of merchantability and fitness for a particular use, are hereby excluded.
//
// Under no circumstances shall Siemens, or the authors of this product, be liable for any incidental or consequential damages, nor for any damages.
// ##########################################################
//
// This program is protected against unintentional delete.
// If you wish to modify the routine
// PASSWORD = EDIT
//
// ##########################################################
// ATTENTION: The values on the EEPROM could be stored about 100.000 times.
// After that the CPU will be DAMAGE.
// Be careful and store the data only when is necessary NOT continuously
// Example: If you store the data every hour they would live 11-12 years.
// ##########################################################
//
// This Routine store values of V-memory to the internal EEPROM.
//
// The Program start when Start=high.
// The Busy-Bit will indicate that the storage is in process.
// When the routine is finish the Busy=Low and Done=High.
// ( Do NOT reset the Done-Bit manually, this will be done automatically when the Start=Low )
//
// The program need three temporary variables: Memory as INT; Busy,Done as BOOL
//
// Example:
// store VB50,VB51,VB52,VB53,VB54 to EEPROM
// -------
//
// ----SM0.0----
//
//
// ---- M0.0 -----
//
// &VB50
// +5
// MW10
// Q1.0
// Q1.1 !!! do not reset manually the DONE-parameter, it will be automatically reset when START= Low !!!
// ------
//
//
VAR_INPUT
Start:BOOL;
Address:DWORD;
Lenght:INT;
END_VAR
VAR_IN_OUT
Memory:INT;
Busy:BOOL;
Done:BOOL;
END_VAR
VAR
V_Start:INT;
V_End:INT;
V_Adr:DWORD;
END_VAR
BEGIN
Network 1 // 此 POU 受密码保护,不能编辑和查看。

END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=中断程序注释
BEGIN
Network 1 // 网络标题
// 网络注释
END_INTERRUPT_BLOCK
SUBROUTINE_BLOCK 校准计时:SBR0
TITLE=子程序注释
VAR_INPUT
自动清零:BOOL;
手动清零:BOOL;
END_VAR
VAR_OUTPUT
秒:BYTE;
分:BYTE;
小时:DWORD;
END_VAR
BEGIN
Network 1 // 网络标题
// 网络注释
LD L0.0
O L0.1
FILL +0, LW1, 3
Network 2
LDN T40
TON T40, +10
Network 3
LD T40
INCB LB1
Network 4
LDB>= LB1, 60
INCB LB2
MOVB 0, LB1
Network 5
LDB>= LB2, 60
INCD LD3
MOVB 0, LB2
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK 自动校准:SBR1
TITLE=子程序注释MB1是一系列的泵的控制M1.0 是泵停(1)标志,下面是采集VD2012的数据进行校准运算,且VD2012的数要求保存在EEPROM中
VAR
temp:REAL;
END_VAR
BEGIN
Network 1 // 网络标题
// 在M1.0(1)泵时停状态下须开泵,
LD SM0.0
LPS
MOVW +0, VW200
AENO
S M31.4, 1
= Q1.7
LPP
A M1.0
ANDB 250, MB1
Network 2
LD SM0.0
MOVR VD2012, LD0
Network 3
// 采集运算间隔10MS
LDN M19.4
TON T47, +100
Network 4
LD T47
= M19.4
Network 5
LD T47
LDW>= C5, +3
CTU C5, +3
Network 6
LDW= C5, +1
EU
MOVR LD0, VD2046
AENO
MOVD &VB2046, VD20
AENO
S M29.7, 1
Network 7
LDW= C5, +2
EU
R Q1.7, 1
R M31.4, 1
R M18.2, 1
S M18.6, 1
Network 8 // 网络标题
// 网络注释
END_SUBROUTINE_BLOCK
哪位编程高手帮我分析分析程序哪错了 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33257条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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