\ 전기 엔지니어의 꿈 :: 'PLC' 태그의 글 목록
반응형

안녕하세요!

 

공직자에요.

 

지난시간에 이어서 예제를 들고왔습니다.

 

오늘의 퀘스트는 총 4가지 입니다.

 

제 포스팅을 꾸준히 구독해오신 분이라면 익숙한 개념으로 별로 어렵지는 않겠어요.

 

QUEST1.

 

첫번째 문제는 쉽게갈까요?

 

모터를 돌리는데 인버터가 필요하다는 사실은 아마 아시리라 믿습니다.

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

저속은 10

중속은 60

고속은 120 입니다.

 

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

 

 

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로 구현해보세요.

 

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: 패턴입력용 데이터레지스터 

 

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

 

생각해보세요.

 

QUEST4.(20.8.12 문제수정)

 

마지막 문제는 쉽게가겠습니다.

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

가정해봅시다. 

 

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

 

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

 

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

 

 

 

퀘스트는 일단 여기까지인데요.

 

문제를 내면서도... 속으로 저는 이문제를 어떻게 풀지 고민입니다.

 

문제에 대한 해설은 준비하여 차주에 찾아뵙도록 할게요.

 

추가로. 이후의 포스팅 일정에 대해서 간략히 말씀드리면

 

XG-5000 관련 포스팅은 앞으로 2~3개 정도의 포스팅 이후에 잠시 휴식기를 가질 것 같습니다.

 

어느정도 오래 휴식기를 가질지는 제가 어느 시점에 실제 PLC키트를 구매할지와 연관이 되기 때문에

 

장담은 드릴 수 없습니다...ㅜ

 

그렇다고 아예 포스팅을 중단하는 것은 아니고...

 

기술쪽 관련하여서는 기타 전력전자나, 제어공학, 전기기기 관련된 지식들도 공부하면서 포스팅할 예정이고.

 

말씀드렸듯이 마이컴 제어, 일상, 재테크 관련 포스팅을 병행하여 진행할 예정입니다.

 

사실 제가 배움에 있어서 욕심이 많은편이라 이것저것 해보는 것을 좋아하는데 자칫 블로그 주제가 산으로 가지 않을까

 

걱정이 되지만 큰틀은 유지하는 관점에서 포스팅을 이어보도록 하겠습니다. 

 

이상 공직자였습니다.

 

끝.

 

반응형
블로그 이미지

Lubly0104

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

,
반응형

안녕하세요. 공돌이 직딩이에요.

 

지난주에 이어 바로 본론으로 들어가볼까요?

 

지난주에 총 6가지 퀘스트가 있었습니다.

 

문제를 내고보니 이상한 부분이 있어 수정하였습니다..

 

직접 포스팅을하면서 느끼는건데 시험이나 각종 문제 출제위원들의 고충이 크게 느껴지네요.

 

완벽하게 쓴다고 써도 계속 오류가 생기거든요.

 

여튼. 꾸준한 포스팅을 통해 점차 필력을 올리고 여러분께 더 확실한 정보를 전달드리기 위해서 노력하겠습니다!

 

Quest1. (컨베이어 제어)

 

이 컨베이어는 물체의 크기에 따라서 총 4가지 경로(A, B, C, D)로 방향을 바꿔줍니다. 

공정시작 버튼은 P10 공정 중지버튼은 P11입니다. 

[시나리오] 

a. 센서 P0만 감지되면 물체는 P20모터가 동작하여 물체를 A경로로 보내주고 
b. 센서 P0, P1이 동시에 감지되면 물체는 P21 모터가 동작하여 물체를 B경로로 보내줍니다. 
c. 센서 P0, P1, P2가 동시에 감지되면 물체는 P22 모터가 동작하여 물체를 C경로로 보내줍니다. 
d. 마지막으로 P0, P1, P2에 모두 감지되지 않는 물체는 P23모터가 동작하여 물체를 D경로로 보내줍니다

 

공정시작 버튼 P10 & 아무센서도 감지되지 않은상태

P0 센서 감지

P0, P1 동시감지

 

P0, P1, P2 동시감지

 

 

Quest 2 (기차 모터제어) 

 

기관실에서는 기차의 속력을 조정할 수 있고 객실에는 각각 모터가 달려있어서 기관실의 모터 속도지령을 받는다 가정해봅시다. 

기관실은 1개가 존재하며 객실은 총 3개가 존재합니다.(2호칸, 3호칸, 4호칸) 

기관사는 P0 스위치를 한번 누를때마다 30씩 속도를 증가시킬 수 있습니다.반대로 P1 스위치를 한번 누를때마다 30씩 속도를 감소시킬 수 있습니다. 

속도지령치는 기관실 속력 저장 데이터레지스터 D0에 저장이 됩니다. 
마찬가지로 객실의 속력지령치 역시 속력 저장데이터 레지스터 D1, D2 ,D3에 저장됩니다. 
이 예제를 FMOV로 풀어보세요.

 

 

_ON은 상시 ON 접점으로서 앞서 배운적있죠. F99번 입니다.

 

시스템 모니터 및, 디바이스 모니터를 활용하여 D0 D1 D2 D3을 각각 확인해보세요.

 

 

 

 

Quest3 (차량 스마트센싱 기능 구현)

 

P10 전방 감지 센서
P11 우측 전방 감지 센서 
P12 좌측 전방 감지 센서 
P13 좌측 후방 감지 센서 
P14 우측 후방 감지 센서

P15 후방 감지 센서


[시나리오] 

a. 센서 P10은 세팅된 거리를 유지하면서 전진하고 세팅거리 이하가 되는경우 P20모터가 정지하여 차량이 정지합니다. 
b. 후방감지 센서 P15은 세팅된 거리(30) 이하가 감지되는 경우 P23경보가 울립니다. 
c. P0을 통해 거리를 10m씩 늘릴 수 있으며 해당거리는 D0 데이터레지스터에 보관되어 인버터에서 읽어줍니다. 
d. P1을 통해 거리를 10m씩 줄일 수 있으며 해당거리는 D0 데이터레지스터에 보관되어 인버터에서 읽어줍니다. 
e. 전방감지 센서 P10과 우측 전방 감지센서 P11이 동시에 감지되면 우측 전방 충돌을 알리는 P24 경보가 울립니다. 
f.  전방감지 센서 P10과 좌측 전방 감지센서 P12가 동시에 감지되면 좌측 전방 충돌을 알리는 P25 경보가 울립니다. 
g. 후방감지 센서 P15와 좌측 후방 감지센서 P13이 동시에 감지되면 좌측 후방 충돌을 알리는 P26이 점등됩니다. 
h. 후방감지 센서 P15와 우측 후방 감지센서 P14가 동시에 감지되면 우측 후방 충돌을 알리는 P27이 점등됩니다.

 

엔코더로부터 받아들인 회전수는 D1 데이터레지스터에 저장되며 실제로는 일정 스케일 간격으로 피드백을 받겠으나

우리는 시뮬레이터를 돌리는 것이기 때문에 P1F로 강제로 10 이라는 수치를 D1 데이터레지스터에 입력할거에요.

이때 D1레지스터의 변화에 따라 모터의 구동상태 및 파일럿 램프의 동작을 확인해보는 것을 목적으로 합니다.

 

하기 래더는 완성된 레더입니다.

 

시뮬레이터를 돌려 시나리오대로 로직이 흘러가는지 확인해보세요.

 

 

10_QUEST3.pdf
다운로드


 

Quest4 (소방설비기기 제어)
소방설비가 있어요. 화재 감지기는 연기의 농도를 측정합니다. 해당 화재 감지기는 연기의 농도에 따라서 

경보벨이나 화재를 알리는 방식이 다른데요. 

예를들어 화재 감지기가 감지할 수 있는 연기의 농도가 0부터 1000이라고 가정하고 해당 화재감지기로부터 읽어들인

 

데이터가 데이터레지스터 D0에 저장된다고 가정해봅시다.

 

우리는 말씀드렸다시피 시뮬레이션 기반의 프로그램을 작성중이므로 실제로 데이타레지스터에 값이 입력될 수는 없을

 

겁니다.

 

그래서 강제로 아래 a, b, c에 해당하는 임의의 농도를 주입시킬것 입니다.

 

우리는 임의의 농도를 주입시키지만 실제로는 상시 On되어 있는 접점에 의하여 데이터레지스터는 늘 값(연기농도)을

 

바꾸고 있겠죠

 

[시나리오] 
a. 0초과 200미만의 값이 검출되었다면 비상 경보등 P20을 울리며 
b. 200이상 500미만 값이 검출되었다면 비상 경보등 P20과 함께 비상 방송설비 P21이 작동합니다. 
c. 500이상 1000미만 값이 검출되었다면 비상 경보등 P20과 비상 방송설비 P21과 함께 방화셔터 P22가 작동합니다. 
   다만 방화셔터가 내려오는 도중 사람이 끼어있는경우 적외선 센서 P1이 감지하여 5초간 P22가 정지하고 경보음 

   P25를 울립니다. 
   그리고 사람이 빠진경우 비상경보등 P20과 함께 비상방송설비 P21이 작동하고 방화셔터 P22가 재작동합니다. 

 

 

10_QUEST4.pdf
다운로드

 

 


 

Quest5 (마우스 감도기능 구현)

 

[시나리오] 
a. P0 또는 P1을 빠르게 눌렀다가 때면 0.01씩 증가, 0.01씩 감소하고

b. P0 또는 P1을 누르는 도중 1초가 지나면 0.1씩 증가, 0.1씩 감소하고

c. P0 또는 P1을 누르는 도중 2초가 지나면 1씩 증가, 1씩 감소합니다.

 

위 로직을 증가 관련 레더와 감소 관련 레더로 나눠서 프로그램을 짜보세요.

 

전 증가로직만 보여드리겠습니다. 감소로직도 동일한 원리이니 한번 응용차원에서 스스로 해보시기 바랍니다.

 

 

TON타이머의 500번대를 사용한 이유는 아래와 같아요.

 

전 포스팅(타이머 관련)에서 말씀드렸듯 타이머는 기본 샘플링 시간이 다르거든요.

 

 0.01 스케일 단위로 수치가 변화함을 표현하기 위해 사용한 것이에요.

 

너무 빠르게 감도의 수치가 변화한다면 조정하기 어렵겠죠.

 

그래서 적당한 간격을 준 것이라고 생각하시면 됩니다.

 

 

기능을 시뮬레이팅 하다보면 수치가 정확하게 증가되지 않는 것을 확인하실 수 있을거에요.

 

컴퓨터가 실수를 정확하게 표현할 수 없기 때문이죠.

 

바로 우리가 계산하는 방식의 수치계산과 컴퓨터의 수치계산은 다르기 때문입니다.

 

컴퓨터는 아주 넓은 범위의 수를 소숫점과 지수값을 통하여 표현할 수 있지만 거꾸로 생각하여보면

 

넓은 수를 작은 비트수로 표현하려다 보니 사람이 이해하는 무한소수와 같은 모호한 수에 대해서 표현하는 것에 문제가 생기게 됩니다.

 

컴퓨터는 모두 2진수의 개념으로 수치를 이해한다 정도는 모두 알고계실겁니다.

 

 

[XGB 메뉴얼 발췌]

 

바로 여기서 문제가 발생하는데요.

 

컴퓨터는 우리가 사용하고자 하는 수치를 표현하기 모호할때 아주 가까운 근사값 수치를 만들어 내서 계산합니다.

 

그럼 의문을 가질거에요.

 

왜??? 표현을 못한다는거야???? 

 

컴퓨터가 왜 표현을 못한다는거지???

 

0.1을 컴퓨터는 어떻게 이해할까요?

 

만약 예를들어 우리가 3비트 메모리 공간을 가지고 있다면요?

 

0.1을 가장 근접하게 만들기위해 별노력을 기울여봤자

 

컴퓨터는 

 

최대 수치로 아래 수식밖에 나타낼 수 없습니다.

 

0.5+0.25+0.125=0.875

 

그럼 0.1에 가장 근접하게 만들려면 어떻게 해야할까요?

 

기껏해봐야 0.125밖에 표현이 안되네요.

 

물론 컴퓨터는 더작은 수치로써 근사치를 만들려고 할겁니다.

 

이해를 돕기위해서 설명을 드린 것이니 참고바랍니다.

 

바로 여기서 문제가 발생하는겁니다.

 

왜냐면 컴퓨터는 기껏해봐야 0과 1밖에 기억을 못하니까요.

 

우리가 표현하려는 수치를 이해시키고자 할때 사각지대가 발생하는 것이죠.

 

컴퓨터의 메모리가 무한대라면 상관없겠지만 하드디스크는 용량이 정해져있으며 메모리역시 마찬가지이죠.

 

결국 0과 1의 조합으로 인간이 표현하고자 하는 모든수를 나타낼 수 없답니다.

 

그래서 저는 인간이 컴퓨터보다 뛰어나다고 봅니다..

 

한편으로. 부동소수점에 오차에 대해서 간략히 볼까요?

 

컴퓨터는 아래와 같이 실수를 이해합니다.

 

컴퓨터가 이해하는 실수 = (1.가수부)×2^지수부

우리가 표현하려는 실수 = 1/7

 

또하나의 예로 만약 우리가 표현하려는 실수인 1/7을 어떻게 컴퓨터가 이해하는 실수로 바꿀 수 있을까요?

 

1/7은 숫자가 나누어떨어지지 않죠.

 

흔히 알고 있는 원주율값도 마찬가지 입니다.

 

우리가 이해하고 있는 수 중에 컴퓨터에 나타낼수 있는 방법이 없기에 컴퓨터는 사용자에게 데이터 신뢰도를 제시하고

 

계산하기를 권하는 것입니다. 

 

다음은 데이터형에 대한 저장범위입니다. 참고용으로 가져가시면 됩니다.

위 내용보다 사실 더깊이 들어가는 부분에 대해서는 포스팅이 방대해질듯 합니다.

 

부동소수점의 오차에 대해서 공부해보시면 자세한 내용을 공부하실 수 있을거에요.

 

궁금하신부분은 댓글로 남겨주시면 설명 드릴게요.

 

다시 본론으로 돌아와서...

 

얼마나 데이터를 신뢰할 수 있는냐에 따라서 정밀도 개념이 들어가는데 실질적으로 항공이나 자동차 미사일등의 고도의 제어시스템은

 

매우 높은 정밀도를 가져야 하겠죠.

 

아주 작은 수치 차이로도 항로나 좌표가 틀어질 수 있기 때문이에요.

 

허나 예제의 마우스의 감도를 조절하는 기능을 구현하기 위해서 이정도의 정밀도는 필요하지 않습니다.

 

따라서 '예제를 풀어보시면서 PLC에 정밀도라는 개념도 있구나' 정도로만 이해해주시면 되겠습니다.

 

 

 

Quest6 (놀이기구 제어)

 

 

 

 *트랙은 설명을 위해서 그려놨을뿐 각각의 셀이 거리를 의미하는 것은 아님.*

 

해당 트렉을 따라 파란색 놀이기구가 움직이는데 각 센서들이 파란색 놀이기구를 감지합니다. 문제에 앞서 각 레지스터의 기능과 Push button에 대해서 정의하겠습니다.

 

놀이기구 기동버튼: P10

놀이기구 정지버튼: P11

 

 

D0: 속도값을 저장하는 데이터 레지스터

D1: 회전 방향을 저장하는 데이터 레지스터로 0이면 전진방향 1이면 후진방향을 의미.

 

각종 데이터 레지스터의 수치를 인버터가 실시간으로 스캐닝하여 모터를 동작시킨다고 봅시다.

 

실제로는 주파수나 전압값등을 가변하여 모터를 제어하지만

 

여기서는 단순히 수치 입력을 바탕으로 속도를 조정한다고 가정합니다.

 

속도는 데이터레지스터 D0에 입력되어 저장되고 예를들어, 인버터는 D0의  저장된 수치가 10일때 이를 10m/Sec로 인식

 

합니다,

 

일부의 인버터는 목표 속도지령치를 주면 알아서 시간속도 곡선을 그리기 때문에 우리는 목표 속도지령치만 넣어주고

 

시작과 정지 부분에 있어서는 인버터가 알아서 움직여준다고 가정하겠습니다. 

 

Jerk, Creep속도, S곡선들을 설명하기 위해서는 내용이 많이 복잡해지고 포스팅 취지에 맞지 않기에 고려치 않도록

 

하겠습니다.

 

[시나리오]

a. 놀이기구는 P6 위치에서 시작하여 P0센서가 인식될때까지 2의 속도로 정속주행 합니다. 
b. P0센서가 감지되면 P1에 도착하기까지 1초에 10씩 계속 속도가 증가합니다. 
c. 이렇게 카트가 P1에 도착하게 되면 3초간 정지하였다가 다시 P0를 향하여 1초에 10씩 증가하여 D0에 수치가

    저장됩니다. 
d. P0에 다시 도착하게 되면, 정지한 직후 이번에는 P2 센서에 인식될때까지 1초에 5씩 속도를 증가하다가

   P2에 인식되는 순간 1초에 10씩 속도가 감소하여 P3에서 2초간 정지합니다. 
e. P3에서 2초간 정지후 놀이기구는 P4에 도착할때까지 1초에 20씩 속도를 증가하며 P4에 도착하면 도착 속도값을 유지

   한 상태로 P5를 향해 전진합니다.

f. P5에 도착한 놀이기구는 5의 속도값을 유지한 상태로 P6에 도달하면 정지합니다.

 


 

10_QUEST6.pdf
다운로드

1. STEP

 

2. STEP

P6 감지

3. STEP

P1에 감지될때까지 속도가 2씩 계속증가

 

4. STEP

다시 P0으로 주행하여 P0도착후 속도가 5씩 증가

 

5. STEP

 P2에 감지될때까지 주행

6. STEP

P3에 감지되면 2초간 정지후 P4에 도착할때까지 속도를 20씩 올린다.

7. STEP

P4에 도착하면 속도값 유지한다.

8. STEP

P5 도착하면 속도 5를 유지하여 P6로 향한다.

9. STEP

P6 도착하면 정지

 

 

 

 

 

 

 

어떠신가요?

 

모든 문제가 잘해결되었나요?

 

하나 덧붙여 말씀드리고 싶은건 제가 써놓은 래더가 정답이 아닙니다.

 

프로그래밍은 정답이 없기 때문에 여러분들도 같은 기능을 구현하셨다면 정답이라고 볼 수 있습니다.

 

물론 프로그래밍 실력에 따라 줄의 수가 줄고 PLC에 걸리는 로드가 줄어서 속도가 빨라진다면 훌륭한 프로그래머라고 할 수 있겠죠.

 

하지만 누구나 처음부터 잘하는 것은 결코 있을 수 없죠.

 

아무리 천재라도. 시행착오가 있기 마련입니다.

 

적어도 어제와 다른 오늘의 내가 되었다면 그 목표가 무엇이든 언젠가 고지에 오를수 있을 것이라고 믿습니다.

 

이상으로 포스팅을 마칠게요

 

추가로...

 

포스팅에 이상한 부분이 있거나 이해가안가는 부분, 오류가 발생한 부분에대한 피드백은 언제든지 환영입니다.

 

그럼 즐거운 한주간 보내시기 바랍니다.

반응형
블로그 이미지

Lubly0104

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

,
반응형

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

 

오늘은 퇴근길에 잠시 편의점에 들러 도시락을 사왔습니다.

 

아무것도 먹지 못하고 하루종일 일만하니 몸과 마음이 녹초가 되버리네요..

 

그래도 독자님들과의 정보공유는 끊임없이 이루어져야겠죠!

 

오늘은 가장 써먹을 곳 많은 비교연산문을 공부할겁니다.

 

이는 응용범위가 매우 넓어서 개념편과 응용편을 2개로 나누어 포스팅하도록 하겠습니다.

 

비교연산문은 사실 PLC도 PLC지만 C언어에서 아주 요긴하게 쓰입니다.

(주로 if, if else, case 기타등등으로 사용)

 

어떤 회로가 동작하기 위해 조건을 주는 것입니다.

 

그럼 지금부터 차근차근 공부해보도록 하겠습니다.

 

먼저 비교연산문이 XG-5000에서 어떻게 사용되는지 그림을 한번 보시죠.

 

[>= T0 30 에 해당하는 래더 그림 삽입]

 

위 그림을 해석하기 위해서 다음 규칙을 배워둘 필요가 있습니다.

 

첫 번째.

 

'>=' 가 자리하는 이곳을 첫번째 항(1항)이라고 명명하겠습니다.

 

이곳은 바로 비교연산자에 대해서 기술하는 곳입니다. 

 

종류는 다음것들이 있으니 참고해주세요.

 

비교연산자 의미
> 2항이 3항보다 큰가?
>= 2항이 3항보다 크거나 같은가?
< 2항이 3항보다 작은가?
<= 2항이 3항보다 작거나 같은가?
= 2항과 3항이 같은가?
<> 2항과 3항이 다른가?

 

두 번째

 

T0가 위치하는 곳을 두 번째항(2항)이라고 명명해보죠.

 

비교 기준이 되는 항이죠.

 

이곳은 데이터 레지스터값이나, 타이머 현재값, 카운터 현재값들이 들어갈 수 있어요.

 

세 번째

 

30이 위치하는 이곳은 3항이며 상수나 변수(데이터 레지스터)가 들어갈 수 잇습니다.

 

 

 

위에서 예시들었던

 

[>= T0 30]를 해석하자면 'T0값이 30보다 크거나 같은가?'

 

정도로 해석할 수 있겠네요.

 

비교연산문은 해당조건이 만족되면 회로가 통전되고 해당조건이 부합하지 않으면 회로가 차단됩니다.

 

 

다음으로 또 중요한 개념이 등장합니다.

 

바로 MOV(P) 명령인데요.

 

MOV(P)라는 명령을 XG-5000에서는 다음과 같은 방법으로 사용합니다

 

 

1항은 2항을 3항에 저장한다는 의미입니다.

 

즉 1항의 MOV라는 개념은 MOVE의 약어로 2항에 있는 10이라는 수치를 3항의 D0(데이터레지스터)에 저장한다는

 

의미이지요.

 

MOV는 입력이 인가되면 리프레싱 동작(PLC가 레더를 해석하는 동작)마다 끊임없이 값을 이동시킵니다.

 

예를들어 PLC 성능이 1초에 100번 레더를 해석한다고 가정하면

 

1초동안만 입력을 주었는데 무려 100번 값이 바뀌는 것이죠.

 

반면에 MOVP 명령을 주게되면 상승엣지 구간이 등장하는 경우만 캐치하여 MOV 명령을 합니다.

(이전에 펄스에 개념에 대해서 설명했었죠.)

 

즉 PLC 성능이 예를들어 1초에 100번 레더를 해석한다고 하더라도, 상승엣지가 한 번 검출되면

 

한 번만 MOV 명령을 취합니다. 

 

자. 한개 더 개념을 짚고 넘어갑시다.

 

1항은 2항을 3항에 저장한다는 의미라고 하였죠.

 

그렇다면 2항을 3항에 저장하는데 3항의 정체가 뭘까요?

 

3항의 정체가 무엇일까요?

 

답은 메모리(데이터 레지스터)에요! 

 

메모리(데이터 레지스터라고도 부릅니다)놈에 대해서 이해하고 계셔야해요.

 

PLC의 데이터 레지스터는 16비트로 구성됩니다.

 

쉽게말해서 전기가 통하느냐 안통하느냐를 각각 1과 0으로 봤을때

 

1과 0을 저장할 수 있는 방이 16개가 있는 것이지요.

 

아래 그림의 경우는 16개의 방에 모두 전기가 통하고 있음을 기억해주는 것이죠.

백번의 설명보다는 직접 래더 예제를 봐봅시다.

 

 

P0를 누르면 10이라는 숫자가 D0에 입력되겠죠.

 

D0는 다음처럼 저장이 되겠죠.

 

제가 메모리를 방이라고 말씀을 드렸는데요..

 

실제로는 그냥방이 아니고 방마다 호실이 다르듯 각각의 방이 의미가 다릅니다.

 

즉 메모리에서는 각 방(자리수로 표현)마다 호수(자리수 값)가 다릅니다.

 

자리수가 1인 방에 통전이 되어 1이 쓰여져 있으면 그것은 PLC에서 1로 인식을하게 되고

 

자리수가 2인 방에 통전이 되어 1이 쓰여져 있으면 그것은 PLC에서 2로 인식을하게 됩니다.

 

왜 헷갈리게 방마다 자리수 값을 다르게 했느냐구요?

 

PLC는 방의 호수를 지정해주지 않게되면 어느방에 1이 쓰인지 모르기 때문이죠.

 

최우측 2번째와 4번째 방에 1이라는 수치를 저장하고 싶을때,

 

PLC는 10이라는 수치를 기억함으로써 최우측 2번째와 4번째에 1이 쓰였다고 인식할 수 있는 것이죠. 

(각자리수가 가지고 있는 고유한 수치가 다르기 때문)

 

말이 이해가 어려울 수 있는데 한번 곰곰히 생각해보세요.

 

이해가 안가면 댓글남겨주시구요.

 

또말이 길어졌네요.

 

본론으로 돌아옵시다.

 

P0를 누르면 D0라는 방에 0000,0000,0000,1010이 쓰여있어야 하겠죠?

 

XG-5000에는 해당수치를 확인할 수 있는 모니터 기능이 있습니다.

 

아래 그림을 참고해서 수치를 확인해보세요.

 

시뮬레이션 절차는 기존에 하던 방법과 동일하나 

 

데이터 레지스터에 쓰인 값들을 확인하기 위해서 디바이스 모니터를 더 띄워야 합니다.

 

 

모니터창을 보니 좌측에 각각의 데이터 레지스터의 이름들이 나열되어 있죠?

 

 

우리는 D0라는 방에 값을 저장했으니 D를 클릭해봅시다.

 

P0를 누르기전 D0의 상태가 0000,0000,0000,0000이 맞는지를 확인해보세요.

 

그다음은 P0를 눌러 0000,0000,0000,1010가 맞는지를 확인할겁니다.

 

 

어떤가요? 수치가 바뀌는 것이 확인 가능하시죠?

 

다음은 P1을 눌러 다시 D0 방에 0이 들어가지는지를 확인해봅시다

 

 

다음으로 눈여겨 볼것은 D0.1번방 D0.3번방이 어느시점에 통전되느냐를 봐보세요.

 

해당 방이 통전되면 P20, P21이 켜지겠죠.

 

D0.1과 D0.3이 앞서 말씀드렸던 아래 표입니다.

 

다음 예제를 살펴봅시다.

 

 

앞서 말씀드린대로 각 버튼을 눌러서 시스템 모니터링이 어떻게 변화하는지 잘 살펴보세요.

 

스스로 깨닫는것이 중요합니다.

 

그다음 예제를 봅시다.

 

레더는 다음과 같아요.

 

 

시뮬레이션 결과를 보세요.

 

 

P0를 누를때마다 카운트 수치가 증가하고

 

 

카운트 수치가 1일때 P20

카운트 수치가 2일때 P21

...

순으로 차례대로 점등하는지를 확인해보는 겁니다.

 

 

 

다음은 설명 드릴 것은 INC(P), DEC(P)입니다.

 

매우 간단합니다.

 

-INC(P)는 1씩증가, DEC(P)는 1씩감소하는 것이죠.

 

예제를 통해 바로 익혀보도록 합시다.

 

P0를 누르면 D0가 빠른속도로 증가할 겁니다.

 

펄스 입력을 인가한 것이 아니라 단순 A접점 신호를 주었기 때문이죠.

 

또한, P1을 누르면 D0에 저장된 수치가 빠르게 감소할 겁니다.

 

마찬가지로 누르고 있는 동안엔 계속 수치가 감소합니다.

 

 

 

하지만... P2를 한번 눌러봅시다.

 

INCP라는 것은 Increment Pulse라는 뜻과 일맥상통하며 그 의미는 상승엣지가 검출되면 데이터레지스터 값이 1증가

 

한다 입니다.

 

시뮬레이션을 돌려보면 위 그림처럼 데이터 레지스터값이 1증가했음을 확인할 수 있죠.

 

DECP는 그반대의 의미이겠죠.

 

 

다음으로 P4를 눌러보기전에 한가지 개념을 더 짚고 넘어가겠습니다.

 

오버플로우라는 개념에대해서요.

 

PLC는 과연 1과 0이라는 방(메모리)을 몇개를 가지고 있을까요?

 

앞에서 이미 살펴보았듯 총 16개의 비트를 가지고 있었음을 확인했었죠.

 

통상 16번째 자리수는 1과 0으로 표현되는 수치가 부호의 의미를 나타낸다고 보시면 됩니다.

 

0이면 양수로 기억하고 1이면 음수로 기억하는 PLC만의 기억방법이죠.

 

흔히들 최상위 비트를 부호를 나타내는 부호비트라고 칭하기도 합니다. 

 

실제로는 부호비트는 부호가 무엇이냐의 의미를 가지고 있을뿐 수치적인 의미로는 사용되지 않아요.

 

정리하면, PLC라는 녀석은 16개의 방중 가장 호수가 큰 방을 부호의 의미로 사용하고 나머지 방은

 

1과 0이 어떤식으로 저장되었는지 확인하기 위해 사용하는 것이지요.

 

그래서 우리가 16비트로 나타낼수 있는 수치의 범위는 

 

- 2^15  부터 2^15 - 1 까지 사용할 수 있는것이지요.

 

이를 계산하면 -32768에서 32767이라는 수치를 기억할 수 있는것이네요.

 

P4버튼을 2번 툭툭 건드리면 -32768로 되돌아가는 것을 확인할 수 있을겁니다.

 

왜냐면 방이 그게 끝인거거든요.

 

PLC의 한계는 그게 마지노선이라는 뜻이죠.

반대로 작동시켜 수치를 줄여보아도 똑같이 언더플로우가 발생하여 -32768에서 32767로 넘어가는 것을

 

보실 수 있습니다.

여기까지 모두 익혀보셧나요?

 

다시 데이터를 초기화하여 마무리 지읍시다.

 

 

 

우리는 간략히 MOV(P) 명령에 대해서만 알아보았는데 사실은 종류가 많아요.

 

기타 명령어는 일일히 설명드리는 것보다는 각각 예제를 드리고 시뮬레이션 그림을 보여드릴테니

 

실제로 실험해보시면서 어떤용도로 사용되는지 직접 감을 잡아보세요.

 

 

1. DMOV(P)

 

DMOV라는 녀석은 32비트를 이동시켜줍니다.

 

특이한 부분을 좀 설명을 드리자면 [DMOVP h12121212 D00000]의

 

(20.6.4 수정)

 

h12121212 에 대한 내용인데요 h는 hexadecimal의 약자로서 16진수를 의미합니다.

 

h12121212라는 녀석은 한마디로 4비트가 8개가 붙어있는 구조인것인데요

 

h뒤의 문구 각각이 4개의 비트로 이루어집니다 즉.

 

0001/0010/ 0001/0010/ 0001/0010/ 0001/0010/로 표현이 되겠지요.

 

말로만 들어선 이해가 어려우니 쪼개서 봅시다.

 

이해가 안가시는 분은 댓글 남겨주시구요.

 

특이한점은 일반 비교연산자 사용법과는 차이가있죠

 

[= D00010 2147483647]명령창에 이런식으로 사용해보면 오퍼랜드 초과가 뜨게됩니다. 

 

[D= D00010 2147483647]로 쓰면 아무 에러를 확인할 수 없죠.

 

바로 32비트 전용 비교연산자라고 생각하시면 되는거죠. 

 

 

 

2. GMOV(P)

 

GMOV라는 녀석은 그룹 무빙입니다.

 

어떻게 이동되는지 직접 레더를보고 시뮬레이션을 돌려서 익혀보세요.

D00000에 저장된 100, D00001에 저장된200, D00002에 저장된300 총 3개의 수치들이

 

D00010, D00011, D00012에 똑같이 복사되었네요. 

 

그렇습니다.

 

[GMOVP D0 D10 3]의 의미는

 

D00000번 D00001번 D00002번 총 3개를 D00010, D00011, D00012에 복사하라는 의미에요

 

D0는 어디서 복사를 시작할지에 대한 시작점의 위치를 나타내고,

 

D10은 어디서부터 복사된 값을 붙여넣을지에 대한 시작점의 위치를 나타내며

 

가장 마지막 3의 의미는 시작점으로부터 차례대로 몇개의 16비트 수치를 복사하겠느냐 입니다.

 

 

 

3. FMOV(P)

 

FMOV라는 녀석도 GMOV와 비슷하게 복사하는 역할을 수행합니다. 

 

하지만 차이점이 존재하지요. 어떤 차이점인지 시뮬레이션을 보고 한번 익혀봅시다.

 

GMOV는 그룹단위로 복사가 됬는데 FMOV는 한개의 데이터를 3개의 방에 똑같이 뿌려주는 효과를 가지고 있네요.

 

즉 앞서 살펴본 [GMOVP D0 D10 3]의 의미는

 

D00000번 D00001번 D00002번 총 3개를 D00010, D00011, D00012에 복사하라는 의미이지만

 

FMOV는

 

[FMOVP D0 D10 3]의 의미는

 

D00000번 에 저장된 값을 D00010, D00011, D00012에 동일하게 복사하라는 의미에요.

 

쉽죠??

 

마찬가지로

 

[FMOVP D0 D10 3]

 

D0는 복사를 어디서 시작할지 시작점을 나타내고

 

D10은 복사값을 어느위치로 붙여넣을지에 대한 초기정보

 

3이라는 수치는 D10으로부터 시작하여 몇개만큼의 방에 저장할지를 나타내는 것이에요.

 

다시말해서 3이라는 수치는 D10, D11, D12만큼을 나타내는 것이고

 

4라는 수치가 들어가있다면 D10, D11, D12, D13만큼을 나타내는 것이죠.

 

차이점을 잘 이해해보세요.

 

4.CMOV(P)

 

CMOV라는 놈은 너무쉬워요. 반전한다는 뜻입니다.

 

 

크리스마스 트리를 만들수 있겠네요..

 

5.BMOV(P)

 

다음은 BMOV라는 녀석인데 개념이 조금 이해하기 난해할 수 있어요.

 

먼저 P0를 눌러 10이라는 수치를 입력시키고.

 

P1을 누르면 어떤일이 생기는지 보자구요.

??? 이해할 수 없는 결과가 나왔네요. 10이 갑자기 40이 되다니.

 

결론을 말씀드려볼게요.

 

일단 [BMOVP D0 D1 h1303]

 

D0는 복사할 녀석의 시작점, D1은 복사해서 붙여넣을 시작점.

 

h1303의 각각의 의미

 

1000의 자리수: 원본 시작 비트수

100의 자리수: 목적지 시작 비트수

10의 자리수: 의미 없음!

1의 자리수: 복사할 비트의 갯수

 

앞의 GMOV나 FMOV와는 다르게

 

복사되어질 첫주소도 지정할 수 있다는 점이 독특하죠.

 

아래를 보면 이해는 빼박이에요

왜 10이 40이 되었는지가 해결되었네요.

 

 

 

 

6.SMOV(P)

 

SMOVP는 겁나게 간단하다구요~

 

아스키코드만 잘이해하고 있으면 되요.

 

아스키코드는 다음과 같이 정의되어 있어요.

 

어려운거 다집어치우시고. 각각 숫자를 인간의 언어와 1대1 대응시켜놨다고 보면됩니다.

 

어려운말은 집어치웁시다.

 

아스키코드는 PLC와 인간 언어의 번역기능을 해주는 낱말사전 정도로 이해하면됩니다

 

50을 PLC에 입력시키면 인간의 언어로 2라는 숫자가 짠하고 나타나겠죠.

 

그게 답니다.

 

별거없죠.

 

 

오늘 배운내용이 조금 방대해서 사실 걱정이 많이됩니다.

 

제가 제대로 설명을한 것인지...

 

하지만 독자님들께서는 모두 이런 누추한 블로그를 검색해셔 들어오셨을거고

 

꼼꼼히 읽어보시고 자기 지식으로 만들 수 있는 능력을 가졌다고 생각합니다.

 

다음 시간에는 위 명령어를 충분히 숙지하셨다는 가정하에 QUESET를 드리고 함께 고민해보는 시간을 가져보도록 

 

하겠습니다.

 

그럼 한주간 잘지내시고 다시뵙도록 하겠습니다.

반응형
블로그 이미지

Lubly0104

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

,
반응형

안녕하세요.

 

공돌이 직딩입니다.

 

지난주에는 포스팅이 너무길어서 이번주는 좀 쉬어가려고 합니다.

 

이번주는 XG-5000내의 SET기능과 RESET 기능에 대해서 한번 알아볼건데요

 

기존에 배웠던 자기유지회로 개념과 비교하면서 어떤부분이 다른지 한번 살펴보도록 하겠습니다.

 

먼저 기존의 자기유지 회로를 XG-5000으로 한번 그려볼까요?

 

 

이전에 개념에 대해서 말씀드렸듯 방안의 형광등을 키기 위해서 우리는 스위치를 계속 누르고 있을 수 없다하였습니다.

 

그래서 추가된 것이 A접점을 병렬로 연결하여, 스위치에서 손을 떼어도 지속적으로 통전될 수 있도록 한다고 하였죠.

 

하지만 우리가 실제로 산업에 사용되는 레더를 코딩하다보면 가끔식 A접점을 추가하여 자기유지를 걸어주기가

 

귀찮은 경우들이 종종 있습니다.

 

그래서 SET, RESET코일이라는 개념이 등장하게 됩니다.

 

결론말 말하겠습니다. SET 코일은 스스로 자기유지가 가능합니다. RESET 코일이 통전되기전까지는요.

 

즉, SET코일에 통전이 되면 저절로 자기유지가 걸리고 RESET코일을 통전시키기 전까지 자기유지가 걸린다는 것이죠.

 

산업에서 사용되는 수천줄의 래더를 코딩하다 보면 한줄한줄 절약하는 것이 스캐닝 속도도 영향을 줄 것이고,

 

디버깅도 더 수월하겠죠(눈으로 쳐다봐야 하는 부분이 줄게되니까요).

 

아주 간단한 개념이죠?

 

실제로 이러한 기능은 우리가 아주 애기때(?물론 대학생) 디지털논리회로를 배우면서(아물론 전기과.)

 

플립플롭이라는 것을 배웠을때 배운것으로 지금은 당연히 까먹었겠죠.

 

래더를 코딩할때는 몰라도 전혀 상관은 없지만 우리는 그래도 엔지니어니까 배경지식을 넓혀봅시다.

 

플립플롭의 한 종류인 래치는 한 비트의 정보를 입력 데이터가 바뀌기까지 계속 유지하고 있는 소자를 말합니다.

 

확실히 위키피디아가 이런내용에 대한 설명은 빵빵하네요

 

SR 래치는 가장 간단한 순차회로이다. 여기서 S(set)는 출력 1을, R(reset)은 출력 0으로 되도록 한다는 의미이다. NOR 논리 게이트를 교차 되먹임 입력을 통해 만들어 진다. 저장된 현재 상태출력은 Q로 표시한다.

S과 R 입력이 모두 0이면, Q와 Q 출력 상태가 되먹임(feedback) 입력되어 이전상태가 유지된다. 만약 S (Set)가 H이고, R (Reset)이 L이면, 출력 Q는 H로 된다. 만약 R이 H이고 S가 L로 입력되면, 출력 Q는 L 상태가 된다.

SR 래치 동작[1]특성표여기표

S R Qnext 동작 Q Qnext S R
0 0 Q 상태유지 0 0 0 X
0 1 0 reset 0 1 1 0
1 0 1 set 1 0 0 1
1 1 X 사용제한 1 1 X 0

 

 

즉 Set, Reset 제어는 이런 복잡하고 알기도 싫은 귀찮은 논리회로를 코일 한방으로 해결할 수 있도록 해준

 

아주 고마운 회로인 것이죠.

 

여기까지 정리해볼게요

 

SET 코일은 통전이 되는경우 즉시 자기유지상태이며 RESET 코일에 통전이 되면 자기유지가 해제된다.

 

그럼 XG-5000에서는 SET 코일과 RESET 코일을 어떻게 표현할까요?

 

아래 그림을 참조해주세요

 

하단메뉴에 형광펜이 쳐져있는 부분입니다.

 

Set 코일의 단축키는 Shift + F3

Reset 코일의 단축키는 Shift + F4

 

입니다.

 

 

자기유지회로를 Set, Reset으로 바꿔주면 래더가 어떻게 변화하는지 간단한 예제를 봅시다.

 

위 회로에서 P0를 누르면 코일이 자기유지회로처럼 별도의 병렬 a접점없이 자기가 유지되는 것을

 

확인할 수 있어요.

 

이렇듯 SET이 편리하기도 하지만 자기유지를 해제하기 위해서 리셋코일 명령을 꼭 주어야 합니다.

 

이것에 익숙하지 않는 사람들은 프로그래밍이 꼬여버리게 됩니다.

 

 

두 가지 자기유지 방법중 편한것을 사용하시면 됩니다.

 

한 가지 참고사항을 말씀드리면

 

Set, Reset도 마찬가지로 펄스 접점을 사용하여 신호를 주는것을 추천드립니다.

 

 

간단한 프로그램에서는 펄스접점을 주지 않아도 동작에는 전혀 문제가 없을겁니다.

 

하지만 로직이 복잡해지고 래더간 연관성이 짙어지는 경우 1스캔 주기동안만 신호를 인가할 것이냐

(펄스로 신호를 주는경우 PLC가 회로를 1번 스캐닝 할때에 한해 ON)

 

혹은 여러스캔동안 신호를 살릴 것이냐가 아주 큰 관건입니다.

 

펄스로 신호를 주냐 단순 접점으로 신호를 주냐에 따라서 얘기치 못한 오류를 초래할 수 있습니다.

 

후한을 없애기 위해서 단순접점이 아닌 펄스로 신호를 주는것을 추천드립니다.

 

왜 그래야만 하냐고 물어보면 저도 사실은 딱집어서 설명은 못하겟습니다...

 

하지만 실제로 업무를 하면서 펄스 접점을 주었을때 확실히 디버깅 에러가 줄더군요.

 

참고바랍니다.

 

 

이번주 이론은 이게 끝입니다.

 

 

지난주는 빡시게 달렸으니까 이번주는 이개념만 꽉잡고 Quest로 실력을 쌓아봅시다.

 

Quest1.

 

 

P0은 시작버튼, P1은 중지버튼입니다.

 

위 시퀀스에 맞게 동작하는 회로를 Set, Reset 회로를 사용하여 구성해보세요.

 

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

 

 

바로 결과모습으로 넘어가요. 별거없네요.

 

궁금한거 있으시면 댓글 달아주세요.

 

다음은 시뮬레이션 결과창입니다.

 

P0를 누르면 계속 램프가 1초 단위로 꺼졌다 켜졌다하면서 반복되는 것을

 

확인할 수 있어요.

 

 

Quest2.

 

일끝나고 엘리베이터를 타고 퇴근중 입니다.

 

1층은 3m 높이이며 권상기(상승방향-P20, 하강방향-P21)은 초속 1.5m를 이동합니다 엘리베이터의 높이는 3m입니다.

 

 

호출버튼은 다음과 같습니다

 

1층 P1

2층 P2

3층 P3

4층 P4

5층 P5

 

엘리베이터는 스스로 층수를 기억하기 위해 각층마다 설치된 램프가 켜져있는 수를 인식합니다.

 

1층에는 P11

2층에는 P12

3층에는 P13 

4층에는 P14

5층에는 P15

 

현재 엘리베이터가 2층에 있다면 엘리베이터가 센서를 통해 도그를 감지하여 P12 램프가 점등되어 있겠죠

 

엘리베이터가 현재위치를 인식하여 호출버튼을 눌렀을때 각층으로 이동하는 로직을 짜보세요..

 

완성된 레더는 아래와 같습니다

 

위의 시뮬레이션을 상상실험을 하는데에는 다소 무리가 따릅니다.

 

그래도 한번 노력해보자구요. 머리속으로 상상해보는 겁니다.

 

각층수를 감지하는 램프는 시뮬레이션시 수동으로 우리가 눌러줄거에요.

 

램프가 눌리는 수만큼 엘리베이터는 해당위치에 존재하고 있다고 가정하고 말이죠. 

 

실제로 시뮬레이션을 돌려보죠

 

5층에 있는 사람A가 2층에 있는 엘리베이터를 호출하기 위해 P5를 눌렀다고 가정해봅시다.

 

그럼 권상기인 P20은 2층에서 5층으로 이동하기 위해 총 P20이 6초동안 회전해야 하는 것이네요?

 

즉 바꿔말하면 타이머 6초동안 권상기가 회전하다가 멈춰야 된다는 것이에요.

 

1초에 권상기가 1.5m를 가니까요.

 

먼저 엘리베이터의 현위치를 인식시켜주기 위하여 P12버튼을 눌러준 상태를 만들어봅시다.

 

, 이상태에서 P5가 눌리면 P20이 6초동안 회전해야하는 것입니다.

 

실제 엘리베이터는 이것보다 훨씬더 고급 로직에 의하여 움직이게 됩니다. 

 

위에서 예를들었던 Lamp대신 Dog라는 놈을 승강로 가이드 각층에 설치해놓고 말굽센서로 인식하여

 

위치를 제어하기도 하고

 

절대위치센서나 Absolute 엔코더를 사용하여 위치를 인식하기도 합니다.

 

위는 한가지 예를 든것에 지나지 않아요.

 

그림이 잘안보여서 첨부파일을 넣을게요 참고해보세요~

SET_RESET QUEST2.pdf
0.11MB

 

Quest3.

 

보행자용 신호등이 있어요.

 

램프는 P20(초록불), P21(빨간불) 두 종류가 있습니다.

 

기본적으로 P20(초록불)은 20초동안 점등되며 P21(빨간불)은 30초동안 점등됩니다.

 

다만, P20(초록불)은 총 20초중 15초 동안은 완전 점등해있고 나머지 5초가 남았을때에는 1초 간격으로 점등합니다. 

 

 

이 문제를 SET, RESET 개념으로 해결해보세요.

 

지난주보다는 내용이 쉽죠?(!)??

 

완성된 래더를 보여드릴게요.

 

 

시뮬레이션도 바로 돌려봅시다.

 

문제에 의한 시퀀스대로 동작하면 성공입니다.

 

 

이번주부터는 태풍이 올라온다고 합니다.

 

근무중 멘탈과 같이 날라가지 않도록 정신꼭 붙들어 맵시다.

 

독자여러분 이번주도 수고하셨습니다.

 

다음주에 다시돌아올게요

 

 

 

 

 

 

반응형
블로그 이미지

Lubly0104

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

,