模块配置

<< 点击显示目录 >>

主页  振动监测 > 实例展示与Demo > X20CM4810 >

模块配置



根据功能模型0,我们需要借助功能块AsIOAccWrite()来实现模块的register参数的写入 参考例程中ModuleConfig.st,首先对自己将要设置的参数参考help当中的内容进行预先设置,比如我们设置采集的采样频率,首先查表,根据表中原始信号的最大频率来选择适合的采样频率

 

CASE 5:
    ModuleConfig_typ.InternalTyp.WriteRegName[0] := 'MaxFrequencyRaw01';
    // Transform the Sampling frequency to Max frequency
    FOR tModuleIndex := 0 TO 3 DO
        CASE  gMainCtrlTyp.BufferLoadTyp.BufferLoadPara_MainTyp.SamplingFreqValueIndex OF
            0://MAX Freq 200Hz Sampling Freq 516Hz
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_SET(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4));
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 1);
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_SET(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 2);
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 3);
                gMainCtrlTyp.BufferLoadTyp.CurrentSampleFreqValue := 516;
            1://MAX Freq 500Hz Sampling Freq 1289Hz
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4));
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 1);
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_SET(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 2);
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 3);
                gMainCtrlTyp.BufferLoadTyp.CurrentSampleFreqValue := 1289;
   
            2://MAX Freq 1000Hz Sampling Freq 2578Hz
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_SET(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4));
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_SET(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 1);
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 2);
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 3);
                gMainCtrlTyp.BufferLoadTyp.CurrentSampleFreqValue := 2578;
   
            3://MAX Freq 2000Hz Sampling Freq 5156Hz
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4));
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_SET(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 1);
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 2);
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 3);
                gMainCtrlTyp.BufferLoadTyp.CurrentSampleFreqValue := 5156;
   
            4://MAX Freq 5000Hz Sampling Freq 12891Hz
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_SET(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4));
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 1);
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 2);
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 3);
                gMainCtrlTyp.BufferLoadTyp.CurrentSampleFreqValue := 12891;
   
            5://MAX Freq 10000Hz Sampling Freq 25781Hz
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4));
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 1);
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 2);
                ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, (tModuleIndex*4) + 3);
                gMainCtrlTyp.BufferLoadTyp.CurrentSampleFreqValue := 25781;
   
        END_CASE
    END_FOR

 

之后通过功能块AsIOAccWrite()来写入寄存器

 

ModuleConfigCase WriteIOReg:
    ModuleConfig_typ.FBTyp.IORegWrite.enable   := TRUE;
    ModuleConfig_typ.FBTyp.IORegWrite.pDeviceName  := ADR(MODULEPATH[0]); //对模块进行参数写入
    ModuleConfig_typ.FBTyp.IORegWrite.pChannelName  := ADR(ModuleConfig_typ.InternalTyp.WriteRegName[tdirIndexW]);
   
    ModuleConfig_typ.FBTyp.IORegWrite.value      := ModuleConfig_typ.InternalTyp.WriteRegValue;
    ModuleConfig_typ.FBTyp.IORegWrite();
    IF ModuleConfig_typ.FBTyp.IORegWrite.status = 0 THEN
        ModuleConfig_typ.InternalTyp.Step :=Wait;
        ModuleConfig_typ.StatTyp.Done := TRUE;
    ELSIF ModuleConfig_typ.FBTyp.IORegWrite.status = 65535 THEN
    ELSE
        ModuleConfig_typ.InternalTyp.Step :=ErrorHandling;
        ModuleConfig_typ.StatTyp.ErrorCode := ModuleConfig_typ.FBTyp.IORegWrite.status;
    END_IF

 

设置完采样频率后继续对采样点数进行设置,根据help当中的内容,我们同样需要预先设置,根据表中内容进行变量的赋值

 

CASE 10://Set the BufferLength
    tdirIndexW := 1;// make offset = 1 and it may set the sensor config
    ModuleConfig_typ.InternalTyp.WriteRegName[1] := 'SensorConfig01';
    IF gMainCtrlTyp.BufferLoadTyp.BufferLoadPara_MainTyp.BufferSizeValueIndex = 0 THEN
        ModuleConfig_typ.InternalTyp.WriteRegValue := 2#0000_0000_0000_0000_1000_0000_0000_0000;
        //ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_CLR(ModuleConfig_typ.InternalTyp.WriteRegValue, 14);// Set 8192 Buffer size
    ELSIF gMainCtrlTyp.BufferLoadTyp.BufferLoadPara_MainTyp.BufferSizeValueIndex = 1 THEN
        ModuleConfig_typ.InternalTyp.WriteRegValue := 2#0000_0000_0000_0000_1100_0000_0000_0000;
        //ModuleConfig_typ.InternalTyp.WriteRegValue := BIT_SET(ModuleConfig_typ.InternalTyp.WriteRegValue, 14);// Set 65536 Buffer size
    END_IF

 

之后再重复通过功能块AsIOAccWrite()来写入寄存器

以上,X20CM4810采集前的模块配置工作就完成了