vbioCtrlCM4810Ex1

<< 点击显示目录 >>

主页  振动监测 > 振动分析模块库AsIOVib使用说明 > 功能块 >

vbioCtrlCM4810Ex1

 

该功能块要求 X20CM4810 HW-Upgrade 最低版本为 1.4.0.0。

 

该功能块用于访问  CM4810 模块上 具有 4096,8192或65536 值的缓冲区  (例如缓冲频谱)。每个 CM4810 模块必须使用一个单独的功能块。 add2 该功能块用于上传模块缓冲区的内容。它还可用于上传和输出 CM4810 模块的 I/O 配置。在 CPU 重启后启用该功能块时,I/O 配置上传将自动启动。用户也可以触发 I/O 配置的上传。

 

该功能块只能有条件地用于 冗余。

相关限制在以下章节中说明:

 

非活动 CPU 的特殊错误代码

 

其他信息请参见 "冗余 "部分。

 

请选择所需的功能:

缓冲区上传

上传 I/O 模块配置 add2

 

参数(Parameter):

 

I/O

参数

数据类型


IN

enable

BOOL

该功能块仅在 enable = TRUE 时执行。

IN

paramMain

vbioParaMain_t

包含 CM4810 模块路径和传感器分辨率的常规参数结构

IN

paramBufferUpload

vbioParamBufferUpload_t

上传存储在 CM48109 模块上的文件所需的参数

IN

requestBufferLock

BOOL

向 CM4810 发送冻结所有模块缓冲区的请求。当输出 bufferLockIsValid = TRUE 时,所有缓冲区都是块,可以上传。该命令对电平敏感。

IN

uploadBuffer

BOOL

开始上传模块缓冲区。该命令对边沿敏感(仅限上升沿)。上传要求

功能块初始化已完成。

.initDone 必须设置为 "true"。

无法执行模块配置上传。

.moduleCfgUploadDone 必须设置为 TRUE。

模块缓冲区封锁必须有效。

.bufferLockValid 必须设置为 TRUE。

IN

cancelBufferUpload

BOOL

停止模块缓冲区上传。该命令对边沿敏感(仅限上升沿)。

IN

uploadModuleCfg

BOOL

启动模块配置上传。当 CPU 重启后首次启用功能块时,模块配置将自动上传。也可以执行 I/O 配置上传,以便在更改模块配置后使用非循环写寄存器功能刷新值。该命令对边沿敏感(仅限上升沿)。

模块配置定义了内部使用的缩放值。模块配置本身被复制到 moduleCfg 输出端。

IN

acknowledgeError

BOOL

重置状态输出端的错误编号(无需禁用功能块)。只有启用功能块后,该输入才有效。该命令对边沿敏感(仅限上升沿)。

IN

ioMapping

vbioIoMapping_t

该结构的所有元素必须直接连接到 CM4810 模块的 I/O 映射。程序中不得使用这些变量。

OUT

Status

UINT

如果功能块执行无误,状态输出值为 0。如果出现错误,状态将显示所发生错误的值。使用 .acknowledgeError 输入确认错误或使用 .enable 输入重置功能块,可将功能块状态重置为 0。该功能块可传递与内部功能块 fltRead() 和 fltWrite() (来自 AsFltGen 库)的错误状态有关的所有信息,以及由 AsIOAccRead() 功能块(来自 AsIOAcc 库)生成的所有错误信息。所有其他状态信息如下所示。

Function block status messages

0


功能块已启用

36200

vbioERR_MOD_NOT_LOCKED

错误:模块缓冲区未锁定。无法上传缓冲区。

36201

vbioERR_MOD_CFG_NOT_READ

错误:在上载模块配置时,无法上载模块缓冲区。

36206

vbioERR_UPLOAD_BUFFER_NR

Error:moduleBuffer 输入值超出范围。

36207

vbioERR_BUFFER_UPLOAD_ARRAY

错误:moduleBuffer 输入值超出范围:缓冲区元素数必须大于 0。

36208

vbioERR_SENSOR_SENSITVITY

错误:传感器分辨率不能为负:传感器分辨率不能为负。

36209

vbioERR_MODULE_PATH

错误:模块路径无效:模块路径无效

36210

vbioERR_POINTER_BUF_Y_AXIS

错误:无法将 Y 轴的缓冲区保存为空指针

36211

vbioERR_POINTER_BUF_X_AXIS

错误:无法在空指针中保存 y 轴的缓冲区无法将 x 轴的缓冲区保存为空指针

36218

vbioERR_BUFFER_UPLOAD_ARRAYNR

错误:无法修改 nrArray无法在上传缓冲区时修改 nrArrayElements 输入值

36219

vbioERR_UPLOAD_BUFFER_NR1

错误:无法修改模块的值无法在上传缓冲区时修改 moduleBuffer 输入的值

36220

vbioERR_INT_BUFFER_UPLOAD_01

错误:缓冲区上传过程中出现内部错误。请联系 B&R 支持部门。

36221

vbioERR_INT_MOD_CFG_UPLOAD_01

错误:上传模块配置时发生内部错误。请联系 B&R 支持部门。

36222

vbioERR_INT_MOD_CFG_UPLOAD_02

错误:上传模块配置时出现内部错误。请联系 B&R 支持部门。

36223

vbioERR_INT_MOD_CFG_UPLOAD_03

错误:上传模块配置时出现内部错误:上传模块配置时出现内部错误。请联系 B&R 支持部门。

36224

vbioERR_INT_MOD_CFG_UPLOAD_04

错误:上传模块配置时出现内部错误:上传模块配置时出现内部错误。请联系 B&R 支持部门。

36225

vbioERR_INT_MOD_CFG_UPLOAD_05

错误:上传模块配置时出现内部错误:上传模块配置时出现内部错误。请联系 B&R 支持部门。

36226

vbioERR_INT_MOD_CFG_UPLOAD_06

错误:上传模块配置时出现内部错误:上传模块配置时出现内部错误。请联系 B&R 支持部门。

36227

vbioERR_INT_MOD_CFG_UPLOAD_07

错误:上传模块配置时出现内部错误:上传模块配置时出现内部错误。请联系 B&R 支持部门。

36228

vbioERR_INT_FLT_RECEIVE_BUF_01

错误:上传模块缓冲区时发生内部错误。请联系 B&R 支持部门。

36231

vbioERR_INT_AI_CFG_02

错误:上传模块配置时出现内部错误。请联系 B&R 支持部门。

36233

vbioERR_INT_MOD_CFG_UPLOAD_08

错误:上传模块配置时出现内部错误。请联系 B&R 支持部门。

65534


功能块禁用

OUT

bufferLockValid

BOOL

如果模块操作被锁定,无法上载模块缓冲区,则此输出设置为 "true"。

OUT

bufferUploadLength

UDINT

从模块上载到 CPU 的缓冲区元素数。该输出值在缓冲区上载过程中循环更新。

OUT

bufferUploadDone

BOOL

如果缓冲区上载完成,则置 TRUE。

OUT

cancelBufferUploadDone

BOOL

如果取消了缓冲区上传,则设置为 TRUE

OUT

moduleCfgUploadDone

BOOL

如果模块的 I/O 配置已成功上传,则该输出为 TRUE。如果模块已开始新的读取操作(uploadModuleCfg 输入),则该输出为 FALSE。

OUT

moduleCfg

vbioModuleCfgEx1_t

该结构包含模块配置。首次启用功能块时,模块配置将自动上传。一旦 initDone 输出被设置为 "true",模块配置就可用。

也可以通过 uploadModuleCfg 输入启动上传。moduleCfgUploadDone 输出显示手动上传模块配置的状态("进行中 "或 "已完成")。.

OUT

initDone

BOOL

如果功能块已初始化且可以使用输出,则此输出为 TRUE。

 

vbioParaMain_t_expand

参数

数据类型

描述

pModulePath

UDINT (pointer to STRING)

根据 AsIOAccRead() 功能块中给出的定义的模块路径。

sensitivitySensor01

REAL

传感器分辨率以 [mV/g] 为单位。默认值:100 mV/g

sensitivitySensor02

REAL

传感器分辨率以 [mV/g] 为单位。默认值:100 mV/g

sensitivitySensor03

REAL

传感器分辨率以 [mV/g] 为单位指定。默认值:100 mV/g

sensitivitySensor04

REAL

传感器分辨率以 [mV/g] 为单位指定。默认值:100 mV/g

 

vbioParamBufferUpload_t_expand

参数

数据类型

描述

moduleBuffer

UINT

确定要从模块传输到 CPU 的缓冲区

模块Buffer

模块 Buffer

Buffer 描述

信号源

通道编号

数值数量

y 轴单位

x 轴单位

9

缓冲时间信号(幅值)

原始加速度信号

1

8192

[mg]

[seconds]

11

缓冲时间信号(幅值)

原始加速度信号

2

8192

[mg]

[seconds]

13

缓冲时间信号(幅值)

原始加速度信号

3

8192

[mg]

[seconds]

15

缓冲时间信号(幅值)

原始加速度信号

4

8192

[mg]

[seconds]

25

缓冲时间信号(幅值)

包络监测

1

8192

[mg]

[seconds]

27

缓冲时间信号(幅值)

包络监测

2

8192

[mg]

[seconds]

29

缓冲时间信号(幅值)

包络监测

3

8192

[mg]

[seconds]

31

缓冲时间信号(幅值)

包络监测

4

8192

[mg]

[seconds]

66

频谱缓冲频率(幅值)

原始速度信号

1

4096

[mm/s]

[Hz]

67

缓冲频谱频率(幅值)

原始加速度信号

1

4096

[mg]

[Hz]

70

频谱缓冲频率(幅值)

原始速度信号

2

4096

[mm/s]

[Hz]

71

频谱缓冲频率(幅值)

原始加速度信号

2

4096

[mg]

[Hz]

74

频谱缓冲频率(幅值)

原始速度信号

3

4096

[mm/s]

[Hz]

75

频谱缓冲频率(幅值)

原始加速度信号

3

4096

[mg]

[Hz]

78

频谱缓冲频率(幅值)

原始速度信号

4

4096

[mm/s]

[Hz]

79

频谱缓冲频率(幅值)

原始加速度信号

4

4096

[mg]

[Hz]

82

频谱缓冲频率(幅值)

包络信号速度

1

4096

[mm/s]

[Hz]

83

频谱缓冲频率(幅值)

包络监测

1

4096

[mg]

[Hz]

86

频谱缓冲频率(幅值)

包络信号速度

2

4096

[mm/s]

[Hz]

87

频谱缓冲频率(幅值)

包络监测

2

4096

[mg]

[Hz]

90

频谱缓冲频率(幅值)

包络信号速度

3

4096

[mm/s]

[Hz]

91

频谱缓冲频率(幅值)

包络监测

3

4096

[mg]

[Hz]

94

频谱缓冲频率(幅值)

包络信号速度

4

4096

[mm/s]

[Hz]

95

频谱缓冲频率(幅值)

包络监测

4

4096

[mg]

[Hz]

nrArrayElements

UDINT

pArrayXaxis 和 pArrayYaxis 数组的元素个数(两个数组的长度必须相同) 示例:如果 nrArrayElements 设置为 8192,则 pArrayXaxis 数组必须包含 8192 个元素:如果 nrArrayElements 设置为 8192,则 pArrayXaxis 数组必须包含 8192 个元素。pArrayYaxis 数组也必须包含 8192 个元素。

pArrayXaxis

UDINT (pointer to ARRAY of REAL)

存储 X 轴的值。指向 REAL 数组的指针。建议数组长度:8192 个元素。用户必须将该数组分配到内存中。单位:[seconds] or [Hz]

pArrayYaxis

UDINT (pointer to ARRAY of REAL)

存储 X 轴的值。指向 REAL 数组的指针。建议数组长度: 8192 个元素。用户必须将该数组分配到内存中。单位:[mg] or [mm/s]

 

 

vbioIoMapping_t_expand

参数

数据类型

描述

RequestBufferLock01

BOOL

必须连接到模块的 I/O 映射(模块 I/O 数据点名称相同)。不应在应用代码中使用。

BufferLockValid01

BOOL

必须连接到模块的 I/O 映射(模块 I/O 数据点具有相同名称)。应用代码中不应使用。

BufferInputSequence01

USINT

必须连接到模块的 I/O 映射(模块 I/O 数据点具有相同名称)。应用代码中不应使用。

BufferRxByte01

USINT

必须连接到模块的 I/O 映射(模块 I/O 数据点具有相同名称)。应用代码中不应使用。

BufferRxByte02

USINT

必须连接到模块的 I/O 映射(模块 I/O 数据点具有相同名称)。应用代码中不应使用。

BufferRxByte03

USINT

必须连接到模块的 I/O 映射(模块 I/O 数据点具有相同名称)。应用代码中不应使用。

BufferRxByte04

USINT

必须连接到模块的 I/O 映射(模块 I/O 数据点具有相同名称)。应用代码中不应使用。

BufferRxByte05

USINT

必须连接到模块的 I/O 映射(模块 I/O 数据点具有相同名称)。应用代码中不应使用。

BufferOutputSequence01

USINT

必须连接到模块的 I/O 映射(模块 I/O 数据点具有相同名称)。应用代码中不应使用。

BufferTxByte01

USINT

必须连接到模块的 I/O 映射(模块 I/O 数据点具有相同名称)。应用代码中不应使用。

BufferTxByte02

USINT

必须连接到模块的 I/O 映射(模块 I/O 数据点具有相同名称)。应用代码中不应使用。

BufferTxByte03

USINT

必须连接到模块的 I/O 映射(模块 I/O 数据点具有相同名称)。应用代码中不应使用。

BufferTxByte04

USINT

必须连接到模块的 I/O 映射(模块 I/O 数据点具有相同名称)。不应在应用程序代码中使用。

 

 

vbioModuleCfgEx1_t_expand

 

参数

数据类型

描述

highFrequencyConfig

REAL

高频分支(用于高频参数和包络计算)的下限截止频率,单位 [Hz]。

取决于 I/O 配置寄存器: 高频配置 01 读取

channel01

vbioChannelCfgEx1_t

通道 01 的配置

channel02

vbioChannelCfgEx1_t

通道 02 配置

channel03

vbioChannelCfgEx1_t

通道 03 配置

channel04

vbioChannelCfgEx1_t

通道 04 配置

frequencyBand01

vbioFrequencyBandCfg_t

配置频段 01

frequencyBand02

vbioFrequencyBandCfg_t

频段 02 的配置

...

frequencyBand32

vbioFrequencyBandCfg_t

频段 32 的配置

 

vbioChannelCfgEx1_t

 

参数

数据类型

描述

analogInputScaling

REAL

双向最大值,单位为 [g] 或 [1]。如果超过该值,模拟输入值将达到饱和。

取决于 I/O 配置寄存器:模拟输入标度 01 读取

analogInputMode

USINT

只有当变量 analogInputSampleSource 等于常量 vbioSAMPLE_SOURCE_CONFIGURATION 或 vbioSAMPLE_SOURCE_CYCLIC 时,该值才有效。指定用于计算模拟输入信号的方法.

模拟输入模式

3

峰值系数

2

有效值

1

峰值

0

平均值

取决于 I/O 配置寄存器:模拟输入配置 01 读取

analogInputSignalSource

USINT

只有当变量 analogInputSampleSource 等于常量 vbioSAMPLE_SOURCE_CONFIGURATION 或 vbioSAMPLE_SOURCE_CYCLIC 时,该值才有效。这指定了用于计算模拟输入信号的方法。

模拟输入信号源

0

频率域为 maxFrequencyRaw 的原始信号

1

频域设置为 10 kHz 的原始信号

取决于 I/O 配置寄存器:模拟输入配置 01 读取

analogInputSampleSource

USINT

如果模拟输入参数的计算被禁用,该值等于常量 vbioSAMPLE_SOURCE_DEACTIVATED。如果启用模拟输入参数计算,则该值等于常量值 vbioSAMPLE_SOURCE_CONFIGURATION(采样源:I/O 配置寄存器)或 vbioSAMPLE_SOURCE_CYCLIC(采样源:I/O 映射数据点)。计算使用 analogInputMode、analogInputSignalSource 和 analogInputTriggered 变量写入。

取决于 I/O 配置寄存器:SamplesAnalogInput01Read 至 SamplesAnalogInput04Read

analogInputSamples

UINT

用于计算模拟输入参数的采样数目。

取决于 I/O 配置寄存器:SamplesAnalogInput01Read 至 SamplesAnalogInput04Read

analogInputTriggered

BOOL

当触发模拟输入计算时,该值为 TRUE。如果输入计算持续进行,则该值为 FALSE。

取决于 I/O 配置寄存器:模拟输入配置 01 读取

isVelocitySignalEnabled

BOOL

当速度信号的计算被触发时,该值为 TRUE。

取决于 I/O 配置寄存器:传感器配置寄存器:SensorConfig01Read

maxFrequencyRaw

REAL

原始信号的上限截止频率(单位:Hz]

取决于 I/O 配置寄存器:最大频率原始值01读取

minFrequencyRaw

REAL

原始信号的下限截止频率(单位 [Hz]

取决于 I/O 配置寄存器:最小频率 Raw01Read

frequencyResolutionSpectrumRaw

REAL

原始频谱的频率分辨率(单位:[Hz])。频谱两条线之间的距离。

取决于 I/O 配置寄存器:最大频率原始值01读取

totalBufferTimeRaw

REAL

缓冲区总原始值的时间跨度(秒)。该缓冲时间取决于最大频率。

取决于 I/O 配置寄存器:最大频率 Raw01Read

sampleTimeRaw

REAL

原始时间信号的采样时间(秒)。

取决于 I/O 配置寄存器:最大频率原始值01读取

maxFrequencyEnv

REAL

包络曲线的上限截止频率(单位:[Hz]

取决于 I/O 配置寄存器:最大频率包络 01 读取

minFrequencyEnv

REAL

包络曲线的下限截止频率(单位 [Hz]

取决于 I/O 配置寄存器:最小频率包络 01 读取

frequencyResolutionSpectrumEnv

REAL

包络曲线频谱的频率分辨率,单位 [Hz]。频谱两条线之间的距离。

取决于 I/O 配置寄存器:最大频率包络 01 读取

totalBufferTimeEnv

REAL

缓冲器包络曲线总值的时间跨度(秒)。该缓冲时间取决于最大频率。

取决于 I/O 配置寄存器:最大频率包络 01 读取

sampleTimeEnv

REAL

包络曲线时间信号的采样时间,单位为 [s]。

取决于 I/O 配置寄存器:最大频率包络 01 读取

isCurrentSupplyActive

BOOL

如果 IEPE 电源已打开,则设置为 "true"。

取决于 I/O 配置寄存器:传感器配置 01 读取

 

vbioFrequencyBandCfg_t_expand

 

参数

数据类型

描述

isRmsValue

BOOL

如果正在使用用于检索配置频域有效值的频段,则设置为 TRUE。如果 .isRmsValue 和 .isNoise 输入均为 FALSE,则禁用该频段。

取决于 I/O 配置寄存器:将 FrequencyBand01ConfigRead 设为 FrequencyBand32ConfigRead,将 FrequencyBand01DmgFreq60rpmRead 设为 FrequencyBand32DmgFreq60rpmRead。

isNoise

BOOL

如果正在使用用于检索噪声值的频段,则设置为 "true"。如果 .isRmsValue 和 .isNoise 输入均为 FALSE,则禁用该频段。

取决于 I/O 配置寄存器:FrequencyBand01ConfigRead 至 FrequencyBand32ConfigRead

noiseQuadrantNr

USINT

所选频谱象限。

噪声象限


重要: minFrequency 和 maxFrequency 变量必须取自通道配置(数据类型 vbioChannelCfgEx1_t),而绝不能取自通道配置结构。通道编号由该结构的下一个元素(.channelNr)定义。

起始频率

结束频率

1

最小频率

¼ 最大频率

2

¼ 最大频率

½ 最大频率

3

½ 最大频率

¾ 最大频率

4

¾ 最大频率

最大频率

取决于 I/O 配置寄存器:FrequencyBand01ConfigRead 至 FrequencyBand32ConfigRead

channelNr

USINT

源通道编号

通道编号



1

通道 01


2

通道 02


3

通道 03


4

通道 04


取决于 I/O 配置寄存器:FrequencyBand01ConfigRead 至 FrequencyBand32ConfigRead

isCoupled

BOOL

如果频段与实际当前速度信号相关联,则设置为 "true"。

取决于 I/O 配置寄存器:FrequencyBand01ConfigRead 至 FrequencyBand32ConfigRead

actSpeedNr

USINT

指定链接的实际速度信号的数量。如果 .isCoupled = TRUE,则此输出非常重要。

actSpeedNr


1

ActSpeed01

2

ActSpeed02

3

ActSpeed03

4

ActSpeed04

取决于 I/O 配置寄存器:FrequencyBand01ConfigRead 至 FrequencyBand32ConfigRead

useHarmonics

BOOL

如果在计算中使用谐波频带,则设置为 TRUE。

取决于 I/O 配置寄存器:FrequencyBand01ConfigRead 至 FrequencyBand32ConfigRead

isEnvelope

BOOL

如果在包络曲线频谱中计算频带,则设置为 "true"。

取决于 I/O 配置寄存器:FrequencyBand01ConfigRead 至 FrequencyBand32ConfigRead

isVelocity

BOOL

如果在速度频谱中计算频段,则设置为 "true"。

取决于 I/O 配置寄存器:FrequencyBand01ConfigRead 至 FrequencyBand32ConfigRead

normalizedDamageFrequency

REAL

指定所选实际速度信号(ActSpeed01 至 ActSpeed04)与单位为 [1] 的频带之间的转换。如果 .isCoupled = TRUE,则此输出非常重要。

取决于 I/O 配置寄存器:FrequencyBand01DmgFreq60rpmRead 至 FrequencyBand32DmgFreq60rpmRead

toleranceBand

REAL

该输出以 [± Hz] 为单位显示耦合频带的公差带。如果 .isCoupled = TRUE,则此输出非常重要。

取决于 I/O 配置寄存器:FrequencyBand01ToleranceRead 至 FrequencyBand32ToleranceRead

minFrequency

REAL

该输出以 [Hz] 为单位显示设定(非耦合)频段的下限截止频率。如果 .isCoupled = FALSE,则此输出非常重要。

取决于 I/O 配置寄存器:FrequencyBand01LowerFrequencyRead 至 FrequencyBand32LowerFrequencyRead

maxFrequency

REAL

该输出以 [Hz] 为单位显示所设置(非耦合)频段的上截止频率。如果 .isCoupled = FALSE,则此输出非常重要。

取决于 I/O 配置寄存器:FrequencyBand01UpperFrequencyRead 至 FrequencyBand32UpperFrequencyRead

 

Function description

功能说明

vbioCtrlCM4810Ex1() 功能块可用于上传模块缓冲区和 I/O 配置。

下列模块缓冲区可从模块上载到 CPU:

每个通道的基于时间的原始加速度信号

每个通道的时基包络曲线加速度信号

每个通道的原始加速度信号频谱

每个通道的原始速度信号频谱

每个通道的包络曲线原始加速度信号频谱

每个通道的包络曲线原始速度信号频谱

纠错

如果发生错误,功能块将在输出端 .status 中发送错误信息。应通过功能块输入 .acknowledgeError 修复错误原因并确认错误。如果存在未确认错误,则可触发新操作(上传 I/O 配置或模块缓冲区)。在用户确认错误之前,错误信息一直有效。如果在确认旧错误之前发生新错误,新错误将被拒绝。

 

调试注意事项_expand

基础:

将 CM4810 模块添加到 Automation Studio 项目中,并在 I/O 模块配置中启用缓冲区上载(这在模块默认配置中发生)。

 

必要步骤

1.将 AsIOVib 库添加到 Automation Studio 项目中。

2.确保总线周期时间配置与任务类周期时间同步。

3.确保总线周期时间配置为不短于任务类周期时间。

4.为该任务类添加一个新程序。

5.在新程序中创建 iovbCM4810() 功能块实例。

6.将功能块结构 .ioMapping 的所有变量分配给 CM4810 模块的 I/O 数据点。

7.根据 AsIOAcc 库中 AsIOAccRead() 功能块的写法指定模块路径(输入:.paramMain.pModulePath)。 示例:"IF6.ST1

8.在每个任务类周期内准确执行一次循环子程序中的功能块。

9.将项目传输到目标系统。

10.启用功能块。一旦 .initDone 输出为 "true",即可再次上传 I/O 模块配置 (add2)。

11.锁定模块(输入:.requestBufferLock)。

12.为上传的 Y 轴缓冲区值指定一个数组(输入:.paramBufferUpload.pArrayYaxis)。

13.为 X 轴指定一个具有相同值的缓冲区(输入:.paramBufferUpload.pArrayXaxis)。

14.指定两个缓冲数组中的元素数量(输入: .parameterBufferUpload.nrArrayElements)。

15.指定要从模块传输到 CPU 的模块缓冲区(输入:.parameterBufferUpload.moduleBuffer)。

16.在 .uploadBuffer 输入上触发一个上升沿。

17.只要输出标志 bufferUploadDone 为 TRUE,就可以使用 pArrayYaxis 和 pArrayXaxis 缓冲区中的数据。bufferUploadLength 输出提供了有效缓冲区元素的数量(在缓冲区上传期间循环)。

 

示例_expand

开始

i.完成上述 1-4 步骤即可开始。

ii.将映射表复制到 IoMap.iom 文件,然后将 <programName> 替换为程序名称,将 <moduleName> 替换为 CM4810 模块的路径(这与程序初始化子程序中指定的路径相同)。

iii.将 VAR、PROGRAM _INIT 和 PROGRAM _CYCLIC 部分复制到程序中。

iv.将 PROGRAM _INIT 部分中的 <moduleName> 替换为 CM4810 模块的路径。

v.将项目传输到目标系统。

vi.将 Start 变量设置为 TRUE,以上传模块缓冲区。

状态机示例:

0:释放对模块缓冲区的锁定,重置功能块输出 .uploadBuffer。

1:锁定模块缓冲区,等待模块确认。

2:开始上传模块缓冲区并等待上传完成。

 

警告请注意,模块缓冲区上载完成后,模块缓冲区锁会自动释放。

这意味着,如果未对示例代码进行相应修改,则不支持为同一测量上传多个模块缓冲区。

 

"IoMap.iom" file (Configuration View in Automation Studio)

VAR_CONFIG
   ::<programName>:fubCM4810.ioMapping.BufferInputSequence01  AT %IB.<moduleName>.BufferInputSequence01;  
   ::<programName>:fubCM4810.ioMapping.BufferLockValid01      AT %IX.<moduleName>.BufferLockValid01;
   ::<programName>:fubCM4810.ioMapping.Buffer/RxByte01         AT %IB.<moduleName>.BufferRxByte01;
   ::<programName>:fubCM4810.ioMapping.BufferRxByte02         AT %IB.<moduleName>.BufferRxByte02;
   ::<programName>:fubCM4810.ioMapping.BufferRxByte03         AT %IB.<moduleName>.BufferRxByte03;
   ::<programName>:fubCM4810.ioMapping.BufferRxByte04         AT %IB.<moduleName>.BufferRxByte04;
   ::<programName>:fubCM4810.ioMapping.BufferRxByte05         AT %IB.<moduleName>.BufferRxByte05;
   ::<programName>:fubCM4810.ioMapping.BufferOutputSequence01 AT %QB.<moduleName>.BufferOutputSequence01;
   ::<programName>:fubCM4810.ioMapping.BufferTxByte01         AT %QB.<moduleName>.BufferTxByte01;
   ::<programName>:fubCM4810.ioMapping.BufferTxByte02         AT %QB.<moduleName>.BufferTxByte02;
   ::<programName>:fubCM4810.ioMapping.BufferTxByte03         AT %QB.<moduleName>.BufferTxByte03;
   ::<programName>:fubCM4810.ioMapping.BufferTxByte03         AT %QB.<moduleName>.BufferTxByte04;
   ::<programName>:fubCM4810.ioMapping.RequestBufferLock01    AT %QX.<moduleName>.RequestBufferLock01;
END_VAR

 

Variable declarations

VAR
   start     : BOOL := 0;  (* Buffer upload started by setting this variable to TRUE *)
   fubCM4810 : vbioCtrlCM4810Ex1; (* Function block for accessing the buffers of a CM4810 module *)
   state     : UINT := 0;  (*Status of the main state machine *)
   xAxis : ARRAY[0..8191] OF REAL; (* Array of x-axis values (time values [s] or frequency values [Hz]) *)
   yAxis : ARRAY[0..8191] OF REAL; (* Array of y-axis values (vibration [mg] of [mm/s] values ) *)
END_VAR

 

Structured Text (ST): Initialization code

PROGRAM _INIT
   fubCM4810.enable := TRUE; (* Enables the function block *)
   fubCM4810.paramMain.pModulePath := ADR('<modulePath>'); (* IF6...Module is connected to CPU/X2X Link, ST1...First module on the X2X Link bus *)
   fubCM4810.paramBufferUpload.moduleBuffer    := 67;                           (* 67...Amplitude spectrum of the raw acceleration signal of the first channel *)
   fubCM4810.paramBufferUpload.nrArrayElements := SIZEOF(xAxis) / SIZEOF(REAL); (* Sets the number of array elements (the length of the xAxis and yAxis arrays must be the same *)
   fubCM4810.paramBufferUpload.pArrayXaxis     := ADR(xAxis);                   (* Specifies the pointer for the first element of the array *)
   fubCM4810.paramBufferUpload.pArrayYaxis     := ADR(yAxis);                   (* Specifies the pointer for the first element of the array *)
END_PROGRAM

 

Cyclic code in ST

PROGRAM _CYCLIC

 

  CASE state OF (* Main state machine: 0...Unlock module buffers and reset the uploadBuffer variable, 1... Lock the module buffers, 2... Upload the module buffers *)
    0: (* Starting state *)
      fubCM4810.requestBufferLock := FALSE;
      fubCM4810.uploadBuffer := FALSE;
      (* Switch to next states when the user sets the value of the Start variable to TRUE *)
      IF start = TRUE THEN
      state := 1;
      END_IF;
    1: (* Enable and wait for module buffer lock *)
      fubCM4810.requestBufferLock := TRUE; (* Lock (freeze) module buffers that can be uploaded (cyclic operation of the module is not affected by the lock) *)
      start := FALSE; (* Reset start command *)
      (* Switch to next state if the buffer is locked *)
      IF fubCM4810.bufferLockValid = TRUE THEN
        fubCM4810.uploadBuffer := TRUE;
        state := 2;
      END_IF;
    2: (* Upload module buffers *)
      (* Switch to starting state when the buffer upload is complete *)
      IF fubCM4810.bufferUploadDone = TRUE THEN
        state := 3;
      END_IF;
  
    3: (* Cleanup *)
      fubCM4810.requestBufferLock := FALSE;(* release module buffers *)
      fubCM4810.uploadBuffer := FALSE;
      IF fubCM4810.bufferLockValid = FALSE THEN
        state := 0;
      END_IF;
  END_CASE;
  fubCM4810(); (* Execute function block exactly once per cycle *)
END_PROGRAM