상세 컨텐츠

본문 제목

Codesys 프로그램 작성 #2 (ST)

Codesys

by 메튜킴 2025. 7. 21. 13:53

본문


프로그램 작성 창을 통해 간단한 프로그램을 하나 작성해 보도록 하겠습니다.

 

위 사진은 제가 어릴 때 친척집에 있었던 전등 을 챗 GPT로 구현한 것입니다. (아직 스위치 표현 부분에 약간 에러가 있는 것 같습니다. ^^) 3로 스위치 라고 검색하셔도 됩니다.

요지는 1층, 2층 스위치가 눌러질 때 마다 전등은 on/off를 변경합니다.

위와 같은 회로에서 전구를 켜기 위해선 스위치 1, 스위치 2가 같은 상태 (on, on / off, off) 일 때 동작하게 됩니다.

이를 각각 ST, LD, FBD 스타일로 프로그램 해 보겠습니다.

 

먼저, main program 에서 모든 프로그램을 작성하는 것은 시안성 및 관리 차원에서 좋지 않기 때문에 함수를 하나 만들어 줍니다.

아래 그림처럼 Application 을 우클릭 하면 Object 를 추가할 수 있고 여기서 POU(Program Organization Unit)을 추가합니다.

아래와 같이 추가할 함수의 이름과 어떤 언어로 작성할지 그리고 return 값의 데이터 형식을 지정해 줍니다.

Program, Function Block, Function 의 차이는 추후에 다른 페이지에서 기술하도록 하겠습니다.

추가한 함수는 아래와 같은 형식을 띄게 됩니다.

아까 메인 Prg 과 다르게 VAR_INPUT, VAR 가 있는 것을 알 수 있습니다.

VAR_INPUT : 외부에서 입력되는 데이터를 받아들이는 변수 입니다.

VAR              : 함수 내부에서만 사용하는 변수 입니다.

우리는 main prg 에서 스위치 상태를 불러와야 되기 때문에 VAR_INPUT 에 xSwitch1, xSwitch2를 추가합니다.

x를 붙이는 이유, 데이터 형식도 나중에 기술하겠습니다.

일반적으로 C언어쪽 혹은 ST쪽 언어로 코딩하는 사람들은 위 프로그램 소스에 불편함을 못 느낍니다.

실제로 해당 프로그램에 문제가 있지는 않지만 향후 프로그램이 길어질 경우 오류가 발생할 소지를 가지고 있습니다.

  1. output이 2개로 나눠져 있다.
    • 정 필요한 경우에 나눠서 쓸 수 밖에 없지만 그렇지 않다면 output ( fu3Way_ST ) 은 한번만 사용해 주는 것이 좋다.
    • 여러군데서 사용할 경우 내부 충돌로 인해 원하지 않는 값을 출력할 수 있다.
  2. 예외상황 경우의 수를 꼭 확인해주자
    • 현재 소스에서 나온 것은 아니지만 1,2번 상황 외에 3번 상황 발생에 대해 유의하도록 합시다.
    • 따라서 더 좋은 표현은 

위와 같은 표현이 되겠다.

 

하지만 최적의 코딩으로 작성하자면

다음과 같이 심플하게 갈 수도 있다.

output도 1개이고 가장 간결한 소스이다.

위와 같이 작성하고 login 후 run 하면 동작하지 않는다.

이유는 main에서 해당 함수를 언제 사용하는지 지정하지 않은 탓인데

다음과 같이 main prg 에서 작성해주면 xLight의 상태가 우리가 원하는 동작 하는 것을 확인할 수 있다.

 

 

관련글 더보기