====== Task ====== CODESYS 에서 프로젝트 생성후 오른쪽 창을 보면 Task Configuration (테스크구성)이 있고 그 안에 MainTask 와 VISU_TASK가 있는 것을 볼 수 있습니다. {{ :codesysmanual:task1.png?nolink |}} Task는 CODESYS 에서 작업을 관리하는 단위 입니다. TASK안에는 실행할 POU가 들어 있습니다. (POU란 Program Organization Unit의 약자로 사용자가 작성하는 프로그램, 펑션, 펑션블록등을 뜻합니다.) {{ :codesysmanual:taskpou.png?nolink |}} ===== 테스크의 Type ===== MainTask를 더블클릭해보면 다음과 같은 창이 보입니다. Type을 선택하는 부분이 있는데.. {{ :codesysmanual:task21.png?nolink |}} Cyclic 이 외에도 몇가지가 더 있습니다. {{ :codesysmanual:task2.png?nolink |}} * Cyclic : 일정주기마다 Task를 실행. * Freewheeing : 남는시간에 실행 * Event : 특정 BOOL변수가 상승Edge가 되었을때 Task를 실행. * Status : 특정 BOOL변수가 TRUE를 유지하고 있을때 Task를 실행. ==== Cyclic ==== 일정주기마다 반복적으로 Task를 수행합니다. MainTask주기를 20mS로 설정하고 그안에 들어 있는 POU수행이 그보다는 짧게 수행이 끝날경우 아래처럼 동작합니다. (주의사항 : 주기보다 짧게 POU수행이 끝나야 합니다.) {{ :codesysmanual:taskexample1.png?nolink |}} ==== FreeWheeling ==== 앞서 살펴본 Cyclic의 실행조건에서 남는 시간이 있습니다. FreeWheeling 테스크 안에 있는 POU들은 이 남는시간에 실행됩니다. {{ :codesysmanual:taskexample2.png?nolink |}} ==== Event ==== Type을 Event로 선택하면, Event 변수를 입력하는 창이 나옵니다. 여기에 BOOL변수 하나를 지정해주세요. {{ :codesysmanual:taskevent1.png?nolink |}} 그러면 이 변수가 상승Edge가 되는 순간 이 Task가 실행됩니다. 기존에 다른 테스크가 수행되고 있었다면 어찌될까요? 이때 우선순위(Priority)가 영향을 끼칩니다. {{ :codesysmanual:taskpriority1.png?nolink |}} Event Task의 우선순위가 높다면, 기존에 수행하던 Task를 잠깐 멈추고 Event Task를 먼저 수행합니다. Event Task수행을 모두 마치면 다시 원래 수행하던 위치로 복귀합니다. {{ :codesysmanual:taskpriority2.png?nolink |}} ==== Status ==== Event와 거의 동일한데, 지정한 BOOL변수의 상승Edge를 판단하지 않고, 지정 변수가 True를 유지하면 계속 실행됩니다. ===== Watch Dog ===== 와치독 기능도 있습니다. {{ :codesysmanual:taskwatchdog.png?nolink |}} 이렇게 설정했다면 200mS 동안 MainTask가 재시작을 못했을때, 시스템을 리셋시켜줍니다. 위 설정에 따르면 MainTask는 20mS마다 한번씩 실행되어야 합니다. 그런데 200mS동안 실행을 못했다면, 뭔가 심각한 문제가 발생한 것입니다. 그래서 리셋시켜서 처음부터 다시 돌게 해줍니다. 만약 Sensitivity를 2로 하면 한번 더 기다려줍니다. 즉 400mS동안 기다립니다. 이 숫자가 올라갈 수록 기본 대기시간에 이 숫자를 곱한 수만큼 기다려줍니다. [[codesysmanual:index|CODESYS]]