大家好!
在300/400系统中可以使用系统功能块SFC52把用户自定义的报警信息写入到CPU的诊断缓冲区,诊断缓冲区的报警信息在某些特定情况下可以作为有力的依据,不像HMI的报警可以进行删除,CPU诊断缓冲区的报警必须由系统来删除!
具体例子如下图片:






具体可以参考SFC52的帮助如下:
描述
通过SFC 52 "WR_USMSG" (将用户元素写入诊断缓冲区),可以将用户自定义诊断事件写入诊断缓冲区。还可以将相应的诊断信息发送到为此目的而登录的所有站(通过设置输入参数SEND = TRUE)。如果出错,则输出参数RET_VAL将提供错误信息。
发送用户自定义诊断消息
SFC 52将用户自定义诊断事件写入诊断缓冲区。然后,还可以将相应的诊断消息发送到为此目的而登录的任何站(通过设置输入参数SEND = TRUE)。接下来,用户自定义诊断消息将写入发送缓冲区并自动发送到登录的站。
可以检查当前是否能够发送用户自定义诊断消息。为此,可以通过参数SSL_ID = W#16#0132和INDEX = W#16#0005调用SFC 51 "RDSYSST"。所获取的数据记录的第四个字指示当前能(1)否(0)发送用户元素。
发送缓冲区满
只有在发送缓冲区未满时,才能在发送缓冲区中输入诊断消息。可以在发送缓冲区中输入的条目数取决于所用CPU的类型。
如果发送缓冲区已满,则:
?诊断事件仍输入诊断缓冲区中,
?参数RET_VAL指示发送缓冲区已满(RET_VAL = W#16#8092)。
未登录站
如果要发送用户自定义诊断消息(SEND = TRUE),而未登录任何站,则
?用户自定义诊断事件将输入诊断缓冲区中,
?参数RET_VAL指示未登录任何站(RET_VAL = W#16#8091或W#16#8091。如果使用较早版本的CPU,将显示值W#16#8091)。
常规结构
诊断缓冲区中元素的内部结构如下:
字节 目录
1和2 事件ID
3 优先级
4 OB编号
5和6 保留
7和8 附加信息1
9、10、11和12 附加信息2
13 - 20 时间标志
事件ID
每个事件都分配有事件ID。
附加信息
这是有关事件的附加信息。每个事件的附加信息可以不同。创建诊断事件时,可以自己决定这些条目的内容。
发送用户自定义诊断消息时,可在(事件标识符指定的)消息文本中将附加信息合并为关联值。
时间标志
时间标志的类型为Date_and_Time。
参数 声明 数据类型 存储区 描述
SEND INPUT BOOL I、Q、M、D、L、
常数 启用发送用户自定义诊断消息到所有已登录的站
EVENTN INPUT WORD I、Q、M、D、L、
常数 事件标识符 - 由您分配事件标识符。而不是由消息服务器进行分配。
INFO1 INPUT ANY I、Q、M、D、L 1个字长的附加信息
INFO2 INPUT ANY I、Q、M、D、L 2个字长的附加信息
RET_VAL OUTPUT INT I、Q、M、D、L 故障信息
SEND
如果SEND = TRUE,则用户自定义诊断消息将发送到所有已登录的站。只有当站已经登录且发送缓冲区未满时,才会发送消息。元素的发送将与用户程序异步。
EVENTN
EVENTN参数包含用户事件的事件标识符。可输入类型为W#16#8xyz、W#16#9xyz、W#16#Axyz、W#16#Bxyz的事件标识符。
W#16#8xyz和W#16#9xyz格式的标识符属于预定义事件,W#16Axyz和W#16#Bxyz格式的标识符属于自由定义的事件。
进入状态的事件由x = 1指示,离开状态的事件由x = 0指示。对于A和B等级的事件,"yz"为在消息组态中分配给消息的十六进制格式的消息编号。
事件标识符的结构在第26.1部分介绍。
INFO1
INFO1参数包含一个字长的信息。INFO1允许使用下列数据类型:
?WORD
?INT
?ARRAY [0 - 1] OF CHAR
可以在消息文本中将参数INFO1合并为关联值,从而向该消息添加最新信息。
INFO2
INFO2参数包含两个字长的信息。INFO2允许使用下列数据类型:
?DWORD
?DINT
?REAL
?TIME
?ARRAY [0 - 3] OF CHAR
可以在消息文本中将参数INFO2合并为关联值,从而向该消息添加最新信息。
故障信息
错误代码 (W#16#...) 解释
0000 无错误
0091 未登录任何站(诊断事件输入诊断缓冲区中)
8083 INFO1的数据类型不允许使用
8084 INFO2的数据类型不允许使用
8085 EVENTN不允许使用
8086 INFO1的长度不允许
8087 INFO2的长度不允许
8091 (只有当使用较早版本的CPU时,才会显示此错误代码。)未登录任何站(诊断事件输入诊断缓冲区中)。
8092 目前不可以发送,发送缓冲区已满(诊断事件输入诊断缓冲区中)。
8xyy 一般错误信息,请参见使用输出参数RET_VAL判断故障
参见:
任务