任务配置:读取周期时间等信息


  • 创建标准项目并选择 CODESYS Control Win V3 作为设备。
  • 通过网络扫描连接目标系统。

图1

  • 打开库管理器并添加以下库: CompErrors CmpIecTask SysTypes2 Interfaces

图2

  • 创建一个名为 SecTask 的新 POU 和一个名为 MySecTask 的新任务。 将 SecTask 分配给任务 MySecTask,并将任务周期设置为 50 毫秒。

图3

  • 修改 SecTask 如下

声明

VAR
    iIndex     :    INT;
    sIndex     :    STRING;
END_VAR

实现

FOR iIndex := 0 TO 1000 DO
    //Do something to raise the cycle time
    sIndex := INT_TO_STRING(iIndex);
END_FOR

  • 修改 PLC_PRG 如下:

声明

VAR
    dwCycleTimeMainTask, dwCycleTimeSecTask    :    DWORD;       
    dwIntervalMainTask, dwIntervalSecTask      :    DWORD;
    sNameMainTask, sNameSecTask                :    STRING;
    hFirstTask, hSecTask                       :    RTS_IEC_HANDLE;
    iecResult                                  :    RTS_IEC_RESULT;
    sAppName                                   :    STRING := 'Application';
    pIecInfo                                   :    POINTER TO CmpIecTask.Task_Info2;
END_VAR

实现

hFirstTask := CmpIecTask.IecTaskGetFirst(pszAppName := ADR(sAppName), pResult := ADR(iecResult));
IF ((hFirstTask <> RTS_INVALID_HANDLE) AND (iecResult = CmpErrors.Errors.ERR_OK)) THEN
    pIecInfo := CmpIecTask.IecTaskGetInfo3(hIecTask := hFirstTask, pResult := ADR(iecResult));
    dwIntervalMainTask := pIecInfo^.dwInterval;
    dwCycleTimeMainTask := pIecInfo^.dwCycleTime;
    sNameMainTask := pIecInfo^.pszName^;
    hSecTask := IecTaskGetNext(pszAppName := ADR(sAppName), hPrevIecTask := hFirstTask, pResult := ADR(iecResult));
    IF ((hSecTask <> RTS_INVALID_HANDLE) AND (iecResult = CmpErrors.Errors.ERR_OK)) THEN
        pIecInfo := CmpIecTask.IecTaskGetInfo3(hIecTask := hSecTask, pResult := ADR(iecResult));
        dwIntervalSecTask := pIecInfo^.dwInterval;
        dwCycleTimeSecTask := pIecInfo^.dwCycleTime;
        sNameSecTask := pIecInfo^.pszName^;
    END_IF
END_IF

  • 下载到控制器上并启动项目后,您可以比较任务配置和 IEC 代码之间的值。

图4

图5