PROFIBUS教程(十二)——组织块OB-1

来源:百度文库 编辑:神马文学网 时间:2024/04/28 12:24:47
一、循环处理的主程序(OB1)
主程序在OB1中执行。OB1调用功能块(FB)、标准功能块(SFB)或使用功能调用(FC)和系统功能调用(SFC)的功能。OB1被循环地处理。在启动OB被处理后(OB100用于予热再起动或OB101用于热再起动或OB102用于冷再起动),首先执行OB1。在OB1循环结束时,操作系统传送过程映象输出表到输出模块。在OB1再开始前,操作系统通过读取当前的输入I/O的信号状态来更新过程映象输入表。这个过程连续不断地重复。这就是我们所称“循环处理”。所有OB的运行被监视,OB1的优先权最低,因此它可以被较高优先权的OB中断。
SIMATIC S7可编程控制器的CPU允许监视最大循环时间。这就是处理OB1的时间。也可以保证能观察处理OB1的最小循环时间。如果已设置最小循环时间,则CPU操作系统将延时达到此时间后才开始另一次OB1。可以在HW Config程序中的CPU Properties下定义用于循环监视时间和最小循环时间的参数。关于OB1本地数据的含义见表1
表1  OB1的本地数据
变量
数据类型
描述
OB1_EV_CLASS
BYTE
事件类别和标识符:B#16#11=活动的
OB1_SCAN_1
BYTE
B#16#01予热再起动结束
B#16#02热再起动结束
B#16#03自由周期结束
OB1_PRIORITY
BYTE
优先权等级“1”
OB1_OB_NUMBR
BYTE
OB号码(01)
OB1_RESERVED_1
BYTE
保留
OB1_RESERVED_2
BYTE
保留
OB1_PREV_CYCLE
INT
以前循环的运行时间(ms)
OB1_MIN_CYCLE
INT
从最近的启动以来最小的循环时间(ms)
OB1_MAX_CYCLE
INT
从最近的启动以来最大的循环时间(ms)
OB1_DATE_TIME
DT
OB被请求的日期和时间
以十六进制数字表达的格式:
数据类型 字节  B#16#x    (x值范围从“0”至“FF”)
数据类型 字    W#16#x   (x值范围从“0”至“FFFF”)
数据类型 双字  DW#16#x  (x值范围从“0”至“FFFF FFFF”)
二、过程中断(OB40~OB47)
SIMATIC S7 可编程控制器的CPU提供8种不同的OB(OB40~OB47)用于对过程中断的反应。对于支持过程中断的S7 DP从站,可用HW Config硬件组态程序定义通道、通用条件和OB号。
当S7 DP从站触发一个过程中断时,它就被CPU操作系统所识别,并根据它的优先权起动相应的OB。在中断OB中的用户程序被处理(OB已结束)后,一个确认信息被发送给产生中断的S7 DP从站。
如果当OB仍在处理第一个中断时另一个中断到达了,则第二个中断请求被寄存起来,并在适当的时候处理此OB。这就是S7-400系统中的过程。对于S7-300系统而言,如果在刚被处理的中断确认后产生第二个过程中断的事件已不在等候,则此中断被丢失。
过程中断OB提供20个字节的本地数据。此数据含有产生此中断的模块的逻辑基准地址。关于本地数据的描述,请参阅表2。
表2   OB40~OB47提供的本地数据的内容
变量
数据类型
说明
OB4x_EV_CLASS
BYTE
事件类别和标识符:B#16#11=中断是活动的
OB4x_STRT_INF
BYTE
B#16#41=通过中断线1的中断
仅对S7-400:
B#16#42=通过中断线2的中断
B#16#43=通过中断线3的中断
B#16#44=通过中断线4的中断
OB4x_PRIORITY
BYTE
优先权等级“16”(OB40)~“23”(OB47)(缺省值)
OB4x_OB_NUMBR
BYTE
OB号(40~47)
OB4x_PESERVED_1
BYTE
保留
OB4x_IO_FLAG
BYTE
B#16#54=输入模块
B#16#55=输出模块
OB4x_MDL_ADDR
WORD
触发此中断的模块的逻辑基准地址
OB4x_POINT_ADDR
DWORD
对数字模块
在模块上带有输入状态的位字段
对模拟模块(CP或IM):
模块的中断状态
OB4x_DATE_TIME
DT
OB被请求的日期和时间
三、诊断中断(OB82)
SIMATIC S7可编程控制器的CPU提供组织块OB82用来检查和评估诊断中断。当具有诊断能力的DP从站检查出一个错误(也叫“事件”)时,此OB被启动。在两种情况下CPU操作系统调用OB82:诊断中断已经“到来”和诊断中断已经“离去”。然而,对此有两个条件必须满足为真:DP从站必须有能力支持此诊断功能并且已经用HW Config程序在DP从站的参数集中定义了诊断报警。
如果你没有编程OB82,则CPU对诊断中断的反应是进入STOP状态。OB82提供在DP从站上引起中断的有关出错的详细信息。OB82的20个字节本地数据(见表3)包含有故障的DP从站的逻辑基准地址或DP从站中有故障的模块,以及4个字节的诊断信息。
表3  OB82的本地数据
变量
数据类型
描述
OB82_EV_CLASS
BYTE
中断类别和标识符:
B#16#38=离去的事件
B#16#39=到来的事件
OB82_FLT_ID
BYTE
B#16#42=出错代码
OB82_PRIORITY
BYTE
优先权等级
“26”(RUN运行状态缺省值)或“28”(STARTUP运行状态)
OB82_OB_NUMBR
BYTE
OB-号(82)
OB82_RESERVED_1
BYTE
保留
OB82_IO_FLAG
BYTE
B#16#54=输入模块
B#16#55=输出模块
OB82_MDL_ADDR
INT
发生故障的模块的逻辑基准地址
OB82_MDL_DEFECT
BOOL
模块故障
OB82_INT_FAULT
BOOL
内部错误
OB82_EXT_FAULT
BOOL
外部错误
OB82_PNT_INFO
BOOL
通道错误
OB82_EXT_VOLTAGE
BOOL
外部辅助电压不存在
OB82_FLD_CONNCTR
BOOL
正面插头连接器未连接
OB82_NO_CONFIG
BOOL
模块的参数集丢失
OB82_CONFIG_ERR
BOOL
模块中参数有错
表3  续
变量
数据类型
描述
OB82_MDL_TYPE
BOOL
位0至3:模块类型
位4:当前通道信息
位5:当前用户信息
位6:来自替代者的诊断中断
位7:保留
OB82_SUB_MDL_ERR
BOOL
用户模块出错/不存在
OB82_COMM_FAULT
BOOL
通信出错
OB82_MDL_STOP
BOOL
运行状态(0:RUN,1:STOP)
OB82_WTCH_DOG_FLT
BOOL
时间监控已触发
OB82_INT_PS_FLT
BOOL
内部模块供电电压有故障
OB82_PRIM_BATT_FLT
BOOL
电池没电
OB82_BCKUP_BATT_FLT
BOOL
整个后备电池故障
OB82_RESERVED-2
BOOL
保留
OB82_RACK_FLT
BOOL
扩展机架故障
OB82_PROC_FLT
BOOL
处理器故障
OB82_EPROM_FLT
BOOL
EPROM出错
OB82_RAM_FLT
BOOL
RAM出错
OB82_ADU_FLT
BOOL
ADU/DAU出错
OB82_FUSE_FLT
BOOL
保险丝熔断
OB82_HW_INTR_FLT
BOOL
丢失过程中断
OB82_RESERVED_3
BOOL
保留
OB82_DATE_TIME
DT
OB被请求的时期和时间
四、插/拔模块中断(OB83)
SIMATIC S7-400系列的CPU常规地检查在中央机架和扩展机架中存在的模块。插入S7 DP从站且分散地与S7系统连接的模块(如,ET200M/IM 153-2模块)也要被此监视功能检查。如果已组态的模块从站从模块化的S7 DP从站中拔走且S7 CPU还处在RUN状态,则中断OB83被触发并在诊断缓存器和模块状态表中产生一个登入项。如果模块从DP从站中拔走而S7 CPU处于STOP状态或刚刚起动,则此中断被寄存在CPU的诊断缓存器和模块状态表中,但不调用OB83。
如果CPU正在运行时插入已组态的模块,则CPU检查所插入的模块类型是否与组态匹配。然后,调用OB83并指出模块类型正确,则通过HW Config程序用已组态在CPU上的参数集装入此模块。此时,还可以调用系统功能(SFC)来更改新插入的模块的参数,表4描述OB83的本地数据。
表4  OB83的本地数据
变量
数据类型
描述
OB83_EV_CLASS
BYTE
中断类别和标识符:
B#16#38=插入的模块
B#16#39=拔出的模块或者不能被寻址的模块
OB83_FLT_ID
BYTE
出错代码:(可能的值:B#16#61,B#16#63,B#16#64,B#16#65)
OB83_PRIORITY
BYTE
优先权等级
“26”(RUN运行状态缺省值)或
“28”(STARTUP状态)
OB83_OB_NUMBR
BYTE
OB号(83)
OB83_RESERVED_1
BYTE
保留
OB83_MDL_ID
BYTE
B#16#54=输入I/O区域(PE)
B#16#55=输出I/O区域(PA)
OB83_MDL_ADDR
WORD
受影响的模块的逻辑基准地址
OB83_RACK_NUM
WORD
模块机架号码或DP站号和DP主站系统ID(高字节)
OB83_MDL_TYPE
WORD
受影响的模块的模块类型
OB83_DATE_TIME
DT
OB被请求的日期和时间
所组态的模块类型与实际插入在DP从站中的模块类型之间的失配由本地变量OB83_MDL_TYPE寄存起来。根据写入此变量的出错代码,按具体情况发出下列出错信息之一:
表5  由本地变量OB83_FTL_ID报告的出错代码
OB83_FTL_ID中的出错代码
依据OB83_MDL_TYPE内容的出错含义
B#16#61
对于OB83_MDL_TYPE=实际模块类型
已插入的模块,模块类型OK(对中断类别B#16#38)
已拔走的模块,或不可寻址的模块(对中断类别B#16#39)
B#16#63
对于OB83_MDL_TYPE=实际模块类型
已插入的模块,但模块类型错
B#16#64
对于OB83_MDL_TYPE=设定的模块类型
已插入的模块,但有故障(类型ID不可读)
B#16#65
对于OB83_MDL_TYPE=实际模块类型
已插入的模块,但模块参数中有错
五、程序顺序出错(OB85)
当用户程序调用了一个未被装入的程序块或操作系统调用了一个没有编程的OB时,S7 CPU的操作系统将调用OB85。当过程映象正被更新时出现了I/O存取错误,也调用OB85。当被组态的用于DP从站输入和输出的地址被放在S7 CPU的过程映象表时,而此DP从站已损坏,就可能发生上述情况。如果没有编程OB85,则S7 CPU对这些出错的反应是转变到STOP状态。
表6展示了OB85本地数据的原始结构。表7建议怎样构造OB85的本地数据,以便用户程序可以评估这些出错代码。当在S7系统中使用分散I/O时,OB85_FTL_ID变量的十六进制出错代码“B1”和“B2”特别重要。
表6  OB85的本地数据(原始结构)
变量
数据类型
描述
OB85_EV_CLASS
BYTE
中断类别和标识符(例如:B#16#39为“更新过程映象时出错”)
OB85_FLT_ID
BYTE
出错代码:(可能的值:B#16#A1,B#16#A2,B#16#A3,B#16#A4,B#16#B1,B#16#B2,)
OB85_PRIORITY
BYTE
优先权等级
“26”(RUN状态的缺省值)或
“28”(STARTUP状态)
OB85_OB_NUMBR
BYTE
OB号(85)
OB85_RESERVED_1
BYTE
保留
OB85_ RESERVED_2
BYTE
保留
OB85_ RESERVED_3
INT
保留
OB85_ERR_EV_CLASS
BYTE
产生错误的中断类别
OB85_ERR_EV_NUM
BYTE
产生错误的中断号
OB85_OB_PRIOR
BYTE
出现错误时,正在处理的OB的优先权等级
OB85_OB_NUM
BYTE
出现错误时,正在处理的OB的号
OB85_DATE_TIME
DT
OB被请求的日期和时间
表7  OB85的本地数据结构(用于有关出错代码编程)
变量
数据类型
OB85_EV_CLASS
BYTE
OB85_FLT_ID
BYTE
OB85_PRIORITY
BYTE
OB85_OB_NUMBR
BYTE
OB85_DKZ23
BYTE
OB85_RESERVED_2
BYTE
OB85_Z1
WORD
OB85_Z23
DWORD
OB85_DATE_TIME
DATE_AND_TIME
表8解释由变量OB85_FLT_ID报告的出错代码。这些出错代码的含义取决于变量OB85_DKZ23、OB85_Z1和OB85_Z23的内容。
表8  OB85_FLT_ID出错代码
OB85_FLT_ID出错代码
出错含义
B#16#A1
根据STEP7程序,程序或操作系统为OB生成一个起动事件,但此OB未装入CPU。
B#16#A2
根据STEP7程序,程序或操作系统为OB生成一个起动事件,但此OB未装入CPU。
变量OB85_Z1和OB85_Z23提供下列附加信息:
OB85_Z1:引起出错的事件类别(被中断的程序层
次的值)
OB85_Z23:
高字:报告触发事件的类别和号
低字:出错时,报告活动的程序层次和活动
的OB
B#16#A3
操作系统存取一个块时出错
变量OB85_Z1和OB85_Z23提供下列附加信息:
OB85_Z1:操作系统的详细出错标识符
高字节:1:集成功能
2:IEC定时器
低字节:0:无出错解决方案
1:块未装入
2:区域长度出错
3:写保护出错
表8  续
OB85_FLT_ID出错代码
出错含义
OB85_Z23:
高字:块号
低字:引起出错的MC7命令的相对地址。关于块类型,
参看本地变量OB85_DKZ23。
B#16#88=OB
B#16#8C=FC
B#16#8E=FB
B#16#8A=DB
B#16#B1
B#16#B2
更新过程映象输入表时I/O存取出错
给输出模块传送过程映象输出表时I/O存取出错
变量OB85_Z1和OB85_Z23提供下列附加信息:
OB85_Z1:CPU保留作为内部使用
OB85_Z23:造成I/O存取出错(PZF)的I/O字节号
六、机架故障(OB86)
S7 CPU的操作系统通过调用组织块OB86对扩展机架、DP主站系统和DP从站的故障(到来的事件)或恢复(离去的事件)作出反应。当这类事件发生时如果未编程OB86,则S7 CPU输入STOP状态。
表9指出OB86的本地数据的原始结构。表10指出的结构建议如何组织OB86的本地数据以便利用用户程序可以运行一个简单的依据出错代码的评估。当S7系统中使用分散I/O时,变量OB86_FTL_ID的十六进制出错代码“C3”、“C4”和“C7”特别地重要。
表9  OB86的本地数据
变量
数据类型
说明
OB86_EV_CLASS
BYTE
事件类别和标识符:
B#16#38=离去的事件
B#16#39=到来的事件
OB86_FTL_ID
BYTE
出错代码:(可能的值:B#16#C1,B#16#C2,B#16#C3,B#16#C4,B#16#C5,B#16#C6,B#16#C7,)
OB86_PRIORITY
BYTE
“26”(RUN状态缺省值)或
“28”(STARTUP运行状态)
OB86_OB_NUMDR
BYTE
OB号(86)
OB86_RESERVED_1
BYTE
保留
OB86_RESERVED_2
BYTE
保留
OB86_MDL_ADDR
WORD
取决于出错代码
OB86_RACKS_FLTD
ARRAY
[1…31]OF BOOL
取决于出错代码
OB86_DATE_TIME
DT
OB被请求的日期和时间
表10  OB86的本地数据结构(用于有关出错代码编程)
变量
数据类型
OB86_EV_CLASS
BYTE
OB86_FLT_ID
BYTE
OB86_PRIORITY
BYTE
OB86_OB_NUMBR
BYTE
OB86_RESERVED_1
BYTE
OB86_RESERVED_2
BYTE
OB86_MDL_ADDR
WORD
OB86_Z23
DWORD
OB86_DATE_TIME
DATE_AND_TIME
表11说明由变量OB86_FLT_ID报告的出错代码。出错代码的含义取决于变量OB86_DKZ23、OB86_Z1和OB86_Z23的内容。
表11  OB86_FLT_ID出错代码
OB86_FLT_ID
出错代码
出错含义
B#16#C1
扩展机架故障
OB86_MDL_ADRR:IM逻辑基准地址
变量OB86_Z23提供下列附加信息
OB86_Z23:每一位(bit)指定给一个可能的扩展机架
位0:总为0
位1:第1个扩展机架
┇     ┇
位21:第21个扩展机架
位22~29:总为0
位30:在SIMATIC S5区域至少有一个扩展机架有故障
位31:总为0
注解:“到来”的事件指出扩展机架的故障(指定的位被设置为“1”)。
它总是指向触发OB86调用的那些扩展机架,早已出现故障的
扩展机架不再被指出。
“离去”的事件指出早先出现故障的扩展机架恢复(指定的位
被设置为“1”)
B#16#C2
具有标识符的扩展机架复位:
“在设定与实际组态间有偏差的扩展机架的故障已过去”
OB86_MDL_ADDR:IM的逻辑基准地址
由变量OB86_Z23提供下列附加信息
OB86_Z23:对每个可能的扩展机架都包含1位(见出错代码
B#16#C1)。设定位的含义:
在受影响的扩展机架上:
—带有错误类型标识符的模块
—已组态的模块丢失
—至少有一个模块有缺陷
B#16#C3
分散I/O的DP主站系统有故障。(到来的事件提供出错代码B#16#C3;离去的事件提供出错代码B#16#C4和事件类别B#16#38)
每个较低层的DP站的恢复也起动OB86
OB86_MDL_ADDR:DP主站的逻辑基准地址
变量OB86_Z23提供下列附加信息
OB86_Z23:DP主站系统ID
位0~7:保留
位8~15:DP主站系统ID
位16~31:保留
表11  续
OB86_FLT_ID
出错代码
出错含义
B#16#C4
B#16#C5
DP站故障
DP站不正常
OB86_MDL_ADDR:DP主站的逻辑基准地址
变量OB86_Z23提供下列附加信息
OB86_Z23:受影响的DP从站的地址
位0~7:DP站的号
位8~15:DP主站系统ID
位16~30:S7 DP从站的逻辑基准地址或对于标准DP
从站的诊断地址
位31:I/O标识符
B#16#C6
扩展机架恢复,但在模块参数集中有错
OB86_MDL_ADDR:IM的逻辑基准地址
变量OB86_Z23提供下列附加信息
OB86_Z23:对每个可能的扩展机架指定1位。
位0:总是0
位1:第1个扩展机架
┇    ┇
位21:第21个扩展机架
位22~30:保留
位31:总是0
一个设置位的含义:
受影响的扩展机架的模块带有:
—错误的类型标识符,或
—丢失或错误的参数
B#16#C7
DP站恢复,但在模块参数集中有错
OB86_MDL_ADDR:DP主站的逻辑基准地址
变量OB86_Z23提供下列附加信息。
OB86_Z23:受影响的DP从站地址:
位0~7:DP站的号
位8~15:DP主站系统ID
位16~30:DP从站逻辑基准地址
位31:I/O标识符
七、I/O存取出错(OB122)
在STEP7指令正试图存取I/O模块或DP从站的输入/输出数据时出现错误,则S7 CPU操作系统调用OB122。当用户程序试图存取不存在的或有缺陷DP从站的输入或输出时,也调用OB122。如果没有编程OB122,则CPU对这种I/O存取错的反应是切换到STOP状态。表12指出OB122的本地数据。
表12  OB122的本地数据
变量
数据类型
说明
OB122_EV_CLASS
BYTE
事件类别和标识符(例,B#16#29表示“I/O存取出错”)
OB122_SW_FLT
BYTE
出错代码
B#16#42=(对S7-300)读存取I/O时出错
=(对S7-400)在一个错误出现后,第1次
读存取I/O时出错
B#16#43=(对S7-300)写存取I/O时出错
=(对S7-400)在一个错误出现后,第1次
写存取I/O时出错
B#16#44=(仅对S7-300)在一个错误出现后,第n
(n>1)次读存取I/O时出错
B#16#45=(仅对S7-400)在一个错误出现后,第n
(n>1)次写存取I/O时出错
OB122_PRIORITY
BYTE
出现错误的OB的优先权等级
OB122_OB_NUMBR
BYTE
OB号(122)
OB122_BLK_TYPE
BYTE
出现错误的块类型
B#16#88=OB
B#16#8A=DB
B#16#8C=FC
B#16#8E=FB
OB122_MEM_AREA
BYTE
存取类型和存贮器区域
位7~4,存取类型:0:位存取
1:字节存取
2:字存取
3:双字存取
位3~0,存贮器区域:0:I/O区域
1:过程映象输入表
2:过程映象输出表
OB122_MEM_ADDR
WORD
出现错误的存贮器地址
OB122_BLK_NUM
WORD
造成错误的MC7命令的块号
OB122_PRG_ADDR
WORD
造成错误的MC7命令的相对地址
OB122_DATE_TIME
DT
OB被请求的日期和时间