『7x24小时有问必答』
前言
      再分享一个实际项目常用的程序段,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_VAR

ahTaskHandle[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大法即可~拿走不谢~

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码