\ 전기 엔지니어의 꿈 :: 7. Counter의 개념과 응용
반응형

안녕하세요 공돌이 직딩입니다.

 

장마라는데 비는 안오고 날씨만 푹푹찌네요.

 

그나마 오늘은 비가좀 오겠어요. 비좀 쏟아졌으면 좋겠네요.. 시원하게

 

오늘은 지난시간에 이어서 타이머와 단짝인 카운터에 대해서 공부해보겠습니다.

 

 

카운터라는 놈은 숫자를 세주는 역할을 합니다.

 

사실 사전적 정의나 의미야 인터넷을 서칭하면 많이 나오겠지만 저는 카운터라는 놈을 실제로 어떻게 산업에서

 

응용 할 수 있는지를 설명드리고 싶네요.

 

 

타이머는 시간의 흐름에 따라서 코일 내부로 전원이 인가되어 횟수를 셌다면

 

카운터는 내가 원하는 조건에 따라서 코일 내부로 전원을 인가하고, 횟수를 세는 것입니다. 

 

간략도를 한번 들여다 볼까요.

 

실제로 가장 기본적인 8Pin 소켓은 위 그림과 같은 넘버링을 가집니다.

 

소켓을 보면 8개의 십자나사가 박혀있는데 위 간략도(노란 박스)처럼 넘버링이 됩니다.

 

소켓에 릴레이를 끼울수도 있고, 타이머, 플리커, 카운터등 여러가지를 꼽을 수 있게 되어있죠.

 

물론 전자식도 있습니다. 이런 타이머, 플리커, 카운터 등은 가격이 더 나가고 크기가 작죠.

 

카운터가 끼워진 사진을 보여드리고 싶었으나 해당사진이 없는 관계로 8핀 릴레이가 소켓에 끼워진 사진을

 

첨부합니다.

 

우리는 카운터의 넘버의 역할에 대해서 알아보려고 합니다.

 

아래 표를 보시죠.  

 

번호 명칭 역할
1 공통선(Common)
2 전원코일(AC 220V)
3 RESET 입력
4 COUNTER 입력
5 -
6 OUTPUT
7 전원코일(AC 220V)
8 공통선(Common)

다른 핀번호들은 이전에 공부했던 것과 같은데 특이한 것이라면

 

COUNTER 입력과 RESET입력, 그리고 OUTPUT이 보이죠.

 

1. COUNTER 입력이라는 것에 통전이 되면 숫자가 1 증가한다고 보시면 됩니다.

   즉 3이라는 수치를 만들고 싶다면 COUNTER 입력에 3번 통전을 해주어야겠죠.

 

2. RESET 입력은 COUNTER 값을 0으로 초기화 시켜주기 위해서 사용하는 핀입니다.

   RESET 입력핀에 통전되면 COUNTER 수치가 초기화 됩니다.

 

3. OUTPUT으로는 COUNTER의 현수치가 나타납니다.

  즉, COUNTER 입력을 3번 통전시켜 3이라는 수치를 저장하였다면 OUTPUT에는 3이라는 수치가 출력되는 것이죠.

 

카운터라는놈은 조금만 생각해보면 조금 의아한 부분이 있습니다.

 

COUNTER 입력에 통전이 되면 숫자가 1이 증가한다고 하는데 대체 통전을 몇초간 주어야 수치가 1이 증가할 수

 

있을까요?

 

초보자분들에겐 이런 질문이 조금 어려울수도 있겠습니다.

 

다음 그림을 볼까요?

 

                                     T1                                                                       T2                                         

                                                       

자 T1 시간에 LOW 신호가 HIGH 신호로 뒤바뀌고 T2까지 쭉 유지되고 있는 것을 볼 수 있죠?

 

앞서 언급한 4번핀인 COUNTER 입력에 현재와 같은 신호가 들어가고 있습니다.

 

카운터는 언제 수치를 증가시킬까요?

 

상식적으로 T1, T2라는 시간이 통전되는동안 계속 증가할 수는 없는 거겠죠.

 

직감적으로 T1 시점에 카운팅이 되어야 함을 알 수 있을겁니다.

 

즉 LOW 신호에서 HIGH 신호로 바뀌는 그찰나 말이죠.

 

LOW에서 HIGH로 바뀌는 것을 상승 EDGE구간이다 라고 표현하기도 합니다.

 

여기서 펄스 개념이 나오죠.

 

제어공학이라는 분야에 있어서 처음이자 끝입니다.

 

겁나게 중요합니다. 이 펄스라는놈!.

 

펄스는 아래그림을 보시면 이해하실 수 있습니다.

전압을 주는데 계속 전압을 인가하는 것이 아니라 일정 시간단위로 OFF와 ON을 반복하여 구형파를 만드는 것이죠.

 

사실 이것에 대해서 설명할 것은 무궁무진하지만 카운터라는 주제에서 다루고 있고 잘못하면 이야기가 삼천포로 

 

빠질 수 있기에 단순히 펄스의 개념만 설명하였습니다.

 

다시 본론으로 돌아와보겠습니다.

 

카운터라는 녀석은 HIGH 신호가 얼마나 오랫동안 지속되는냐가 아니라 상승엣지가 몇번이냐에 따라서 수치를

 

증가 또는 감소시킵니다.

상기 그림의 1PULSE는 COUNTER의 값을 1을 증가 또는 감소시키겠죠.

 

그럼 10PULSE는요?? COUNTER의 값을 10을 증가 또는 감소시키겠죠.

 

그럼 거꾸로 뒤집어 생각해봅시다. COUNTER의 값을 125를 만들고 싶어요. 어떻게 해야 할까요?

 

125번의 PULSE를 인가해주면 되는거죠.

 

즉 껏다 켯다를 125번 반복하면 됩니다.

 

이건 실로 엄청난 사실이에요.

 

이것과 연관되어 있는 주제인 PWM(Pulse Width Modulation)이라는 것을 이후의

 

MICOM 제어 포스팅에 대해서 자세히 다룰겁니다.

 

엄청나게 중요한겁니다. 꼭 기억해주세요

 

우리는 카운터라는 놈이 펄스의 상승엣지에 의하여 동작한다는 사실을 알아냈습니다.

 

그럼 수치를 초기화하기 위해서는요???

 

마찬가지겠죠.

 

3번핀인 RESET 입력에 상승엣지를 인가해주면 값이 초기화 됩니다.

 

저는 지금 중요한 개념에 대해서 설명했습니다. 

 

이쯤에서 다시 내용을 정리해주세요.

 

카운터라는 녀석이 대표적으로 산업에 활용되는 것은 엔코더라는 놈입니다.

 

엔코더는 모터의 회전을 측정해주는 기기로 자동차나 로봇 발전기 등등 회전기기가 들어가는

 

모든 분야에 활용될 수 있습니다.

 

엔코더에 대해서 잠시 설명드리지요.

 

그림을 참조해주세요

 

인크리멘탈 엔코더입니다.

 

우측그림에 보시면 원판디스크가 있죠.

 

원판디스크의 특정 부분에 구멍이 뚤려있고 외부에서 원판으로 빛을 비춥니다.

 

원판은 한바퀴 돌때마다 구멍으로 빛이 들어와서 1회전에 1번 빛이 비춘다는 특징이 있는것이죠.

 

간략하게 말해서 구멍이 있는 곳에서는 PULSE가 HIGH가 되고,

 

구멍이 없는 곳은 빛이 투과할 수 없기 때문에 PULSE가 LOW가 되는겁니다.

 

1회전에 1빛이죠.

 

모터가 도는 속도는 겁나빠르죠.

 

육안으로는 측정이 불가합니다.

 

하지만 1회전 1빛의 원리를 사용할 수 있다면 계산할 수 있겠죠, 어떻게 하냐구요?

 

펄스가 몇번 뛰었는지를 확인하는 겁니다.

 

1초에 PULSE가 100번 뛰었다면 모터는 1초에 100번 도는 것이라고 해석할 수 있는겁니다.

 

1초에 뛰는 펄스수를 계산하게 되면 뭐가좋냐???

 

자 다음 상황을 가정해봅시다.

 

우리는 기지값(알고 있는 값)을 통해 미지값(모르는 값)을 구하고 싶어요

 

쉽게 말할게요. 전기 자동차에 모터를 달아놨는데 1초에 몇m 자동차가 가는지 알고싶습니다.

 

기지값은 1초당 모터회전수

 

모터 1회전당 이동거리입니다.

 

1초에 10번 모터가 회전하고

 

1회전당 10m를 주행한다고 보겠습니다.

 

10(회전)/1(초) * 10(m)/1(회전) = 10(m)/1(초)로 계산할 수 있는 것이죠

 

이렇게나 PULSE가 중요합니다.

 

 

 

자... 이제 본격적으로 XG-5000에서 카운터를 어떻게 사용하느냐에 대해서 말씀드려야겠네요.

 

먼저 카운터의 종류에 대해서 알아봅시다

 

XG-5000에서 지원하는 카운터는 크게 4가지 종류가 있어요.

 

1. CTU (COUNTER UP)

2. CTD (COUNTER DOWN)

3. CTUD (COUNTER UP & DOWN)

4. CTR (COUNTER RING)

 

CTU는 이름에서 짐작할 수 있듯이 숫자를 1->2->3->4 .... 순으로 UP시켜주면서 수치를 셉니다.

 

CTD는 그 반대겠죠 CTU로 100이라는 수치를 만들었다면 CTD에 입력신호가 들어갈때마다 99->98->97-> ...로 DOWN하여 수치를 셉니다.

 

CTUD는 그럼 뭐냐

CTUD는 한계치를 설정해놓고 입력값을 계속 주면 한계치만큼 증가했다가 감소합니다.

무슨말이냐면...

7이라는 한계치를 지정해주고 CTUD카운터 입력 신호를 계속주면

1->2->3->4->5->6->7->6->5->4->3->2->1->2... 

이런식으로 되는거죠.

 

CTR은 또 뭘까요

결론만 말해서 CTR은 CTUD처럼 역시 세팅값을 주게 되는데

3을 세팅하였다면 CTR의 입력 신호를 계속 주게되었을때 다음과 같이 동작합니다.

1->2->3->1->2->3->1.....

숫자가 반복되는 것이 마치 원판의 시계바늘이 돌아가는것과 비슷하다고 하여 링카운터로 불립니다.

 

그럼 XG-5000에서는 위의 4가지 카운터를 어떻게 표현할까요.

 

아래를 보고 익혀보세요

 

1.CTU

 

F10은 명령어 창이라고 말씀드렸죠?

 

F10을 눌러서 CTU C0 5를 쳐보세요.

 

타이머처럼 카운터도 비슷한 방식으로 래더를 짤 수 있어요.

 

P0를 5번 눌렀다가 떼면 P20이 점등해야 합니다.

 

이번에 시뮬레이션을 돌릴때는 시스템모니터 창과 레더 창을 같이 봐주시면서 확인해보세요.

 

P0을 눌렀을때 C0위에 카운팅이 되는것이 보이시면 성공입니다.

 

위 실험으로부터 우리는 다음과 같은 사실을 얻을 수 있었습니다.

 

첫 번째. 카운터는 전원이 들어가지 않아도 수치를 기억하고 있다.

두 번째. 상승펄스에 의해서 카운팅이 된다.

 

포인트 1. 상승 펄스가 인가될 때마다 카운팅 수치가 증가한다.

포인트 2. 카운터 한계치에 다다르면 카운터 접점(C0)이 붙는다.

      

두 번째, 상승펄스에 의해서 카운팅이 되기 때문에 사실은 접점기호를 줄때

 

단순기호 접점을 주는 것이 아니라. PUSLE로 주는것이 더 훌륭하다고 할 수 있습니다.

 

지금의 문제에서 기능상의 문제는 없겠지만 프로그램이 복잡해지고 길어질수록 PULSE 접점의 위력은

 

진가를 발휘합니다.

 

펄스를 쓰기 위한 방법은 다음과 같습니다.

 

Shift+F1 상승펄스

Shift+F1 하강펄스 

상승펄스는 OFF에서 ON이된 순간을 1 스캔까지 기억하며

하강펄스는 ON에서 OFF가 된 순간을 1스캔까지 기억합니다.

(참고로 PULSE에 대한 자세한 포스팅은 SET, RESET 포스팅 강좌에서 자세하게 다루겠습니다.)

 

참고로 하나더 말씀드리면 CTU의 경우 전원이 끊어져도 값이 저장되는 특성을 지니고 있는데

 

Shift+F4 버튼을 눌러 카운터의 레지스터 값을 쓰시고 

 

코일을 통전시키면 초기화 됩니다.

 

아래 기호를 참고하세요.

 

 

2.CTD

 

CTD는 CTU의 반대개념이라고 보시면 됩니다. 위와 같이 래더를 만들어놓고 한번 시뮬레이션 돌려보세요.

 

특이한점은 C0의 초기치가 5로 셋팅되어 있죠.

 

그다음은 예상이 가시죠?

 

P0를 눌러 상승 엣지가 감지될 때마다 수치가 떨어지다가 0이 되면 P20이 점등되겠죠.

 

진짜로 그렇게 되는지 해보세요.

 

 

3.CTUD

 

얘는 좀 특이한 카운터에요. UP과 DOWN을 할 것이라는 것은 너무나 자명하지만.

 

앞서 살펴본 카운터와는 다르게 몇가지 특징이 있어요.

 

UP과 DOWN을 시켜주기 위해서 어떤 버튼을 UP으로 쓸건지 어떤 버튼을 DOWN 버튼으로 쓸건지에 대해서

 

지정해주어야 합니다.

 

또한 상시 통전이 되어있어야 한답니다.

 

차근차근 살펴봅시다.

 

입력 형식은 다음과 같아요.

 

[(CTUD) (저장할 공간명칭) (UP 버튼지정) (DOWN 버튼지정) (카운팅 세팅값)]

 

실제로 소괄호는 쓰이지 않습니다. 설명을 위해서 삽입한거에요.

 

다른거는 앞선 카운터와 비슷한데 UP버튼이랑 DOWN 버튼을 지정하게 되어있네요.

 

UP이나 DOWN버튼을 눌러서 카운팅 세팅값이 되도록 해야만 카운터 접점 C0가 통전된다는 의미이네요.

 

더 쉽게말하면 카운팅 세팅값이 10이라고 하면, UP이나 DOWN버튼을 눌러서 10을 만들어야만 C0 스위치가 닫힌다는

 

이야기이죠.

 

처음보는 것이 등장했죠 ON이라고 써져있는 스위치 버튼

 

이것은 무엇이냐 하면.

 

특수 접점이라고 해서

 

F3을 누른후에 F99를 아래와 같이 입력하면 설명이 나옵니다.

 

이 이외에도 많은 접점들이 정의되어 있어요.

 

다알면 좋겠지만 종종 사용하는 것들 위주로 익혀두시면 좋습니다.

 

PLC는 기능이 너무많아서 다알기가 힘들어요...

 

저는 개인적으로 C가 익숙해서 C코딩을 많이 사용합니다.

 

시뮬레이션을 한번 돌려보도록 하겠습니다.

 

 

초기값이 0이네요.

 

P0를 눌러볼까요.

 

C0 카운팅값이 하나 증가했죠?

 

이제 P1을 눌러보세요.

 

카운팅값 C0가 다시 0이 되어있네요.

 

이번엔 10이라는 수치를 맞춰 P20 램프를 켜보죠.

 

C0가 10이 되니 카운터 접점이 통전되어 P20이 불이켜졌습니다.

 

4.CTR

 

회로는 이렇게 짜주세요 

 

시뮬레이션으로 넘어가봅시다.

 

 

역시 C0 초기값은 0이네요.

 

P0를 한번 눌러봅시다.

 

C0가 증가했네요.

 

3이 될때까지 C0를 눌러봅시다.

 

자 우리는 여기서 P0를 한번 더 눌러보겠습니다.

 

어떻게 되는지 한번 봐봅시다.

 

??

 

초기 상태와 같은 모습이 돌아왔네요.

 

자 예측하셧죠...

 

그렇습니다. 이미 위에도 언급했었듯. CTR은 링처럼 계속 순환합니다.

 

 

 

 

 

 

 

대망의 QUEST 시간이 돌아왔습니다.

 

QUEST1.

 

움직이는 컨베이어에 자재가 실려있어요. 이를 센서 P0이 움직이는 자재를 감지합니다. 공작기계(P20)은 P0의

센싱결과에 따라서 반응하는데 10번 단위로 펀칭을 합니다.

(즉, 10, 20, 30번마다 컨베이어 위로 움직이는 자재를 펀칭해줍니다.)

 

위 시나리오를 고민해보세요.

 

완성된 래더입니다.

 

 

제가 왜 이문제를 냈을까요?

 

여러분이 아직 이문제를 풀어내지 못하셨다면 PLC를 공부하는데 있어서 아주 중요한 포인트를 놓치고 계신거에요.

 

현재 상황에서 알맞는 소자를 PLC도구와 매칭하지 못하시는 것으로 많은 훈련을 필요로 합니다~

 

이문제.. 바로위에 언급드렸던 CTR 예제와 동일합니다.

 

다만 접점에 센서라는 의미가 붙었고 QUEST1의 상황의 의미를 부여했을 뿐이지요.

 

현상황을 어떻게 회로로 풀어내느냐가 바로 PLC라고 할 수 있어요~

 

 

P0을 10번 누를때마다 P20이 점등되는지 보는거에요

 

QUEST2.

게임을 만들어 볼꺼에요.

 

사람 A와 사람 B가 있어요.

A와 B앞에는 PUSH 버튼 P0과 P1이 있습니다.

A와 B중 버튼을 먼저 누른 사람이 스코어 1점(COUNTER A, B)를 얻습니다.

단, 연속 2번 먼저 버튼을 누른 사람은 다음에도(3번째) 먼저 버튼을 누르게 될시 2점이 증가합니다.

 

먼저 20점 이상을 채운사람이 승리하게 되는 게임입니다.

 

이 문제는 펄스 입력을 사용해서 풀어보세요.

 

참고로 제가 앞서 설명드린 각 타이머의 특징과 접점의 특징, 스캐닝순서에 대해서 잘 이해하고 있어야만

 

이문제를 풀 수 있습니다.

 

힌트를 좀 드릴게요.

 

1. 카운터는 상승엣지 또는 하강엣지를 검출하여 동작한다.

2. CTU는 전원이 차단되어도 값이 유지되는 특성을 가지고있다.

3. CTUD는 전원이 차단되면 값도 역시 차단된다.

4. CTR은 숫자가 계속 순환된다.

 

완성된 래더도는 다음과 같습니다.

 

 

 

체크포인트 

 

1.P0이나 P1을 2번 연속누르고 수치가 증가하는지 확인한 뒤에 다시한번 버튼을 누르게 되었을때 수치가 2가 증가하는

  것을 확인해봅시다.

 -> 조금의 야매(?)를 부렸습니다. XG5000에는 한번에 2씩 증가하는 카운터는 애석하게도 존재하지 않아요.

      하지만 카운팅을 2초씩 증가하게끔 만들고 싶은데 포기할 순 없잖아요?

      3번째 연속으로 눌렀을 경우마다 P0 또는 P1을 누르는 순간, 떼는 순간에 모두 펄스를 주면 카운팅이 2씩

      될 수 있겟죠.

 2.P0이나 P1을 1번 또는 2번 누른뒤에 P1과 P0을 눌러 CTUD가 초기화 되는지 확인해봅시다.

   문제에 3번을 연속눌러야 2점이 증가하는 조건이 있기 때문에 연속해서 3번이라는 수치를 프로그램적으로 구현해야 

   합니다. 

   저는 CTUD의 전원 차단시 초기화되는 특징을 이용했어요.

  

이번 퀘스트는 시뮬레이션을 열거하는것이 의미가 없겠네요. 그림은 생략하겠습니다.

 

직접 돌려서 눈으로 한번 확인해보세요.

 

 

QUEST3.

 

우리가 배웠던 지식은 누적이 되어야만 합니다.

 

사이클 시작버튼 P0

사이클 중지버튼 P1

 

1. CYCLE 1이 2회전 하고나면 CYCLE 2로 진입합니다.

2. CYCLE 2도 2회전 합니다.

3. CYCLE 1(2회전)->CYLCLE 2(2회전)->CYCLE 1(2회전)->CYLCLE 2(2회전)->전체사이클 중지

 

다음 회로를 짜보세요. 좀 어려울겁니다. 

 

포기하지 않고 하시면 분명히 큰 실력향상이 있으리라 확신합니다.

 

 

CYCLE 1
CYCLE2
전체 도면
0~36
40~END

완성된 레더도를 보니까 꽤 길죠.

 

시뮬레이션 그림은 따로 삽입하지 않겠습니다.

 

P0를 눌렀을때 위 시퀀스에 의해 동작된다면 성공이에요.

 

무슨 포스팅이 이렇게 긴가요 하겠지만

 

잘 넣어두세요.

 

다 도움이 됩니다. 여기까지 읽어주신분은 복권에 당첨되거나 여자친구가 생기겠죠(?)!

 

ㅎㅎㅎ

 

다음주에 다시봐요.

 

반응형
블로그 이미지

Lubly0104

전기설계 엔지니어가 알려주는 찐전기

,