工控智汇

工控智汇

如何通过编程方式获取DP子站的丢站和故障信息

admin 10 87
1概述

在西门子自动化系统中ProfibusDP总线的使用非常广泛,我们经常碰到需要获取DP子站的丢站信息、子站的模块故障信息,并将这些信息通过上位机SCADA软件进行监视。这就需要我们要对项目的DP总线进行诊断、故障检测。

本次我们将通过西门子诊断功能块FC125、SFC13功能块来判断项目中组态的IO子站(最多可以128个子站)在运行时的诊断信息。其中:FC125只提供哪些DP总线节点上发生故障或错误,并不能显示详细的信息。SFC13可以获取详细的DP子站的诊断数据。

2获取发生故障或故障的DP子站2.1FC125简介


接口参数说明:

CHECK_ACTIVE:为1时开始检测从站。

EXTERNAL_DP_INTERFACE:选择DP主站的接口,0表示集成在CPU上的DP主站,1表示外部DP主站接口,如CP443-5等。

DP_MASTERSYSTEM:PROFIBUS的ID号,在硬件组态中可以查看到PROFIBUS的ID号。有几条PROFIBUS-DP网络,就要调用FC125几次,分别赋值它们的PROFIBUSID号,数据类型为INT。

DATA_FIELD:50个字节的数据区,仅供FC125内部使用,数据类型为POINTER。

SUM_SLAVES_DIAG:从站诊断的总数,数据类型为INT。

LIST_SLAVES_NOT_PRESENT:检查到丢失的从站(软件已经组态但是现场没有连接硬件),16个字节的数据区,每一个数据位对应一个从站,置1表示一个从站丢失,如果丢失的从站返回或维修好,相对应的位复位。数据类型为POINTER。


LIST_SLAVES_ERROR:故障的从站(部分模块有故障,其他模块可以连续运行),16个字节的数据区,每一个数据位对应一个从站,置1表示一个从站故障,如果故障的从站返回或维修好,相对应的位复位。数据类型为POINTER。


RETVAL:调用FC125时的状态返回值,数据类型为INT。

BUSY:为1表示当前正在执行。

2.2编程步骤

1)建立诊断数据的DB块,用于保存FC125运行的数据,数据格式需与下图相同。


2)调用FC125功能块,填上对应的变量信息,如下图所示。


在冗余系统中因是冗余系统,DP总线有两条所以调用两次

LIST_SLAVES_NOT_PRESENT:为检测丢失的DP总站,共计128个位(该参数与子站对应关系详见FC125参数说明),每个位表示1个子站,当监测到为1,则发生丢站。

LIST_SLAVES_ERROR:检测到有错误的DP总站,共计128个位(该参数与子站对应关系详见FC125参数说明),每个位表示1个子站,当监测到为1,则该子站发生错误。

3获取DP子站详细的诊断信息

当我们通过FC125检测到有丢站或故障的子站时,我们可以通过SFC13读取有错误的站信息,示意如下。


通过SFC13读取DP诊断信息到RECORD。最后转移出表示模块状态的字节。LADDR为存在丢站或故障的IO子站的诊断地址:在DP组态时可以查看。

本次我们读取的是IM153模块的诊断信息,诊断信息在第7、8两个字节中,关于IM153模块的诊断字节分配如下图所示。其他类型的模块可以详见产品说明文档。


通过SFC13读取对应的IO子站信息后,子站中各个模块的状态字详细示意如下图所示。


因此,通过SFC13功能块,我们就能获取各个IO子站的详细诊断信息。

至此,我们就可以通过编程方式获取DP总线上的IO子站的诊断数据,在获取对应的诊断数据后,就可以在上位机SCADA上进行监测。