TM3_GetModuleInternalStatus:获取 TM3 模块内部状态

功能描述

此功能有选择地读取 TM3 模拟量或温度模块的 I/O 通道状态,并由 ModuleIndex 予以指示。此功能块从 pStatusBuffer 所指向的内存位置处开始写入每个被请求通道的状态。

注: 此功能块用于模拟量和温度 I/O 模块。如要获取数字量 I/O 模块的状态信息,请参见 TM3_GetModuleBusStatus
注: 仅当停用 I/O 配置选项卡中的状态已启用参数时,才可以通过调用 TM3_GetModuleInternalStatus 功能来更新诊断字节的值。

图形表示形式

IL 和 ST 表示形式

若要查看 IL 或 ST 语言的一般表示形式,请参阅功能和功能块表示形式一章。

I/O 变量描述

被请求模块的每个模拟量/温度 I/O 通道都需要一个字节的内存。如果为所请求的 I/O 模块通道状态数分配的缓冲区内存不足,则该功能可能会覆盖为其他目的分配的内存,或者可能会尝试覆盖限制内存区。

 警告
意外的设备操作
确保 pStatusBuffer 指向已针对要读取的通道数充足分配的内存区。
未按说明操作可能导致人身伤亡或设备损坏等严重后果。

下表描述了输入变量:

输入

类型

注释

ModuleIndex

BYTE

扩展模块的索引(对于最靠近控制器的模块,为 0,次之的为 1,以此类推)

StatusOffset

BYTE

要在状态表中读取的第一个状态的偏移。

StatusSize

BYTE

要在状态表中读取的字节数。

pStatusBuffer

POINTER TO BYTE

缓冲区,包含读取状态表 (IBStatusIWx / IBStatusQWx)。

下表介绍了输出变量:

输出

类型

注释

TM3_GetModuleInternalStatus

TM3_ERR_CODE

如果命令正常运行,则返回 TM3_NO_ERR(十六进制的 00),否则返回错误的 ID 代码。就此功能块而言,除零之外的任何返回值都表示模块与状态请求不兼容,或者模块存在其他通讯问题。

示例

以下示例介绍如何获取模块内部状态:

VAR
TM3AQ2_Channel_0_Output_Status: BYTE;
END_VAR
TM3AQ2 is on position 1
Status of channel 0 is at offset 0
We read 1 channel 
TM3_GetModuleInternalStatus(1, 0, 1, ADR(TM3AQ2_Channel_0_Output_Status));
status of channel 0 is in TM3AQ2_Channel_0_Output_Status

TM3AQ2 模块(2 路输出)

获取第一个输出 QW0 的状态

  • StatusOffset = 0(0 输入 x 2)

  • StatusSize = 1(要读取 1 个状态)

  • pStatusBuffer 需要至少 1 个字节


VAR
TM3AM6_Channels_1_2_Input_Status: ARRAY[1..2] OF BYTE;
END_VAR
TM3AM6 is on position 1
Status of channel 1 is at offset 1
We read 2 consecutive channels 
TM3_GetModuleInternalStatus(1, 1, 2, ADR(TM3AM6_Channels_1_2_Input_Status));
status of channel 1 is in TM3AM6_Channels_1_2_Input_Status[1]
status of channel 2 is in TM3AM6_Channels_1_2_Input_Status[2]

TM3AM6 模块(4 路输入,2 路输出)

获取输入 IW1 和 IW2 的状态(IW0 是第一个输入)

  • StatusOffset = 1(1 跳过 IW0 状态)

  • StatusSize = 2(要读取 2 个状态)

  • pStatusBuffer 需要至少 2 个字节