如何读取DP或PN总线上各站点的状态?
可以使用 SFC51 'RDSYSST' 读出 SSL 部分列表或SSL 部分列表的摘录。
下面的配置在文中所附的例程中创建。下面的配置在文中所附的例程中创建:
图01 在用户程序(OB1)中,使用 SFC51 "RDSYSST" 读出 CPU 的系统状态列表。
REQ | INPUT | BOOL | 启动处理 |
SSL_ID | INPUT | WORD | 将要读取的系统状态列表或部分列表的SSL-ID。 |
INDEX | INPUT | WORD | 对象类型和编号 |
RET_VAL | OUTPUT | INT | 如果执行SFC时出错,则RET_VAL参数将包含错误代码。 |
BUSY | OUTPUT | BOOL | TRUE:尚未完成读取 |
SSL_HEADER | OUTPUT | STRUCT | SSL_HEADER SSL_HEADER参数是一个如下定义的结构: SSL_HEADER: STRUCT LENTHDR:WORD N_DR:WORD END_STRUCT LENTHDR是SSL列表或SSL部分列表的数据记录的长度。 如果仅读取了SSL列表的标题信息,则N_DR包含属于它的数据记录数。 否则,N_DR包含传送到目标区域的数据记录数。 |
DR | OUTPUT | ANY | SSL列表读取或SSL部分列表读取的目标区域:?如果仅读取了SSL列表的标题信息,则不能评估DR的值,而只能评估SSL_HEADER的值。?否则,LENTHDR和N_DR的乘积将指示已在DR中输入了多少字节。 |
参数 SZL_HEADER
参数 SZL_HEADER 具有以下结构:
SZL_HEADER: | STRUCT | |
LENTHDR: | WORD | |
N_DR: | WORD | |
END_STRUCT |
LENTHDR 是 SZL 部分列表或 SZL 部分列表摘录的数据记录长度。
如果仅读取了 SZL 部分列表的标头信息,则 N_DR 包含属于它的数据记录数。
否则,N_DR 包含传输到目标区域的数据记录数。
调用 SFC51 "RDSYSST" 时,通过输入参数 SSL_ID 指定了用户想读取的系统状态列表。使用此方法可读出下列数据,例如:
模板标识。
模板 LED 指示灯状态。
DP 主站系统或 PROFINET I/O 系统中,已经连接上 CPU 集成的 DP 或 PN 口的站点状态。
所有有关 SSL_ID 的具体的可用信息请参看手册 :“用于 S7300/400系统和 标准功能的系统软件 卷1&2” 当调用 SFC51 "RDSYSST" 时,在输入参数INDEX,要以16进制格式指定 PROFIBUS DP 主站系统或者PROFINET IO 系统的编号,PROFIBUS DP 主站系统的编号或者PROFINET IO 系统的编号可以在硬件配置中找到(见图.01)。
SFC51 "RDSYSST" 的参数分配根据使用不同的 CPU 而不同:
CPU 有集成的 DP 和以太网接口
CPU 有集成的 DP 接口但是没有集成的以太网接口
在 PN/DP CPU 中调用 SFC51 "RDSYSST" 的例子参数
图02
图03 输入 SSL_ID=694(HEX) 以确定 DP 主站系统或者 PROFINET IO 系统连接到 PN/DP CPU 站点的状态。
指定所读出的系统状态列表数据(诊断数据)的存储区域,诊断数据区大小为 258 字节。
SSL-ID为W#16#0x94的部分列表包含有关中央组态中的模块机架及PROFIBUS DP主站系统/PROFINET IO控制系统的站的期望组态和实际组态的信息。
SSL-ID | 部分列表摘录的SSL-ID:?W#16#0094: IO控制器系统的中央机架/站中的机架的期望状态(状态位 = 1:机架/站已组态)?W#16#0194: 已组态并已取消激活的IO控制器系统的站的激活状态(状态位 = 1)?W#16#0294: IO控制器系统的中央机架/站中的机架的实际状态(状态位 = 1:机架/站存在,处于激活状态并且未出现故障)?W#16#0694: IO控制器系统的中央机架/站中的扩展单元的诊断状态(状态位 = 1:机架/站中至少有一个模块出现故障或被取消激活) ?W#16#0794: IO控制器系统的中央机架/站的诊断/维护状态(状态位 = 0:无故障,无维护要求;状态位 = 1:机架/站有问题,和/或有维护要求或维护请求)?W#16#0F94: 仅限报头信息 |
INDEX | 0: 中央模块 1-32:PROFIBUS DP上的分布式模块 100-115:PROFINET IO上的分布式模块 |
LENTHDR | 下列数据记录的长度 |
N_DR | 下列数据记录的长度 |
表 01 为 258 字节长的诊断数据结构:
内容 | 长度 | 解释 |
index | 1 word | 0: 中央机架 1-31: 在 PROFIBUS DP 主站系统中的远程模块 100-115: 在 PROFINET IO 系统中的远程模块 |
status_0 | BOOL | 组信息 1: 下面状态位最少有一个值为 1 0: 下面所有状态位值为 0 |
status_1 | BOOL | 站 1 状态 1: 站 1 故障(仅对 694 有效) |
status_2 | BOOL | 站2 状态 1: 站2 故障(仅对 694 有效) |
... | ||
status_2047 | BOOL | 站2047 状态 1: 站2047 故障(仅对 694 有效) |
表 01 最大可以确定 2047 个站的状态。在诊断数据存储区域中每个站需要 1 bit。
此外,需要另外 1 bit 作为组信息。
就是说在诊断数据存储区域中,256 字节分配给每个站点的状态,2 字节为索引(关于 DP 主站系统或者 PROFINET IO 系统的信息)。
下面的例程中包含一个完整的 S7 站硬件组态,用户程序中有 SFC51 "RDSYSST" 的调用。 SSL_Status_PNDP.zip( 686 KB )
在没有集成以太网口的 CPU 中调用 SFC51 "RDSYSST" 的例子参数
图04 输入 SSL_ID=292(HEX) 以确定连接到只有集成 DP 接口的 CPU 所带的 DP 主站系统中的站点状态。
指定所读出的系统状态列表数据(诊断数据)的存储区域,诊断数据区大小为 16 字节。
表 02 为 16 字节长的诊断数据结构:
内容 | 长度 | 解释 |
status_0 | 1 byte | Bit 0:基本单元 (INDEX=0) 或站 1 Bit 1:扩展设备或站 2 ... Bit 7: 扩展设备或站 8 ... |
status_1 | 1 byte | Bit 0: 扩展设备或站 9 Bit 1: 扩展设备或站 10 ... Bit 7: 扩展设备或站 16 ... |
status_2 | 1 byte | Bit 0: 扩展设备或站 17 Bit 1: 扩展设备或站 18 ... Bit 7: 扩展设备或站 24 |
status_3 | 1 byte | Bit 0: 扩展设备或站 25 Bit 1: 扩展设备或站 26 ... Bit 6: S5 区域中的扩展设备或站 31 Bit 7: S5 区域中的扩展设备或站 32 |
... | ||
status_15 | 1 byte | Bit 0: S5 区域中的扩展设备或站 121 Bit 1: S5 区域中的扩展设备或站 122 ... Bit 7: S5 区域中的扩展设备或站 128 |