본문 바로가기
PLC/Siemens (S7)

SIEMENS STEP7 PLC Simatic Manager Programing 기초 응용 ( 지멘스 PLC FC, Function )

by 쪼렙엔지니어 2022. 1. 25.
반응형

오늘은 "FC"(Function)에 대해서 자세히 알아보겠습니다.

간단하게 얘기해서 "FC"는 프로그램을 짜는 공간이라고 생각하면 됩니다.

​일단 지난번에 배운 내용중에서 "FC"를 생성하는 방법부터

살짝 복습해 볼까요?

아래와 같이 "Blocks"화면에서 우클릭하고

[Insert New Object]-[Function]을 실행하면

"FC"를 추가할 수 있습니다.

아래와 같은 "Properties"에서 FC 이름을 설정한 뒤

"OK"버튼을 클릭해주면 됩니다.

저는 "FC1"을 만들어 보도록 하겠습니다.

"FC"뒤에 번호는 원하는 걸 아무거나 붙이셔도 괜찮습니다.

 

"FC1"이 만들어졌으니 더블클릭하여 프로그램 편집창을

띄어주도록 합니다.

자 이제 프로그램을 짤 수 있는 편집창이 생성되었습니다.

"Function"은 말 그대로 함수라는 의미입니다.

 

위와 같이 입력값에 대한 출력값이 존재하는 프로그램을 함수라고 하지요.

아래 창 화면이 메인 프로그램 편집창인데

상단부분 (Interface) 에서 변수를 선언해주고,

하단부분에서 선언된 변수를 이용하여 프로그램을 작성하면 됩니다.

먼저 위쪽의 "Interface"를 만들어야 합니다.

IN은 입력파라미터,

OUT은 출력파라미터,

IN_OUT은 입출력 공용 파라미터,

TEMP는 임시변수 입니다.

RETURN은 IEC 61131-3 규정에 따라 특정하게 지정된 부가적인

OUT(출력) 파라미터로 FC에만 존재합니다.

자 여기까진 지난번에 배웠던 내용입니다.

그럼 이제 실제로 하나씩 만들어가며 알아보겠습니다.

 

 

1. 변수

FC에서는 로컬변수와 임시변수를 사용할 수 있습니다.

로컬변수란 해당 블록 안에서만 통용되는

데이터 저장고 라고 생각하시면 됩니다.

그리고 임시변수는 해당 블록이 실행되는 동안에만

데이터를 저장하고 있을 수 있는 변수 입니다.

로컬변수(지역변수)의 반대 개념으로는 글로벌 변수(전역변수)가

임시변수의 반대 개념으로는 정적변수가 있습니다.

(FB까지 상세히 공부하고 나서 변수의 개념을 다시 짚어보겠습니다.)

간혹 로컬 변수와 임시 변수가 같은것 아니냐는

말씀을 하시는 분들이 계시는데

글로벌변수(전역변수)와 로컬변수(지역변수)는

접근하거나 사용이 가능 범위에 대한 차이를 의미하고

임시변수(Temp)와 정적변수(Stat)은

변수가 저장하고 있는 데이터의 저장시간(?) 저장력(?)의

차이를 나타내기 때문에

절대 같은게 아니므로 헷갈리시면 안됩니다.

2. 로컬 데이터 스택의 사용 (L스택)

지멘스의 메모리 구조는 위와 같이 되어 있는데

왼쪽의 I, Q, Peripheral, Bit memories와

오른쪽의 DB( Data blocks )는

정적 변수입니다.

Instance DB를 제외하면 대부분 Global 변수로

어디서나 접근이 가능하고 어디서나 사용이 가능합니다.

그렇지만 L stack은 로컬변수와 임시변수가 수시로 쓰였다 지워졌다 하는

메모리 공간입니다.

도서관을 예로 들자면

I, Q, Peripheral, Bit memories와 DB가 고정석을 배치받은 아이들이고

L stack은 임시석을 배치받은 아이들이라고 생각하면 편합니다.

Lstack은 1.5Kbyte의 크기로 할당되어 있고,

이걸 여러 OB들이 나누어 가지고 있습니다.

OB만 나누어 쓰냐구요?

아니죠.

예를 들어 OB1이 실행된다고 했을때,

OB1에서 호출되어 있는 FC와 FB가 256byte의 공간을 나누어 사용합니다.

3번이벤트가 발생하는 타이밍에는 FC2의 로컬변수와 임시변수들이 L스택을 사용하고 있다가

FC2번의 할일이 다 끝나고 나면 L stack에서는 사라지는거죠.

이해가 되시나요??

위에서는 FC만을 언급했는데,

FB에도 Temp라는 변수가 있기에 L stack을 함께 사용합니다.

OB들이 자신이 사용하려고 다른 FC나 FB의 임시변수들과

공유하지 않는 메모리 사이즈는 20 ~ 22 byte 정도 됩니다.

이건 해당 "OB"의 "Object Properties"에서 확인이 가능합니다.

버전마다 다르겠지만

"Object Properties"의 "General -Part2" 탭에서

확인이 가능합니다.

Local Data : 26byte네요.

256byte중에서 26byte를 자신이 사용하고

나머지를 호출당하는 FC와 FB가 나누어 사용합니다.

 

 

 

3. FC 프로그래밍

먼저 Interface에 로컬 변수를 선언해 보았습니다.

그리고 아래와 같이 프로그램도 작성해 보았습니다.

간단한 자기유지 프로그램입니다.

여기서

??.? (물음표) 부분을 마우스로 클릭해서 P를 입력해 보면

입력할 수 있는 변수의 종류가 나옵니다.

그렇게 하나씩 지정을 해주도록 합니다.

자 완성되었습니다.

복잡해 보이지만 정말 간단한 자기유지 프로그램입니다.

Pump(PP)를 정지 할 수 있는 버튼이

stop버튼과 system_fault로 두개라서 복잡해 보이는 것 뿐입니다.

이걸 이제 OB1에서 호출하여 사용하면 됩니다.

OB1 프로그램 편집창을 실행시켜 주도록 합니다.

여기서 왼쪽 "Program elements"탭에서

"FC blocks" 하위 카테고리를 열어보면

우리가 프로그램을 저장항 FC1이 나옵니다.

이걸 프로그램 편집화면에 드래그&드롭 해주면 됩니다.

그럼 아래와 같이 "FC1"이 호출되었습니다.

다시 ??.?(물음표가 떴네요.)

여기다가 글로벌 변수(절대 어드레스, 심볼 어드레스)를 집어넣어 주면 됩니다.

OB에서 호출했기 때문에 글로벌 변수를 사용하면 되는 것이고,

다른 FC나 FB에서 호출한다면 로컬변수나 임시변수도 집어넣을 수 있습니다.

그리고 동일한 FC1을 얼마든지 재호출하여 사용이 가능합니다.

"FC1"을 세번 호출하여 각각 다른 어드레스를 지정해 보았습니다.

Network1과 Network2에서 호출한 첫번째 "FC1"과 두번째 "FC1"에는

절대 어드레스와 Bit Memory를 바로 입력해보았으며,

Network3의 세번째 "FC1"에는 심볼 어드레스를 이용하여 입력했습니다.

아 물론 심볼어드레스를 이용하려면

아래와 같이 심볼 편집기에서 심볼을 정의해 주어야 합니다.

그리고 "FC1"때와 마찬가지로

호출한 FC1을 더블클릭 해보면 아래와 같이 입력 가능한

심볼 어드레스 들이 보입니다.

골라서 입력하셔도 되고,

직접 타이핑하여 입력하셔도 됩니다.

오늘을 FC (Function)에 대해서 알아보았습니다.

다음시간에는 FB(Function Block)에 대해서 좀 더 자세히 알아보겠습니다.

제 블로그를 방문해 주셔서 감사합니다.

도움이 되셨다면 공감(좋아요) 부탁드리고,

댓글은 다른분들께도 좋은 정보일 수 있으니

공개로 부탁드립니다.

여러분의 작은 정성이 좋은 포스팅을 생산하는

힘이 된답니다. :)

감사합니다.

 

 

반응형

댓글