\ 전기 엔지니어의 꿈 :: 15. BIN/BCD, 반전명령, 특수릴레이, 래치의 응용
반응형

안녕하세요 공직자입니다.

 

지난주에 이어서 이번주는 퀘스트를 들고왔는데요.

 

얘네들을 문제로 내려니 머리가 넘아프네요.

 

문제는 푸는거보다 내는게 더어려운거 같아요....

 

더불어 실제 PLC가 존재하지 않아 더 자세하게 설명을 못드려서 늘 마음에 걸리네요.

 

부족한 부분을 너그럽게 이해해주시길 바라며... 묵묵히 시작하겠습니다.

 

QUEST1

 

 

디스플레이용 7-SEGMENT가 있습니다.

 

 

바로 위 그림을 7-SEGMENT라고 하는데요.

 

흔히 생각하시는 전자시계를 생각하시면 되겠습니다.

 

물론 이 비싼 PLC를 가지고 전자시계만 구현할일은 없습니다.

 

개념 설명을 위해 소개해드리는 것으로 공학적인 관점에서의 접근은 제외하겠습니다,

 

시계를 구현하기 위해 2가지 단계로 래더를 짤거에요.

 

첫 번째 단계는 단순한 시간 증가개념을 구현하는 것이고

 

두 번째 단계는 증가한 시간에 대한 7-SEGMENT상의 출력로직을 구현하는 것이에요.

 

먼저 시계를 구현하기 위해 첫 번재 단계인 기본 로직을 한번 구현해보겠습니다.

 

시계를 구현하기 위해서 우리는 타이머를 통하여 레더링을 해야합니다.

 

먼저 1초간격으로 증가하는 타이머를 구현한뒤 최우측 1의 자리(분단위 유의)부터 증가하는 로직을 만들어보겠습니다. 

 

데이터 레지스터를 정의하면, D1은 시간이 저장되고 D0에는 분이 저장됩니다.

 

AM과 PM의 별도의 구분이 없기에 숫자는 00:00 부터 24:00까지 표현이 되겠습니다.

 

QUEST2

 

그다음 문제는 QUEST1과 이어지는 것으로 생각해주시구요.

 

앞에서 저장한 시간을 바탕으로 7-SEGMENT에 구현을 해보려고 합니다.

 

예를들어 D0에 10 D1에 13이 저장되었다면

 

13:10에 해당하는 7-SEGMENT가 구현됩니다.

 

총 7-SEGMENT는 4개가 되겠습니다.

 

가운데 세미콜론은 고려치 않는걸로 하겠습니다.

 

7-SEGMENT에 대해 간단히 설명을 드리자면 어느 비트를 전기적으로 통전시키느냐에 따라서 불이

 

들어오는 위치가 다른데요.

 

아래그림을 참고해보시면 이해가 되실 겁니다.

 

이미지 출처:https://www.hackerschool.org/Sub_Html/HS_University/HardwareHacking/27.html

우리가 사용하는 십진수를 표현하기 위해서

 

무의미한 LED 막대기를 적절하게 조합하여 마치 숫자처럼 보이도록 만든것이지요.

 

앞서 본 QUEST1에서 D0과 D1에 시간을 넣어주었다면

 

이번엔 7-Segment상에서 표현할 숫자별 통전 비트와 수치를 저장하는 과정입니다. 

 

데이터레지스터 D2에는 분침 세그먼트 비트의 통전값들이 저장됩니다.

(a, b, c, d, e, f, g, h 비트의 통전여부가 저장됩니다.)

 

또한 데이터레지스터 D3에는 시침 세그먼트 비트의 통전값들이 저장됩니다.

 

 

여기서 상황설정을 하나 해볼게요.

 

여기서 어느 자리수이건 만약 b와 e에 해당하는 LED가 안들어온다고 해봅시다.

 

엔지니어는 여기서 7-SEGMENT 자체의 수명이 다한줄알고 교체해봤으나 증상이 똑같습니다.

 

7-SEGMENT 자체의 문제가 아니라 아마도 회로상 문제가 생긴것 같습니다.

 

이문제를 해결하려면 보드의 각 비트에 해당하는 회로를 점검해야 할 것 같습니다.

 

이를 위해 D2, D3레지스터의 수치를 보고 각 회로의 망가짐 유무를 판단코자합니다.

 

문제가 잘 이해가 안가신다구요???

 

예를 들어볼까요?

 

7-Segment상 분침 '59'라는 수치를 온전하게 나타내기 위해서는 아래와 같이 되어야 할겁니다.

 

 

여기서 노란색은 분침중 10의 자리수이고 붉은색은 분침중 1의 자리수입니다.

 

7-Segment상 59라는 수치를 인식시키기 위해서는 데이터레지스터 속에

 

D2=28,015(1+2+4+8+32+64+256+1,024+2,048+8,192+16,384) 가 들어가있겠죠

 

거꾸로 뒤집어 말하면 망가진 세그먼트를 고치기 위해 데이터레지스터 D2 값인 28,015라는 숫자를 보고

 

이를 2진수로 변환하여야만 어느 회로가 통전이 되고 있고... 어느회로가 망가졌는지 확인을 할 수 있다는 것이지요.

 

자. 정리하여 생각해봅시다.

 

59라는 수치를 7-SEGMENT로 표현할때 b와 e가 망가져있다면...

 

위 표에서 노란색 부분은 원래 b와 e가 '0'이라 정상 표시되겠지만

 

붉은색 부분에 해당하는 b와 e가 각각 1과 0이어야 함에도 불구하고 모두 0으로 표현되어

 

7-Segment 수치가 이상하게 표현이 된다는 사실을 알 수 있는 것이죠.

 

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

 

문제 a). D0와 D1으로부터 시간을 받아와 7-SEGMENT상 출력될 수 있는 로직을 구현해보시고.

           (D0와 D1은 각각 D2와 D3에 매칭되어야 함)

 

문제 b). BIN 혹은 BCD를 활용, D2와 D3를 적절하게 변환하여 엔지니어 입장에서 유지보수가 편하도록

           모듈 로직을 만들어보세요. 필요에 따라 레지스터의 추가사용을 허용합니다. 

           [물론 디바이스 모니터에서 각 비트 통전여부를 확인할 수 있긴 합니다.]

 

문제 c). 2진수 표현으로 저장할때와 BCD로 저장하는 경우 각각 어떤 장점과 단점이 있는지

           생각해보시기 바랍니다.

 

 

 

QUEST3

 

Nor, Nand, Exclusive OR 회로와 Exclusive NOR 회로를 아시나요?

 

전기전자 전공하신분은 디지털 논리라는 과목을 이수하시면서 아주 익숙하게 알고 계시겠죠?

(카르노맵 뭐시기... 이런거 많이 배우셨죠?... 물론 다까먹으셨을 확률이 매우높겠지만요. 제기준입니다)

 

이걸 공부해보면... AND gate나 OR gate, Not gate가지고 장난질을 해댑니다.

 

전자와 전기의 가장 기초적인 논리를 기술한 것으로 전기쟁이들은 꼭알아야 하는 내용인데요.

 

이걸  구현하실 수 있다는 건 전린이(전기쟁이 + 어린이, 물론 용어는 제가만들었습니다.)의 통과의례를 거친거죠.

 

이걸 PLC로 구현해볼겁니다. 

 

전기 전자를 전공하지 않으신 분들을 위해 간단히 설명을 드리겠습니다.

 

Or 회로와 And 회로는 0과 1의 조합으로 어떤 결과값을 만들어낼 수 있을까요?

 

 

OR 진리표

 

OR라는건 '+' 인데 일반 수학과는 다릅니다

 

0+0 = 0

0+1 = 1

1+0 = 1

1+1 = 2? 아닙니다. 1+1=1 입니다.

 

매우매우 중요합니다. 왜 1+1=1이냐구요?

 

여기서 말하는 1은 숫자의 개념이 아닙니다. 전기를 통하고 안통하고의 문제인거죠

 

1+1=1이라는 의미는 통전한 것에 다시 통전한것은 결국 전기를 통전한것과 같다.

 

대강 이런의미입니다. 말장난같네요

 

그럼 AND 회로를 볼까요?

 

AND 회로

AND라는 녀석은 얼핏 일반 수학과 비슷해보이긴 합니다.

 

0*0 = 0

0*1 = 0

1*0 = 0

1*1 = 1

 

여기서 1과 0은 숫자의 개념이 아니라 켜지고 꺼지고의 개념이라는 것을 유념하시기 바랍니다.

 

여기서 NOT을 한다는건 다 뒤집는다는 의미입니다.

 

이것의 의미는 반전명령에서 이미 설명드린바 있으니 그전 포스팅을 참고해주시고.

 

자세한 의미해석에 대해서는 차주 답안 해설과 함께 찾아들고 오겠습니다.

 

문제를 풀기위해 나는 이것을 지금 당장 알아야 하겠다.

 

다음주까지 못기다리겠다. 하시는 분들은

 

구글에 Exclusive OR, Exclusive NOR를 쳐보시면 훌륭한 분들이 이미 쭈루륵 포스팅을

 

해놓으셨을테니 이를 참고해보시면 도움이 될 듯 합니다.

 

 

 

문제 a).

 

반전 명령을 통하여 NOR 회로를 구현해보세요.

 

NOR는 NOT OR의 줄임말이며 연산결과가 완전히 반대로 됩니다.

 

다음진리표를 참고바랍니다.

 

NOR 회로

NOR 회로의 수식은 다음과 같습니다

 

F=(X+Y)' = X' * Y'

 

문제 b).

 

다음문제는 NAND 회로를 구현해보겠습니다.

 

진리표 참조바랍니다.

 

NAND 회로

NAND 회로의 수식은 다음과 같습니다

 

F=(X*Y)' = X' + Y'

 

문제 c).

 

다음은 Exclusive OR 회로인데요

 

해석하자면 배타적 논리합이네요. 말이 어렵네요.

 

하지만 진리표와 논리식은 별거 없습니다.

 

아래를 참고하여 회로를 구현해주세요.

 

Exclusive OR

F = A' * B + A * B'

 

문제 d).

 

Exclusive NOR는 Exclusive OR 회로를 반전명령 한것으로 이해하시면 됩니다.

 

가장먼저 수식을 기억해주시고 진리표로 접근하시면서 이해하시는게 더 효과적일 거에요.

 

Exclusive NOR

 

F = (A+B') * (A'+B)

 

 

QUEST4

 

C언어에서 GOTO 명령을 본적이 있으신가요?

 

절차에 따라 순서대로 딱딱 이루어지는 스캐닝 과정을 인터럽트라든지 분기명령을 통해

 

뛰어넘곤 하지요?

 

PLC도 이런기능이 있답니다.

 

이런 명령은 이런경우에 쓸수 있겠습니다.

 

특정 조건을 주어 해당조건을 만족하기 전까지는 순차 동작하다가 일정조건이 되면

 

뛰어넘게끔 만드는거죠.

 

본격적으로 문제를 한번 내보겠습니다.

 

발권기가 선착순으로 10등까지 행운권을 발권하는데요

 

1부터 10까지는 계속 증가하면서 P20 모터가 동작하여

 

발권이 되지만

 

11등 부터는 P20은 정지하고 프로그램을 종료하는 것이죠

 

문제 풀이를 위해 힌트를 드리면...

 

명령어는 2가지를 사용해야하는데요

 

사용법과 의미는 다음과 같습니다.

 

[JMP LABEL] -> LABEL 위치로 점프.

 

[LABEL]-> 점프해서 위치할 시작  지점.

 

입니다. 한번 구현해보세요.

 

QUEST5

 

특수릴레이 명령 관련해서 이전에 안써본 명령을 XGK메뉴얼을 보고 찾아 쓰도록 해볼게요.

 

상황은 이래요.

 

물류자동화 공장내에 운전하고 있는 자동화 로봇이

 

에러가 났어요.

 

에러가 나는 것은 실제로 에러관련 플래그가 발생하겠으나

 

우리는 P0라는 감지부로부터 에러의 발생을 감지한다고 가정하겠습니다.

 

엔지니어가 현장에 도착했는데 언제부터 어떤 에러들이 났었는지 그 이력이 궁금한거죠.

 

에러가 발생했을 때의 시간 궁금합니다.

 

PLC는 특수명령중 시간을 넘겨주는 명령이 있는데요

 

[DATERD D0]

 

명령입니다.

 

이것을 잘 활용하셔서 문제를 풀어보세요

 

단, 에러는 여러번 발생할 수 있으며

 

최대 5개의 에러발생 시각이 기록되어지고 선입 선출 방식으로 데이터가 새로 채워집니다.

 

 

QUEST6

 

래치의 개념에 대해서 설명드리면서 공장에서 이루어지는 프레싱 기기의 횟수 기억 기능에 대해서 설명드린적

 

있습니다.

 

공장에 300번 프레싱을 한뒤 기구적인 수명을 고려하여 유지보수 하는 상황인데요.

 

300번 프레싱을 하기위해서 물리적으로 많은 시간을 필요로 하고 공장은 주말마다 쉬기 때문에

 

이때는 전원이 차단되어야 합니다.

 

바로 그 프레싱 기계를 구현해보도록 하겠습니다.

 

P0: 공정시작 버튼

P1: 공정중지 버튼

D0: C0값이 저장되며 래칭기능을 유지한다

C0: 프레싱동작에 대한 카운팅 갯수 (300개 진입시 초기화 되고 C0는 20ms마다 D0에 저장된다.)

P09: 프레싱기구 모터 프레싱 감지센서

 

말이 어렵지 풀어보시면 별거 아닙니다.

 

PLC라는 놈이 어렵다고 느껴지는 것은 사실은 회로는 겁나게 단순한데 '아 이게 그거야?'를 깨우치는 과정이 어려운거죠.

 

여러분은 똑똑하시니까 잘풀어내실 수 있으시겠죠?

 

저는 담주에 해설을 가지고 찾아뵙겠습니다.

 

이상 공직자였습니다.

 

반응형
블로그 이미지

Lubly0104

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

,