여기서는
조건문 if, case
반복문 for, while
포인터 까지 하고 싶었지만 내용이 많을 것 같아 포인터는 다음장에서 소개하겠습니다. ^^
조건문
조건문은 if 와 case 가 있습니다.
사용 용도는 아래와 같습니다.
if : 특정 조건에서만 if 와 enf_if 사이 혹은 if 와 else 사이의 명령을 수행한다.
case : 특정 조건에 맞는 사례의 명령문만 실행한다.
if 문을 먼저 살펴 봅시다.
조건문 IF
영어 원문 설명이 필요하신 분들을 위해 링크 남겨드립니다.
https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_st_instruction_if.html
CODESYS Group
The IF statement is used for checking a condition and, depending on this condition, for executing the subsequent statements.A condition is coded as an expression that returns a Boolean value. If the expression returns TRUE, then the condition is fulfilled
content.helpme-codesys.com

codesys에서 일반적으로 변수에 데이터를 대입할 경우 xSwitch1:=true; 라고 표기하며
논리연산 and or 비교 등을 하여 참 거짓을 표현하는 경우 : 을 빼고 xSwitch1=true 이렇게 표현 합니다.
부등호 같은 경우 <,>,<=,>= 로 표현하며, =<,=> 는 사용하지 않습니다.
크거나 같다 작거나 같다 라고 하지 같거나 크다, 같거나 작지 하지 않잖아요. ^^
다른 논리 연산도 동일하게 사용 됩니다.
(A and B), (A or B), (A xor B), not(A)
보통 제가 해석이 애매할까봐 괄호를 하는데 안해도 무방하긴 합니다.
if 와 then 사이를 보면 xSwitch1= true 라고 되어 있습니다. 위 코딩에 대한 해석을 저는 다음과 같이 합니다.
'만약 스위치가 참 이라는 상태가 참이면 장비의 상태는 on 으로 한다.'
참이라는 상태가 참이면 이라는 해석이 이상하죠?
가독성을 위해 위와 같이 표현하기도 하지만 사실 아래와 같이 조금 더 간결하게 표기하기도 합니다.

if xSwitch1 then 에 대한 해석을 저는 '만약 xSwitch1이 참이면' 이라고 해석합니다.
if 문 내부 상태가 참이냐 거짓이냐에 따라 조건문이 동작하기 때문에 굳이 :=true 라고 할 필요는 없는거죠. bool 변수 자체가 논리연산의 결과가 되기 때문에 그렇습니다.
위와 같이 설정 후 실행하면 xSwitch1 이 true가 되면 xMachine_state 가 true가 됩니다.
반대로 xSwitch1 가 false 가 되도 xMachine_state 상태는 계속 true 입니다.
false 명령이 따로 없죠. false 명령도 추가해 보겠습니다.

이제 xSwitch1 이 상태에 따라 xMachine_state 가 true,false가 됩니다.
그런데 줄 수도 많고 시안성도 좋지가 않네요.
반대 상태도 같이 묶어서 표기하면 좋을 것 같습니다. 이럴 때를 위해 사용하는 명령어가 else 입니다.

위와 같이 실행하면 조건문 내부의 조건이 참일 때 (xSwitch1 이 참일 때) if 문 아래를 수행하고, 조건이 거짓 일 경우 else 아래를 수행합니다. 어떤 것을 사용해도 동작은 동일하지만 코드 수, 시안성을 두고 봤을 때 마지막 코딩이 더 가독성이 좋습니다.

이게 제일 가독성이 좋긴 하지만 if 문 설명을 위해서 작성해 보았습니다. ^^
if 문에서는 조건을 여러개 둘 수도 있고, 조건도 여러개 사용할 수 있습니다. 또한 if 내부에서 if 문을 사용하는 것도 가능합니다.
예를 들어 생산 제품(iProduct)에 모델 번호가 있고, 이를 1,2,3으로 표현하며, 0은 선정이 안된 상태 그리고 선정이 안된 상태에서 가동 할 경우 에러(xError)를 표현한다고 가정합시다.

실제로 위와 같이 작성하진 않겠지만 조건문을 2중이상 사용할 수 있고, elsif 라고 거짓인 경우 추가 조건을 확인할 수도 있습니다.
설명을 위해 조금 억지스럽게 만들기는 했지만 저런 식으로 규칙에 벗어나지 않으면 다양하게 응용할 수 있다는 점을 보여드리고 싶었습니다.
조건문 CASE
case에 대한 영어 원문 설명 링크 입니다.
https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_st_instruction_case.html
CODESYS Group
The CASE statement is a conditional control structure which causes a statement or a section of a statement to be executed only under a specific condition. The section which is executed is determined by comparing the condition and label.Syntax:CASE OF : : :
content.helpme-codesys.com
case는 true/false 로 나눠지는 경우보다 한개의 변수를 두고 데이터의 상황에 따라 명령을 실행하는 경우에 적합합니다.
앞서 iProduct가 0,1,2,3 인 경우에 따라 xMachine_state 를 변화 시켰죠?
이 사례를 들고 case문을 만들어 보겠습니다.

iProduct에 대해 눈으로 따라가기가 용이하기 때문에 가독이 편리합니다.
여기서 상황을 추가해 볼께요.
4,5번 제품도 2번 라인에서 생산하며, 10~20번 제품은 1,2,3 장비를 모두 가동해야 되는 경우라고 합시다.

if 문으로 처리하려면 줄 수가 많아졌겠지만 case 문으로 작성하면 훨씬 깔끔하게 작성되는 것을 확인할 수 있습니다.
case문 내부에서도 if 문 등을 사용할 수 있으며, 자유롭게 응용 가능합니다.
반복문 for, while
영어 원문 설명이 필요하신 분들을 위해 아래 링크 공유 드립니다.
https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_st_instruction_for.html
CODESYS Group
The FOR loop is used to execute statements with a certain number of repetitions.Syntax:FOR := TO {BY } DO END_FOR;The section inside the curly parentheses {} is optional.CODESYS executes the as long as the is not greater than – or in the case of negative
content.helpme-codesys.com
프로그램에 익숙하신 분들은 그냥 '아 반복문 형식이 이렇구나' 하는 정도로 보시고 넘어가셔도 될 것 같습니다.
참고로 반복문은 ST에서만 사용 가능합니다.
반복문은 for, 와 while 로 크게 나눠집니다. (Repeat 도 있습니다. 잘 사용 안합니다. ^^) 사용 용도는 다음과 같습니다.
for : 특정 횟수만큼 반복할 경우 필요
while : 특정 조건이 충족된 경우에만 반복할 경우 필요
Repeat : 무조건 1회 진행하며, 특정조건에서만 반복문을 빠져나갑니다.
다음은 반복문의 예시 입니다.

for 문은 i가 1에서 5까지 변하며, 1씩 증가합니다. 그 동안 a에 1씩 값을 더합니다.
동작을 실행하면 순서는 다음과 같이 진행 됩니다.
2번줄 i=1, a=0
3번줄 i=1, a=1
4번줄 i=1, a=1 2번줄로 돌아감
2번줄 i=2, a=1
3번줄 i=2, a=2
4번줄 i=2, a=2 2번줄로 돌아감
2번줄 i=3, a=2
3번줄 i=3, a=3
4번줄 i=3, a=3 2번줄로 돌아감
2번줄 i=4, a=3
3번줄 i=4, a=4
4번줄 i=4, a=4 2번줄로 돌아감
2번줄 i=5, a=4
3번줄 i=5, a=5
4번줄 i=5, a=5 2번줄로 돌아감
2번줄 i=6, a=5 조건이 맞지 않음으로 5번줄로 감
while 문도 for 문과 동작이 동일합니다. 그런데 왜 나눌까요? 제가 생각하는 이유는 가독력이나 상황이 달라서 그런 것 같습니다.
for 문은 보통 횟수가 정해진 반복이나 배열에 대해 사용을 자주 하는 편인 것 같고,
while 문은 특정 사건 (버튼을 눌렀다던지, 센서에 물체가 감지되었다던지) 에 대한 반복이 필요한 경우에 사용하는 것 같습니다.
repeat 문은 위 두 반복문과 다르게 무조건 1회 실행하며, 조건을 마지막에 따지게 됩니다.
뭐...굳이 활용하자면 제품이 도착했을 때 무조건 바코드 스탬프를 한번 찍고 비전 카메라를 읽어서 읽히면 통과 이런 라인에 사용할 수 있겠네요.
배열과 변수 선언 팁에 대해 소개하려 했는데 글이 너무 길어서 다음으로 넘길께요. ^^
혹시 이해가 안되거나 이상한 점 혹은 문의 있으시면 남겨주시면 감사하겠습니다.
'Codesys 3.5' 카테고리의 다른 글
| 부록 #2 Shift 연산 Ladder 프로그래머 참고용 (0) | 2025.10.21 |
|---|---|
| 부록 #1 ASCII CODE (0) | 2025.10.15 |
| Codesys #5 변수 Variable (전역변수, 지역변수, Retain 변수) (0) | 2025.10.14 |
| Codesys #4-1 POU (Program, Function Block Diagram, Function) (0) | 2025.07.22 |
| Codesys #3-2 AND 함수와 데이터 수동 입력 (0) | 2025.07.21 |