|
前言 再分享一个实际项目常用的程序段,Codesys下通过程序获取任务Task周期。(Tips:文章持续输出中~~~) 正文 先看功能效果:
需要加载以下库: 1.SysTypes 2.CmpIecTask 添加程序 Pro_SysMessage PROGRAM Pro_SysMessageVAR//获取Task实时数据ahTaskHandle : ARRAY[0..5] OF SysTypes.RTS_IEC_HANDLE ;aResultList : ARRAY[0..5] OF SysTypes.RTS_IEC_RESULT ;aResult : ARRAY[0..5] OF SysTypes.RTS_IEC_RESULT ;aTaskInfo : ARRAY[0..5] OF POINTER TO CmpIecTask.Task_Info2 ;END_VARahTaskHandle[0] := CmpIecTask.IecTaskGetFirst(pszAppName:= ADR('Application'), pResult:= ADR(aResult[0]));ahTaskHandle[1] := CmpIecTask.IecTaskGetNext(pszAppName:= ADR('Application'),hPrevIecTask := ahTaskHandle[0], pResult:= ADR(aResult[1]));ahTaskHandle[2] := CmpIecTask.IecTaskGetNext(pszAppName:= ADR('Application'),hPrevIecTask := ahTaskHandle[1], pResult:= ADR(aResult[2]));ahTaskHandle[3] := CmpIecTask.IecTaskGetNext(pszAppName:= ADR('Application'),hPrevIecTask := ahTaskHandle[2], pResult:= ADR(aResult[3]));ahTaskHandle[4] := CmpIecTask.IecTaskGetNext(pszAppName:= ADR('Application'),hPrevIecTask := ahTaskHandle[3], pResult:= ADR(aResult[4]));ahTaskHandle[5] := CmpIecTask.IecTaskGetNext(pszAppName:= ADR('Application'),hPrevIecTask := ahTaskHandle[4], pResult:= ADR(aResult[5]));aTaskInfo[0] := CmpIecTask.IecTaskGetInfo3(hIecTask := ahTaskHandle[0],pResult:= aResultList[0]); aTaskInfo[1] := CmpIecTask.IecTaskGetInfo3(hIecTask := ahTaskHandle[1],pResult:= aResultList[1]); aTaskInfo[2] := CmpIecTask.IecTaskGetInfo3(hIecTask := ahTaskHandle[2],pResult:= aResultList[2]); aTaskInfo[3] := CmpIecTask.IecTaskGetInfo3(hIecTask := ahTaskHandle[3],pResult:= aResultList[3]); aTaskInfo[4] := CmpIecTask.IecTaskGetInfo3(hIecTask := ahTaskHandle[4],pResult:= aResultList[4]); aTaskInfo[5] := CmpIecTask.IecTaskGetInfo3(hIecTask := ahTaskHandle[5],pResult:= aResultList[5]); gModbusTCP.DiPLC_CycTime[0] := DWORD_TO_DINT(aTaskInfo[0]^.dwCycleTime);gModbusTCP.DiPLC_CycTime[1] := DWORD_TO_DINT(aTaskInfo[1]^.dwCycleTime);gModbusTCP.DiPLC_CycTime[2] := DWORD_TO_DINT(aTaskInfo[2]^.dwCycleTime);gModbusTCP.DiPLC_CycTime[3] := DWORD_TO_DINT(aTaskInfo[3]^.dwCycleTime);gModbusTCP.DiPLC_CycTime[4] := DWORD_TO_DINT(aTaskInfo[4]^.dwCycleTime);gModbusTCP.DiPLC_CycTime[5] := DWORD_TO_DINT(aTaskInfo[5]^.dwCycleTime); 通过IecTaskGetFirst抓取Task句柄,配合IecTaskGetNext获取下一个。通过IecTaskGetInfo2得到对应Task信息。 如上述程序中aTaskInfo[0]^.dwCycleTime 就是实时扫描周期。在aTaskInfo[0]^. 下还有以下常规的 dwAverageCycleTime :平均扫描周期时间 dwCycleCount : 扫描周期计数 dwMaxCycleTime : 最大扫描周期 dwMinCycleTime : 最大扫描周期 更多请自行移步官网帮助 https://content.helpme-codesys.com/en/libs/CmpIecTask/Current/Task_Info2.html#id1 结尾 这个功能配合触摸屏上显示,可有效得帮忙排查控制器的实际程序运行情况。有需要的直接CV大法即可~拿走不谢~ 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |