\ 전기 엔지니어의 꿈 :: 20. MCS및 Step relay의 응용 예제 해설
반응형

안녕하세요 공직자에요 

 

지난주에 문제를 내고 풀어보니

 

문제에 부연 설명이 필요한 부분이 있어 수정한 부분이 있었습니다.

 

수정된 부분을 바탕으로 해설 시작하겠습니다.

 

 

 

 

QUEST1.

 

 

인버터에는 저속 중속 고속이 존재하며

 

중속이 되기 위해서는 필히 저속구간을 거쳐야 하기에 저속지령이 5초간 유지된후

 

1초뒤 중속 지령을 5초간 유지한다고 가정하겠습니다.

 

고속구간도 마찬가지로 저속과 중속구간을 거쳐야 하며 중속 지령을 5초간 유지하고

 

1초뒤 고속지령을 5초간 유지한다고 가정하겠습니다

 

P0를 누르면 저속지령이 나오고

 

저속 지령을 받은 인버터는 5초간 저속지령을 유지합니다.

 

그리고 이후는 위에 기술한 저속, 중속, 고속 순서대로 동작합니다.

 

P1을 누르면 인버터에는 지령값이 0이 들어값니다

 

속도를 저장하는 데이터레지스터는 D0이며

 

저속은 10

중속은 60

고속은 120 입니다.

 

이 로직을 MCS로 구현해보시기 바랍니다.

 

 

 

->

 

인버터에는 지령치가 급변하여도 그에 맞게끔 추종제어를 합니다.

 

허나 모터입장에서 바라보았을때 전류치가 급변하면

 

모터 내부의 손상의 우려가 있습니다.

 

왜냐구요?

 

인덕터 전압 공식

위 수식은 전기공학도라면 누구나 아는 인덕터의 전압공식입니다.

(비전공자분들을 위해 이부분 역시도 이후 전기 관련 포스팅[회로이론]을 하면서 자세하게 다루겠습니다.)

 

수식을 해석해보면 시간에 따른 전류의 변화율이 클수록 많은 전압이 유도된다는 것으로

 

해석할 수 있습니다.

 

모터에는 도선이 코일형태로 여러번 감겨있다는 사실정도는 누구나 아실겁니다.

 

이러한 도선에 짧은시간에 급변하는 전류치가 생긴다면 어떻게 될까요?

 

유기되는 전압이 매우 커지겠죠?

 

그러면 결국은 어느지점 이상에서 절연이 파괴될 겁니다.

 

때문에 단계적으로 전류치를 올려주는게 매우매우 중요합니다.

 

이러한 현상은 기계시스템과 전기시스템의 차이점에서 비롯됩니다.

 

전기시스템에 비해 기계시스템은 관성에 대한 영향이 크기 때문에

 

전기시스템의 급변하는 지령치를 기계시스템은 평균치로 받아들이게 됩니다.

 

전기에서 흔히 이야기하는 실효값의 의미도 교류전력을 마치 직류처럼 해석하기

 

위한 테크닉에 지나지 않습니다.

 

교류는 매우빠른 속도로 변화하기 때문에 순간 값을 육안으로 확인하기 힘듭니다.

 

해서 우리는 매우 빠른 전류를 제어할때 그 결과를 기계시스템을 바라보고 비로소

 

제어가 제대로 되는지 확인할 수 있는 것이지요.

 

급변하는 전류치를 일일히 해석하여 제어가 제대로 되고 있는지 확인하는 일은 없지요.

(가능은 합니다.)

 

이야기가 잠시 샜습니다.

 

본론으로 돌아와 MCS로 구현하고자 하는 취지는 저속구간을 거치지 않고

 

중속 고속 구간을 거칠경우 자동으로 차단되게끔 하려는 의도인데요.

 

이는 실제 모터의 경우 S곡선을 그리면서 증가하는 그래프를 참고해보시면 도움이 될겁니다.

 

우리는 S곡선까지 그릴 의도는 아니기 때문에 문제에 대한 해답만 들춰보도록 하겠습니다.

 

완성된 래더는 이렇습니다.

19_QUEST1_1 기존레더.pdf
0.02MB

시뮬레이션을 한번 돌려보시기 바랍니다

 

아마도 위 래더대로 동작했을때 MCS가 어떤기능을 하는지에 대해 알아차리기 어려울수도 있을듯 하네요.

 

해서 2번째 변형된 레더를 다시 보여드립니다.

 

19_QUEST_1 변형레더.pdf
0.02MB

변형된 레더의 핵심은 MCS 동작이 서로 연동되지 않고 내가 누르는 PUSH BUTTON에 의해 동작되게끔

 

만들므로써 MCS가 어떠한 역할을 하는지에 대한 이해를 돕는것입니다.

 

이 래더를 시뮬레이션을 돌려보시는데

 

제가 말한 부분을 확인하며 MCS의 기능에 대해서 이해하는 것이 조금더 쉬울 듯 합니다.

 

첫번째: P5만 눌러보세요

 

D0에 저속값(10)이 저장되나요?

 

 

두번째: P5와 P6를 같이 눌러보세요

 

D0에 저속(10)이 저장된 이후 중속(60)이 저장되나요?

 

아래그림을 확인바랍니다.

 

 

세번째: P5와 P6를 끄고난 이후(초기화 이후)에 P6만 한번 눌러보세요

 

중속값인 60이 D0에 들어가나요?

 

안들어갈겁니다.

 

시뮬을 돌려보세요

 

이게 바로 핵심이에요.

 

저속을 거치지 않고 중속 또는 고속을 바로 거치면 인터록이 걸린다.

 

즉 MCS는 선행 MCS가 SET되지 않으면 후행 MCS가 SET될 수 없다.

 

물론 실제 인버터는 고속지령을 준다고 한번에 전류치를 왕창 내보내지는 않습니다.

 

모터가 필요한만큼만 전류치를 내보내거든요.

 

위 예제는 이해를 돕기위해 설명한 것이라고 생각바랍니다.

 

독자분들중 또 어느분은 '순차제어 기능을 구지 이렇게 구현할 필요가 있나요?'라고 말씀하실 수 있겠습니다.

 

제 대답은 '아니오'입니다.

 

구현은 여러분 마음입니다.

 

어떤 기능이든 구현만 되면 된다고 늘 말씀드렸었죠?

 

선택은 여러분 마음이지만 다른 사람이 짜논 코드를 내가 해석한다고 했을때

 

이런식으로 구현된 문구가 있다면 이에 대해서 미리 숙지하고 있어서 즉각 이해할 수 있다면

 

더 훌륭한 엔지니어라 할 수 있겠죠?

 

 

 

 

 

 

QUEST2.

 

MCS는 주로 전제조건을 사용하는 로직에 쓰입니다.

 

선행조건이 갖추어져 있어야 다음공정이 진행되고

 

다음공정이 진행되는 도중이라도 선행조건이 깨지면 로직이 구현되지 않죠.

 

이런 상황을 가정해봅시다.

 

1,000개의 제품을 신뢰성 테스트를 한다고 봅시다.

 

1,000개의 제품은 각각 A, B, C, D 4단계의 TEST를 진행하여야 하며

 

A단계를 통과한 제품들만 B, C, D단계를 거칠 수 있고,

 

마찬가지로 B단계를 거친 제품만 C, D를 거칠 수 있습니다.

 

각 단계별로 품질검수자가 육안으로 해당 제품의 양, 부를 판정할 수 있는 파일럿 램프가 있는데요.

 

A, B단계까지만 거친 제품에 한해서는 제품 품질이 불량이며 P20이 점등되며

 

C단계까지 거친 제품에 한해서는 제품 품질 보통이며 P21이 점등되고

 

D단계까지 거친 제품에 한해서는 제품 품질이 양호이며 P22가 점등됩니다

 

A, B, C, D TEST 각각은 1초의 소요시간이 필요하며

 

다음 TEST 진행시까지의 시간은 필요하지 않습니다. 

 

(20.8.11 추가)

A 테스트를 진행하기 위해서 P2 버튼을 눌러야하고

B 테스트를 진행하기 위해서 P3 버튼을 눌러야하고

C 테스트를 진행하기 위해서 P4 버튼을 눌러야하고

D 테스트를 진행하기 위해서 P5 버튼을 눌러야 합니다.

 

A, B, C, D에 대한 테스트가 끝나고 P9 버튼을 누르면

 

M0가 RESET되며 다음 제품의 테스트를 진행하기 위해서는

 

다시 P0를 눌러야 합니다.

 

A, B, C, D 테스트는 필히 알파벳 순으로만 진행될 수 있습니다.

 

정리하면

 

A를 건너뛰고 B, C, D TEST가 불가능하며

B를 건너뛰고 C, D TEST가 불가능합니다.A, B를 건너뛰고 C, D TEST 역시 불가능하고C를 건너뛰고 D TEST가 불가능하고A, B ,C중 하나라도 건너뛰고 D만 단독으로 TEST가 불가능합니다.

 

카운터는 C0를 사용하며 1,000개 회전시 자동 리셋 됩니다.

 

불량인 제품의 개수는 D0에 저장되고

 

보통인 제품의 개수는 D1에 저장되며

 

양호한 제품의 개수는 D2에 저장됩니다.

 

이 문제를 MCS로 구현해보세요.

 

 

->

 

문제를 내고보니 문제에 대한 설명이 부족한 부분이 있어서 부족한 부분에 대해서 추가사항을

 

수정하였습니다.

 

 

QUEST2_REV02.pdf
0.02MB

시뮬레이션을 한번 돌려봅시다.

 

먼저 TEST를 시작한다는 최초시작버튼인 P0를 누르고

 

이후 차례대로 P2, P3를 눌러 A, B TEST가 완료되었다는 상황을 만들어봅시다.

 

 

불량등(P20)이 점등됨을 확인할 수 있습니다.

 

또한 A, B TEST만 통과 하였다는 사실을 P9(공정 끝점)을 누름으로 인해서 D0에 저장됨을 확인할 수 있습니다.

 

P0를 다시 OFF 상태로두고 P9만 눌러보면 불량 제품의 개수(D0)값이 1개 증가된 것을 확인할 수 있습니다.

 

이때 주의할 점은 P0를 OFF 상태로 두고 P9버튼을 눌러야 한다는 점인데요.

 

P0를 ON 상태로두고 P9를 누르면 시퀀스가 반복되어 C0값이 아래 그림과 같이 튀게 됩니다.

 

이러한 현상을 막기 위해서 인터록을 시퀀스상 인터록을 걸어준다면 더 좋겠지만 

 

여러분의 숙제로 남겨드리고 넘어가도록 하겠습니다.

 

다음 시뮬레이션 TEST를 위해서 다시 모든 스위치를 OFF 상태로 둡니다.

 

 

P0를 다시 눌러서 다음 제품에 대한 TEST의 시작을 알립시다.

 

이후 P2, P3, P4를 각각눌러 A, B, C TEST에 통과한 상황을 만들어 봅시다.

 

 

그림에서 보시다시피 P20은 소등되고 P21이 점등되고 있음을 확인할 수 있습니다.

 

마찬가지 방법으로 P9를 눌러 D1이 증가되는지 확인해 봅시다.

 

D1이 증가했네요.

 

이번엔 A, B, C, D TEST를 모두 통과한 상황에 D2가 증가하는지를 봐봅시다.

 

즉, P2, P3, P4, P5를 모두 눌러서 A, B, C, D TEST가 모두 통과된 상황을 가정하고 D2가 증가하는지 보는겁니다.

 

일단 램프는 P22가 정상 점등됨을 확인할 수 있으며

 

이상태에서 P9를 눌러보면

 

D2가 하나 증가한 것을 확인할 수 있습니다.

 

자 이번엔 다른부분을 확인해볼 겁니다.

 

TEST A가 진행되지 않았는데 TEST B 또는 TEST C 또는 TEST D가 진행되는 경우 동작하는지 여부이죠.

 

정답은 동작하지 않아야 합니다.

 

TEST A가 선행조건이고 TEST A가 끝났을때만 TEST B, C, D를 진행하게끔 프로그래밍 되어있기 때문이죠.

 

P0를 누르고 P2를 건너뛰고 P3를 눌러도 반응이 없음을 확인할 수 있습니다

 

 

마찬가지로 P4를 눌러도 반응이 없구요.

 

QUEST 1과 마찬가지로 꼭 이런식으로 선행공정을 구현해야 하느냐 하시면

 

이게 정답은 아닙니다.

 

이런 방법도 있다는걸 알면 더 좋을뿐이지요.

 

 

 

QUEST3.

 

스마트폰에 잠금기능이 있습니다.

 

홍채인식, 패스워드 방식, 지문인식 방식등이 있겠지만

 

우리는 패턴인식방식을 Step relay 바탕으로 구현해 볼거에요.

 

아래 패턴을 주목해보시죠.

 

 

패턴의 원은 총 9개로 구성되며 이들의 순서와 조합에 따라 잠금이 풀리거나 풀리지 않거나

 

결정된다는 것은 누구나 아는 사실일테지요.

 

저는 이 패턴들에 넘버를 붙여보겠습니다.

 

규칙1.  패턴 모양이 내가 잠금 해제시 저장한 모양과 똑같아야 한다는 사실은 누구나 알겠죠

규칙2. 더불어, 똑같은 도형을 그리더라도 순서에 어긋나면 패스워드가 풀리지 않는 사실도 주목해야 합니다.

규칙3. 하나의 패턴 인식점이라도 빠지면 잠금해제가 안됩니다.

 

문제 본격적으로 나갑니다.

 

P9를 누르면 내가 누르는 패턴의 순서를 기억합니다.

 

예를들어 P9를 누르고

 

P0->P3를 누르는 경우 잠금해제 패턴은 P0와 P3가 순서대로 눌렸을때로 인식을 하게 됩니다. 

 

내가 잠금해제패턴에 만약 다음 순서로 눌렸을때 해제 된다고 가정해봅시다

 

P0->P3->P1->P4->P2->P5->P6->P7->P8

(이런 복잡한 패턴을 누가 저장하겠느냐 하지만은 저는 위 패턴을 사용합니다. ㅎㅎ)

 

이 로직을 오로지 Step relay로만 구현해보는 겁니다.

 

패턴이 정확하게 완성되었을때 잠금해제창으로 넘어가는 코일은 M0라고 가정합니다.

 

제가 기술하지 않은 부분은 자유롭게 사용 가능하며 데이터레지스터든 코일이든 자유롭게 사용할 수 있습니다.

 

(20.8.12 추가)

P10 버튼: 패턴입력완료 버튼

P20 버튼: M0 활성확인용 파일럿 램프

P11 버튼: 현재입력창 초기화버튼D0~D8: 패턴저장용 데이터레지스터D10~D18: 패턴입력용 데이터레지스터 

 

그리고 이렇게 구현되었을때 기존 순차회로를 구현했던 방식과 다르게 어떠한 장점이 있는지

 

생각해보세요.

 

->

 

 

해설 들어갑니다.

 

여기서 중요한점은 어떤 버튼을 누르냐에 따라 첫번째 스텝이 결정되는게 달라진다는 것인데요.

 

9개의 버튼에서 나타날 수 있는 순서에 유관한 순열의 갯수는 어떻게 될까요?

 

1개의 점으로 만들 수 있는 패턴

2개의 점으로 만들 수 있는 패턴

3개의....

.

.

.

9개의 점으로 만들 수 있는 패턴

 

정리해보면

 

무려 9만 8천여개입니다.

 

패턴을 풀다가 삽질을 하면 최대 9만 8천번 삽질이 가능하단 결론입니다.

 

바꿔말해보면 9만 8천여개의 각각의 패턴에 대해서 잠금을 푸를수 있게 로직을 짜야한다는 의미이기도 한데요.

 

저는 여러분께 이런 해결방법을 권해드리고 싶어요.

 

제가 소개드리는 것이 정답이 아니며, 더 훌륭한 엔지니어들께서 간단한 코드로 구현하실 수 있겠지만

 

이 역시 하나의 방법이 될 수 있다는 사실을 너그러이 이해바랍니다.

 

 

QUEST3_REV3.pdf
0.11MB

래더는 위에 첨부파일을 참고바랍니다.

 

이번 퀘스트는 굉장히 해설이 길지만, 원리만 따져보면 간단합니다.

 

현재 입력되고 있는 데이터레지스터 값과 저장된 데이터레지스터 값을 비교해야 한다는 것이 핵심인데요.

 

시뮬레이션을 돌려보면서 천천히 뜯어보겠습니다.

 

가장 먼저 시뮬레이션 화면을 열어보세요

 

문제가 다소 복잡하고 길지만 차근차근 이해시켜드리겠습니다.

 

실제 휴대폰을 보면 패턴을 입력하여 암호를 저장하는 창과

 

저장된 암호를 바탕으로 내가 입력하고 있는 패턴이 일치하는가를 확인하여 주는 인터페이스가 구분되어있죠?

 

우리는 먼저 패턴을 입력하여 암호를 저장하는 창을 구현할 겁니다. 

 

먼저 P9버튼을 누르면 내가 현재 패턴을 입력할 준비가 되었음을 알리게 됩니다.

 

 

저는 문제에서 제시한 패턴을 입력시키기 이전에

(P0->P3->P1->P4->P2->P5->P6->P7->P8)

 

P1->P2로 구성된 패턴이 정상 동작하는지를 확인해보겠습니다.

 

P1만 눌러보세요.

 

D0에 1이 저장되었음을 확인할 수 있죠. 1이 저장되었다는 것은 P1이 눌렸다는 의미로 받아들이시면 됩니다.

 

그다음 P2만 눌러보겠습니다.

 

이번엔 D1에 2가 저장되었음을 알 수 있습니다. 이때도 D0는 1을 유지하지요.

 

휴대폰을 보시면 알겠지만 패턴은 두개가 동시에 눌릴 수 없는 구조이기에 별도로 인터록을 걸지 않았습니다.

 

패턴은 2개가 될 수도 있고 9개가 될 수도 있지만 저는 2개의 패턴만을 사용하여 암호를 저장하기로 하였으니

 

P2를 끄고 P10을 눌러줍시다.

 

이렇게 되면 데이터레지스터 D100이 0에서 1로 변하면서 패턴 저장단계가 아니라

 

실시간 패턴 감시상태로 넘어가게 됩니다. 

 

여기까지가 패턴 저장의 과정이었습니다.

 

이번엔 내가 저장한 패턴을 기초로하여 실제 입력하는 패턴이 일치할때 M0가 활성화 되는지(P20이 켜지는지)

 

관찰하면 됩니다.

 

정상 동작하군요!

 

이번엔 제가 문제에서 제시했던

 

(P0->P3->P1->P4->P2->P5->P6->P7->P8) 패턴을 암호로 저장해보겠습니다.

 

초기화 버튼인 P11을 눌러주시고 현재 입력 대기상태 데이터를 초기화 해주세요

 

그리고 다시 P9를 눌러 패턴 저장단계로 진입합니다.

 

D100값이 1에서 0으로 바뀌었음을 확인할 수 있고 P20역시 소등되었음을 확인할 수 있죠.

 

이제 패턴순서대로 눌러봅니다.

 

데이터레지스터를 주목하세요

 

 

모든 데이터레지스터가 정확하게 입력되었다면 P10을 누릅니다.

 

자 D100이 1로 바뀌었습니다.

 

다시 패턴입력 상시 대기모드로 진입하였습니다.

 

이제 똑같은 패턴을 입력했을때 P20이 켜지는지 확인하기만하면 됩니다.

 

최대한 자세하게 설명을 드린다고 하였으나 이해가 가시지 않으시는 분들도 분명 있을듯 합니다.

 

댓글 남겨주시면 해설드리겠습니다.

 

 

 

 

QUEST4.

 

마라톤을 한다고 가정합니다.

 

마라톤은 대략 42KM를 완주해야 하는 스포츠 종목임은 누구나 다 알고 있으실테죠.

 

허나 프로들이 즐기는 마라톤이 아니라 한강이나 강변에서 즐기는 소소한 마라톤대회가 열렸습니다.

 

참가자는 헤아릴 수 없이 많고 마라톤을 하는 참가자들은 일정 반환점마다 푸시버튼을 통하여 자기 넘버를 태그하고

 

해당 반환점을 거쳤음을 증명해야 합니다.

 

반환점이 예를들어 4개가 있다고 가정하면 1, 2, 3, 4가 순서대로 태그되어야만 완주로 인정 받을 수 있는 것이죠.

 

1을 거치지 않고 2, 3, 4만 태그되었다면 부정으로 간주하여 실격처리 합니다.

 

자기 넘버를 기입하는 방법은 실제로는 센서를 이용한 태그로 이루어지겠으나 현재는

 

시뮬레이터를 기반으로한 퀘스트를 진행중이므로 직접 D0에 자기의 번호를 기입한다고

 

가정해봅시다. 

 

1, 2, 3, 4를 모두 거쳐 완주한 마라톤 참가자들의 숫자는 D10에 저장됩니다.

 

반환점은 총 5개로 가정합니다.

 

이를 MCS로 구현해보시기 바랍니다.

 

 

->

 

 

QUEST4.pdf
0.03MB

일단 래더를 참고해보시기 바랍니다.

 

여기서 비실행문을 기술한 이유는

 

실제 리더기로부터 참가자의 번호를 읽어낼 수 있는 외부 아날로그 데이터

 

입력 로직인데 우리는 시뮬레이터 기반의 프로그램을 작성중이기 때문에

 

비실행문 처리하였습니다.

 

시뮬레이터에서는 푸시버튼을 활용하여 문제를 진행할 수 있도록 하였어요.

 

실제로 이부분에 대한 자세한 설명은 여러분께 숙제로 남겨드리겠습니다.

 

제가 포스팅한 부분을 스스로 생각하고 공부하셨다면

 

이정도 래더해석은 쉽게 하실 수 있으리라 믿습니다.

 

시뮬레이터를 실제로 돌려보면 P4를 누름과 동시에 D1이 카운팅 되는데

 

실제로는 참가자가 0번일 수 없기 때문에(물론 0번부터 시작한다고 가정하면 래더가 수정이 되어야 합니다.)

 

통상은 1번부터 참가자 번호가 부여된다고 보았을때 이전까지 참가자 넘버가 정확히 태그되었다면

 

D10, D11, D12, D13, D14에서

 

D13과 D14가 같아지는 경우는 실제로 P14가 태그되는 순간입니다.

 

D14의 초기값은 0이고 D13은 0일 수 없기 때문입니다.

 

실상 이 예제는 실제로 사용하기엔 다소 부적합한 부분이 존재하나 MCS의 이해를 돕기 위한 것으로써 이해해주시면

 

감사하겠습니다.

 

이상. 공직자였습니다.

 

끝.

반응형
블로그 이미지

Lubly0104

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

,