\ 전기 엔지니어의 꿈 :: 전기 엔지니어의 꿈
반응형

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

 

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

 

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

 

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

 

더불어 실제 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

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

,
반응형

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

 

지난시간에 이어 포스팅 이어가보겠습니다.

 

시작전에 잠깐 다른소리좀 하면.

 

오늘 제가 넣어놓은 종목이 떨어진 관계로 굉장히 마음이 꿍해있네요.

 

바닥에 들어간줄 알았는데 수위가 점점올라가서 무릎까지 찬거같아요...;;;

 

아마 오늘은 포스팅이 길지 않을것 같아요... ㅎㅎ 오늘은 제멘탈이 살짝 나간상태거든요.

 

-------------------------------------------------

 

지난시간에 특수릴레이를 설명하면서

 

트렌드모니터링이라는 것이 등장하였죠!

 

한마디로. 트렌드 모니터링이라는 것은 X축에 시간을 표시하고, Y축에 내가원하는 

 

변수(데이터리지스터, 특수릴레이, 릴레이등...)을 넣어

 

시간에 변화에 따라 스무스하게 볼 수 있는 기능입니다.

 

전기, 전자 전공하신분들은 오실로스코프라는 녀석을 보셨을 겁니다.

 

출처: https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.keysight.com%2Fko%2Fpcx-x2015004%2Foscilloscopes%3Fcc%3DKR%26lc%3Dkor&psig=AOvVaw2_shT4Q6kZIiiD6VELcJmb&ust=1594205092788000&source=images&cd=vfe&ved=0CA0QjhxqFwoTCKC2o6v7uuoCFQAAAAAdAAAAABAD

 

이 장치는 주로 PWM을 볼 때 사용합니다.

 

PWM이라는 것은 이전 포스팅의 엔코더를 설명하면서도 잘 말씀드렸었어요.

 

전압을 빠르게 주었다 뺏다 주었다 뺏다를 일정 간격으로 계속하다보면 기계는 

 

평균치의 값을 인식하게 된다고 하였었어요.

 

PWM이라는 녀석은 PLC에도 나오긴하지만 PLC 포스팅이 끝난 이후 마이컴관련 포스팅에서 더 자세하게 다루겠습니다.

 

여튼, 전기라는 것은 눈에 보이지 않기 때문에 이를 가시적으로 표현하여 사람이 현재를 진단하고

 

판단하는 기구가 필요한데요.

 

의사선생님들이 육안으로 보이지 않는 사람의 신체를 진단하기 위해 청진기를 사용하는 것과도 같다고 보시면

 

됩니다.

 

오실로스코프는 두 개의 탐침봉으로 +극과 -극을 찍어주면 되는데요.

 

주파수를 관찰할 수 있고 전압 전류치가 시간에따라 어떻게 변화하는지를 실시간으로 볼 수 있어요. 

 

굉장히 유용한 도구에요.

 

XG-5000에도 이것과 비슷한 기능이 구현되어 있어요.

 

다만, 오실로스코프처럼 아주 촘촘하게 표현은 되지 않아요.

 

예를들어 오실로스코프가 1[us]단위로 전압의 변화를 감지할 수 있다면

 

XG-5000의 트렌드 모니터링 기능은 겨우 1[ms]의 단위로 밖에 변화감지가 안되거든요.

 

 

 

그렇다면.... 본격적으로 래더링을하여 트렌드 모니터링 기능을 어떻게 쓰는건지 알아보도록 할까요?

 

XG-5000을 키시고 아래와 같이 래더링을 해주세요.

 

시뮬레이터를 돌리기 전에 이정도는 예측하실 수 있겠죠?

 

1. P0을 누르면 D0에 1이 들어가고

2. P1을 누르면 D0가 모두 0으로 채워진다.

3. P2를 누를때마다 D0가 현재값에서 1이 증가한다.

4. D0가 15가되면 P20이 점등된다.

 

이걸 트렌드모니터 기능으로 표시하면 어찌될까요?

 

트렌드모니터를 보기위해서는 먼저 컴파일이 되어있어야 합니다.

 

기존에 진행하셨던데로 시뮬레이터를 돌려주세요.

 

그리고 리본탭에 모니터를 클릭합니다.

 

 

자 이렇게 트렌드 모니터를 클릭하고 들어오시면 아래와 같은 화면을 마주하실 겁니다.

 

 

위화면에서 마우스 오른쪽버튼을 클릭하면 트렌드 설정이라는 메뉴가 나올겁니다.

 

클릭 해주시구요.

 

팝업창이 하나가 뜨죠??

 

샘플설정이라는 부분이 보이실겁니다.

 

먼저 최대 표시 샘플이라는 것은

 

그래프에서 스크롤이 되는 범위중 최대를 이야기합니다.

 

최대표시샘플 우측의 시간은 최대표시 샘플을 초단위로 표시하는 겁니다.

 

그밑에 표시되어있는 최대 유지 샘플이라는 것은 파일로 저장할 수 있는 최대 샘플수에요.

 

마찬가지로 최대유지샘플 우측의 시간은 최대유지 샘플을 초단위로 표시하는 겁니다.

 

LS산전 메뉴얼 발췌

 

디바이스설정 하위 항목에는

 

탭에보니 비트그래프, 트렌드그래프, XY그래프가 있네요~

 

사실 모니터링 기능은 몇번 써보면 쉽게 숙달할 수 있습니다.

 

LS산전의 PLC는 한글로 잘 표기가 되어있고

 

오히려 글로설명하는 것이 더 습득이 늦을 수 있겠네요

 

그래도 포인트가 되는 2가지를 설명드려보겠습니다

 

비트그래프는 소위말해 0과 1을 표시하는 기능을 지녔다 보시면 편할 것 같습니다.

 

비트라는 것은 0과 1을 이야기한다고 했었습니다.

 

0과 1만을 사용한다는것은 동작하거나 동작하지 않거나 2개중에 하나의 상태여야 하는 것이죠.

 

주로 전력스위칭 작용의 주파수를 확인하거나 모터제어를 위한 PWM을 확인할때 쓰이겠습니다.

 

LS산전 메뉴얼 발췌(비트모니터)

그에반해 트렌드 모니터링 기능은 ON과 OFF의 개념이 아니랍니다.

 

지난번 포스팅에서 설명했던 그림들이 트렌드 모니터링 기능입니다.

 

LS산전 메뉴얼 발췌(트렌드 모니터)

수치의 추이를 볼때 유용하고 시퀀스 타이밍을 한눈에 보고 확인할 수 있기 때문에 

 

매우매우 고마운 기능이라 볼 수 있겠습니다.

 

모니터링 주기라는 것은 서두에서 말씀드렸다시피 오실로스코프와 같이 아주 정밀한 간격으로 그래프를

 

표현할 수 없다보니 모니터링할 주기간격을 제시하고 거기서 사용자가 선택할 수 있게끔 제시합니다.

 

 

다시 아래화면으로 돌아옵니다.

 

 

디바이스에는 우리가 보고싶은 데이터레지스터나 릴레이명을 적어주시면 됩니다.

 

그리고 우측변에 보이는 타입 항목을 보시면...

 

변수타입을 어떻게 나타낼껀지 표현하라는 항목이지요?

 

아래표를 참고하세요.

 

 

모든 설정이 끝났다면 확인을 누르고 나옵니다.

 

그리고 다시 마우스 오른쪽 버튼을 클릭해보세요.

 

이번엔 그래프 설정메뉴로 진입해봅시다.

 

눌러보니 그래프의 색상이라든지 최대 최소값이라던지 수치적인 부분을 변경할 수 잇도록 되어있네요.

 

나머지는 하나씩 눌러보시면 무슨이야긴지 금방 이해하실 수 있기 때문에 설명은 생략하겠습니다.

 

다시 본론으로 돌아와서 앞서 레더링 한 예제를 시스템 모니터를 통하여 진행토록 하겠습니다.

 

먼저 변수항목에 D0와 P20이 입력됬는지 확인해주세요

 

아래와 같은 화면이 관찰된다면 성공입니다.

 

 

1. P0을 누르면 D0에 1이 들어가고

 

2. P1을 누르면 D0가 0으로 채워진다.

 

3. P2를 누를때마다 D0가 현재값에서 1이 증가한다.

 

 

 

4. D0가 15가되면 P20이 점등된다.

 

트렌드 모니터링을 보면 실제로 PLC를 이해하는데 아주 많은 도움이 됩니다.

 

실제로 P20이 어느 타이밍에 뛰는지 확인이 가능하기에 내가 프로그래밍 한 순서와 래더링이 적절하게

 

움직이는지 여부를 가시적으로 확인이 가능하여 능률을 올릴 수 있습니다.

 

 

 

-----------------------------------------------------------------------------------------------------------------------------------

 

 

 

다음은 래치에 관련된 개념입니다.

 

래치는 제가 이전에 말씀드렸던 플립플롭과 개념이 아주 유사합니다.

 

PLC를 처음포스팅하면서 자기유지가 얼마나 중요한지 말씀드렸었죠.

 

4차산업혁명의 키워드중 하나인 자동화를 위해서는 사람이 빠져야 되는 것이 중요한 요소이다.

 

라고 설명드린바 있습니다.

 

사람이 빠지기 위해서는 사람이 빠져있더라도 마치 사람이 있는것처럼 시스템을 속이는 것이 중요한데요.

 

자기유지 - 래치 - 플립플롭은 모두  사람이 빠져도 이전상태 유지라는 부분에서 개념상 일맥상통합니다. 

 

허나 자기유지보다 더 나아가 래치는 신박한 기능을 가지고 있어요.

 

휘발성, 비휘발성 들어보셨죠?

 

자기유지는 사람이 누르건 안누르건.... 어찌됬건 전기가 들어와야 자기 유지가 되는 반면에 래치는

 

스스로 베터리를 가지고 있어서 PLC 전원이 차단되어도 이전상태를 기억하고 있는 기능을 가지고 있어요.

(다만 래치기능을 유지하기 위한 베터리마저 방전된다면 이전상태를 기억할 수 없겠죠.)

 

여러분께 제가 묻겠습니다.

 

래치를 왜 쓸까요?

 

여러분은 왜 래치를 쓸 것 같나요?

 

한번 충분히 고민해보십시오.

 

저같으면 이런경우에 쓰겠습니다.

 

카운터 기능을 가지고 있는 프레싱 기계가 있는데 프레싱기계가 150번 동작마다 기구적인 수명이 다하여 공정상

 

불량률을 줄이고 효율적인 생산을 위하여 정기적으로 교체를 한다.

 

150번 동작시키기 위해서는 대략 3개월에 시간이 필요한데.

 

주말에는 생산라인의 휴무로 전원을 Shut down 하기 때문에 PLC 및 모든 제어기기가 OFF된다.

 

허나 전원을 껏다 다시 킨다고 150번중 75번 동장했엇던 것이 150번중 0번 동작했다고 인식하면 안되는 상황이다.

 

자. 여러분.. 저같으면 이런상황에 사용하겠습니다.

 

각자의 답을 내리셨다면 그또한 정답이 될 수 있습니다.

 

엔지니어로써 중요한건 스스로 사고할 수 있느냐 입니다.

 

그게 곧 엔지니어의 실력과 노하우가되는 것이지요.

 

XG-5000에서는 모든 데이터레지스터마다 래치기능을 부여하지는 않습니다.

 

다만 사용자의 선택여하에 따라 설정영역을 지정할 수 있는데 방법은 다음과 같습니다.

 

XG-5000 좌하단의 프로젝트 창을 봅시다.

여기서 기본 파라미터를 더블 클릭합니다.

 

기본파라미터를 클릭하고 디바이스 영역 설정 탭으로 진입하면 우리에게 익숙한 타이머 경계치가 보이고

 

그위에 래치 영역  선택이라는 항목이 보입니다.

 

설명은 참고해 보시기 바랍니다.

 

영역 1사용과 영역 2사용이 보이네요.

 

저는 영역 1사용을 클릭해보겠습니다

우측화면에 데이터 레지스터의 종류가 나오고 최소한 데이터레지스터 종류 여러개중 시작과 끝 사이에 범위내

 

레지스터는 베터리로 안전하게 저장해줄 수 있다고 하네요.

 

제가 작성한 예제의 경우에는 D0, D1, D2에 저장되는 값들은 적어도 PLC가 정전사고가 발생하였을때나 고장으로

 

인하여 잠깐 점검을 받았을 때 전원을 다시투입하여 이전값에 이어 재사용이 가능합니다.

 

오늘은 간단하게 몇몇 개념들에 대해서 설명드렸습니다.

 

다음주에는 12, 13, 14 포스팅에 관련된 QUEST를 들고 찾아뵙도록 하겠습니다.

 

다만 래치의 경우에는 시뮬레이션으로 돌리는 것에 한계가 있으므로 실제 PLC를 바탕으로 실습해보시는 것을 권장

 

합니다.

 

저는 가난하기 때문에 PLC를 실제로 구비하고 있지 않아 말로써 도움을 드립니다 ..ㅜ

 

GX-WORKS2 이후 마이컴 포스팅에서는 실제로 구현되는 동작을 같이 담아서 보여드리도록 하겠습니다.

 

오늘은 짧게 포스팅 마치겠습니다.

 

끝.

 

 

반응형
블로그 이미지

Lubly0104

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

,
반응형

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

 

오늘은 PLC내 특수릴레이라는 개념에 대해서 알아볼겁니다.

 

원래 이번시간에 래치에 대해서도 알려드리고 싶었는데 천천히 깊숙히 흡수하시라고 다음주로 미뤘습니다.

 

특수릴레이에 대해서 알아볼까요?

 

PLC는 여러가지 이유로 사람들이 평소에 필요하다고 생각해놨던 기능들에 대해서 편리하게 사용할 수 있도록

 

일명 매크로 기능을 짜놨습니다.

 

특수릴레이라는 것은 쉽게말해 C언어로 치면 함수모듈이고, 펑셩블록이라고 생각하셔도 좋습니다.

 

이전 포스팅에서 간혹 특수릴레이를 사용한적이 있었는데요.

 

F99번 상시 ON접점이 바로 그것입니다.

 

특수릴레이들은 주로 통신쪽에 많이 사용됩니다.

 

이전에 엔코더에서 설명하면서 Clock 신호가 얼마나 중요한지 설명드린바 있지요.

 

통신은 보내는 놈과 받는놈의 타이밍을 잘 맞춰야 하는데

 

이를 ladder로 구현하기 번거로워 일명 매크로를 짜놧다고 보시면 될 것 같습니다.

 

특수릴레이는 어떻게 사용하고 어떻게 구성되는지 봐볼게요.

 

먼저 XG-5000을 실행합니다.

 

빈 프로젝트를 생성하시고 'F3'을 눌러 접점을 세팅하겠습니다.

 

그럼 '변수/디바이스(T):' 네임플레이트 옆에 TEXTBOX가 보이실텐데요.

 

거기에 F99를 한번 입력해봅시다.

 

그러면 F99가 의미하는 것은 상시 ON접점이며, 그외에도 수많은

 

특수릴레이들이 사용되고 있다는 것을 알 수 있을 겁니다.

 

사실 까놓고 말해서 저도 특수릴레이의 모든 기능에 대해서 알지 못하는데요.

 

우리는 암기 시험을 보는 것이 아니기 때문에 저것을 다 외우기보다는 누군가 열심히 만들어 놓은 것을

 

잘 활용하기만하면 됩니다.

 

어떤 엔지니어도 완벽하게 모든 내용을 외우고 있지는 않습니다.

 

필요에 의해서 서적이나 공부를 통해 해법을 찾는 과정을 거치는데요.

 

모르는 내용에 대해서 얼마나 빠르게 찾아내서 문제해결에 적용할 수 있느냐가 관건인것 같습니다. 

 

즉, 필요할때마다 꺼내쓸줄 아는 능력이 모든 기능을 외우는 것보다 더 효율적이라는 것이죠.

 

PLC라는것은 끊임없이 변화하고 있으며 그 모든 내용을 머리에 놓기에는 우리가 알아야 하는 우선순위 높은

 

중요한것들이 너무 많이 있습니다. 

 

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

 

해당창의 스크롤을 위로 쭉 올려보니 F0번부터 수많은 특수 릴레이들이 존재하네요.

 

이 부분에 대해서는 독자여러분들이 필요하실때마다 연습용으로 하나씩 래더링 해보시고 직접 깨우치는 것이

 

더 효과적일 거라 생각합니다.

 

저는 수많은 특수릴레이중 몇가지를 추려서 설명드릴려고 합니다. 

 

릴레이 번호 의미 비고
F00099 상시 ON되어 있는 접점  
F0009B 1스캔만 ON  
F00090 20ms 간격으로 클락신호 발생 10ms은 High, 10ms은 Low
F00091 100ms 간격으로 클락신호 발생 50ms은 High, 50ms은 Low
F00092 200ms 간격으로 클락신호 발생 100ms은 High, 100ms은 Low
F00093 1s 간격으로 클락신호 발생 500ms은 High, 500ms은 Low
F00094 2s 간격으로 클락신호 발생 1s은 High, 1s은 Low
F00095 10s 간격으로 클락신호 발생 5s은 High, 5s은 Low
F00096 20s 간격으로 클락신호 발생 10s은 High, 10s은 Low
F00097 60s 간격으로 클락신호 발생 30s은 High, 30s은 Low

 

1. 먼저 F00099 접점에 대해서 설명드려볼게요.

 

평상시 ON인 접점입니다.

 

평상시 ON이면 있으나마나 항상 붙어있다는 이야기일텐데 왜 접점을 쓰는지 궁금하시죠.

 

저도 궁금해서 몇가지 이유를 찾아 보았습니다.

 

XGK초급 Manual(LS산전 배포) 자료에 보면 업다운카운터인 CTUD를 사용하는경우 F99를 사용하라고 명시되어 있네요.

 

근데 CTUD카운터를 사용하려고 만들었다고 하기엔 설명이 뭔가 부족해보입니다.

 

래더는 래더일뿐 실제 회로와는 다른구조라고 이해하시면 편하겠네요.

 

M0를 단순히 단락시켜 놓은 그림은 어찌보면 P24전원으로부터 상시 전원을 공급 받는것처럼 보이지만

(아래그림 참고)

실제로는 그렇지 않습니다. 

 

접점없이 그어놓은 선을 PLC는 어떻게 이해할까요?

위와 같이 이해하게 됩니다.

 

함수로 보시면 될 것 같아요. Y=X+1이라는 함수가 있는데

 

입력이 없다는건 PLC가 이해하기로 Y=? 의 상태가 되어버리는 것이지요.

 

따라서 PLC에게 상시ON되어 있는지 아닌지를 알려주어야 합니다

 

상시ON이라면 Y(M00000)=1일겁니다. 반대로 상시OFF라면 Y(M00000)=0 이겠지요. 

 

 

상시 ON접점을 사용한다면 컴파일이 되지만

 

단순히 단락회로로써 M0에 연결하는 경우는 컴파일이 안됩니다.

 

F00099의 자세한 로직에 대해서는 LS산전에 직접 의뢰하여야 하겠지만 의미가 없는 접점을 만들어 놨을리는 없겠지요.

 

2. F0009B는 한스캔만 유지라고 되어있는데 여러모로 쓸모가 많습니다.

 

한스캔이라는 것은 PLC가 래더를 해석하는 가장 첫번째 Scanning 동작을 의미합니다.

 

C언어로 치면 가장 첫번째 전역변수는 딱한번만 선언을 하듯이 비슷한 개념으로 사용된다고 보시면 됩니다.

 

주로 통신을 하는 경우 인버터와 각 통신보드간의 세팅이 제대로 되어있는지, 통신선으로 연결된 인버터의 상태는

 

정상인지 여부와 데이터레지스터의 초기값 세팅등 여러가지 용도로 활용되어질 수 있습니다. 

 

아래와 같이 래더를 작성하여 확인할 수 있는데 실제로 PLC에 프로그램을 전송한후

 

STOP에서 RUN신호롤 바꾸어주었을때 확인이 가능한 부분이라

 

시뮬레이터로는 보여드릴 수 없는 것이 아쉬운점이네요.

 

3. 다음은 Clock 신호에 대해서 알아볼거에요.

  

Clock 신호는 위에 표에서 보듯이 여러 시간스케일로 나타나집니다.

 

우리는 이 여러가지 스케일중 1초는 ON 1초는 OFF인 스캐닝 주기를 만들어 간단한 예제를 보겠습니다.

 

래더는 아래와 같습니다

 

래더의 A접점 '_T2S'는 F00094 접점으로써 1초간은 High 신호, 1초간은 Low 신호를 발생합니다.

 

출처:https://m.blog.naver.com/PostView.nhn?blogId=leecblee&logNo=221258949185&proxyReferer=https%3A%2F%2Fwww.google.com%2F

상기 그림과 같은 형태가 되겠죠?

 

 

작동시
미작동시

신기하죠?

 

단순히 접점만 주었을뿐인데 마치 타이머기능을 걸어놓은것처럼 혼자서 꺼지고 켜진답니다.

 

이런 신호들은 어느정도 정밀도를 표현하느냐에 따라서 유용할수도, 효용이 없을수도 있는데요

 

바로 앞전 예제의 1초라고 표현된 부분에 있어서 열심히 샌다고 새봤자 정확하게 1초가 아니기 때문에 그렇습니다.

 

PLC 개념에서 설명드렸듯 PLC는 입력과 출력을 스캐닝하며 리프레싱 과정을 거치게 되는데

 

이때 실제로는 측정되는 값의 오차가 발생하게 되거든요.

 

PLC는 1초를 샌다고 새지만 기구간 통신이 이루어지는 속도, PLC의 시퀀스상 동작순서에 의하여

 

실제로는 오차가 생길수 밖에 없는 것이죠.

 

타이머 오차는 어떤 스케일을 사용하느냐와, 프로그래밍상 어떤위치에 있느냐에 따라 달라지게 되는데요.

 

10ms 타이머의 경우 오차는 최대 1스캔시간 입니다.

 

100ms의 타이머 역시 동일한 최대오차를 가지게됩니다.

 

정리하면 보편적으로  ' 1스캔 타임 + 스캔시작에서부터 타이머 명령의 실행까지의 시간' 입니다.

 

이러한 연유로 실제로 이처럼 무한반복하는 Clock을 사용하는 것은 조심스러워야 합니다.

 

아무리 작은 오차라도 누적되면 커질 수 있기 때문이지요.

 

그래도 나는 특수릴레이를 사용하여 코딩을 하고싶다... 하시면

 

오차가 누적되어 문제가 발생하기 이전 적정한 주기로 값을 튜닝해주는 절차가 필요합니다.  

 

조금 색다른 예제를 들면서 해당 기능을 파헤쳐봅시다.

 

이 예제는 P0가 ON, OFF 스위치 역할을 하면서, D0가 0.5초마다 1씩 증가되는 예제인데요.

 

FF은 앞선 포스팅에서 기술하였던것처럼 플립플롭을 의미합니다

 

플립플롭에 입력이 한번 주어졌을때 ON 또한번 주어졌을때 OFF 다시한번 주어졌을때 ON.....

 

입니다. (당연히 기억나시죠?.... 그때 힘들게 포스팅했는데 안나도 기억난다고 해주시기 바랍니다....)

 

좀 특이합니다. 

 

보면. 

 

이런 로직대로 움직이는건데. 

 

상승펄스와 하강펄스마다 동작하게끔 의미를 부여했다는 점이 특이하죠.

 

상승펄스와 하강펄스마다 동작하게 하였으니 따져보면

 

0초, 0.5초, 1초, 1.5초가 되는 순간마다 1씩 증가하게 되는 것이지요.

 

이걸 다르게 표현하면 1초마다 2씩 증가되는 로직이라고도 표현할 수 있어요.

 

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

 

 

P0를 한번 눌러 M0가 1인 경우에는 M0가 활성화되어

 

0.5초마다 D0가 수치가 느는것을 확인할 수 있네요

반대로 P0를 다시한번 눌러 M0가 0이 되는 경우에는 M0의 활성이 깨져

 

_T1S 접점이 동작하더라도 D0값은 증가되지 않음을 확인할 수 있습니다.

 

자그럼... T0의 용도가 무엇일까요?

 

다음의 경우를 생각 해봅시다.

 

0.5초마다 증가하는 수치는 그대로 두되 10초마다 D0값을 샘플링하여 다른 레지스터에 읽어들이고 싶습니다.

 

D0는 D0대로 증가하지만 D1이라는 별도의 레지스터는 10초마다 D0값을 갱신하여 사용자에게 보여주는 것이죠.

 

이유야 간단합니다.

 

설명을 위해 비유를 드리자면... 우리에게는 시험기간까지 대략 1년이 남았습니다.

 

우린 1년중 수능을 위해서 월별로 공부전략을 짜겠죠. 월별로 크게 잡고 일별로 분할하여 계산할겁니다.

 

몇월 모의고사를 준비하는지, 몇월 단위로 공부계획을 세울지, 몇월달에는 적어도 오답노트 복습을 시작해야하는지에

 

대해서요. 

 

하지만 1년중 몇일 몇시간 몇초까지 짤라서 계산하는 사람은 없겠죠.

(있어도 없다고 하세요... 정상은 아닙니다.[비하할 의도는 없습니다.])

 

정리하면 우리는 시험을 위한 시간의 대략적인 흐름을 파악하여 현재 시점에 알맞는 공부전략을 선택하면

 

되는 것이지 몇초 단위로 공부전략을 짜는것은 별의미가 없다는 것입니다.

 

모든 값에는 유효한 부분이 존재하고 무의미한 부분이 존재하기 마련이지요.

 

D0의 작은 수치는 순간적인 값을 읽어들이기는 좋지만 사용자가 모든 수치의 변화과정을 볼 필요는 없습니다.

 

다만, 수치의 추이로부터 그 변화량을 그래프화하여 데이터의 특성을 보편화하면 그걸로도 충분히 의미있는

 

데이터이니까요.

 

다시 문제로 돌아가보죠.

 

래더는 아래와 같이 작성해봅시다.

 

0.5초 간격으로 증가하는 데이터레지스터 D0값을 4초마다 D1으로 불러들이는 예제입니다.

 

D00001에는 8이 찍혔네요 왜 8이 찍히는지 이해하셨나요?

 

직관적으로 보았을때 가장 첫번째 봉(?)의 상승엣지 부분을 빼면 4초의 상승엣지구간까지 더했을때 8이 되는것 같네요. 

 

왜인지 우리는 자연스레 아래 그래프를 떠올리게 됩니다.

 

 

여기서 우리가 생각해야 하는점이 있어요.

 

1. 시간이 0인 경우에는 카운팅이되지 않는다는점.

2. 타이머의 현재값 갱신 및 접점의 ON/OFF는 END명령 실행 이후 다음스캔인 점.

 

D00001은 정확하게 4초가 된시점에도 상승펄스를 감지할 겁니다.

 

왜냐하면 타이머의 현재값이 갱신되고 ON/OFF의 명령이 들어가는 시점이 [END]명령 이후이기 때문이지요.

 

추가로 타이머의 수치를 50으로 바꿔보겠습니다.

 

0.5초 간격으로 증가하는 데이터레지스터 D0값을 5초마다 D1으로 불러들이는 예제입니다.

 

근데 문제가 발생했습니다.

 

시뮬레이션을 돌려보면 이상한 현상이 발생합니다.

 

시뮬레이션을 돌려보니 아래와 같이 D00001에는 11이 찍혔습니다.

 

아까의 논리대로 계산이 맞다면 D00001에는 분명 10이 찍혀야 할텐데 말이죠.

 

타이머는 분명 5초인 시점에 [MOVP] 명령을 통하여 값을 인식할 수 있도록 명령을 주었을 것입니다. 

 

왜이런 현상이 발생할까요??

 

음변환 검출접점을 넣으니 문제가 조금 이해하기 어려울듯 하여 양변환 검출접점만 놓고 아래 래더를 보면서

 

시뮬을 돌려봤습니다.

 

 

시뮬을 돌려놓고 가만히 보자면 D0가 분명 D1을 따라가긴 하는데 타이밍이 조금 이상합니다.

 

즉각 즉각 변화해야 할 것 같은 수치들이 한박자 늦게 동작하거나 동시에 동작하는 상황이 발생했어요.

 

타이머도 1초간격이고 Clock 신호도 1초간격의 상승펄스마다 동작할텐데 왜 이런현상이 발생 했을까요?

 

기나긴 이야기를 지금 시작합니다.

 

잘 따라오실꺼죠?

 

타이머는 정확하게 수치를 측정할수 없다고 말씀드렸었죠.

 

LS 산전 XGK 메뉴얼 발췌

 

아래 타임차트에서 5인 지점의 값을 D1으로 찍고싶다고 가정해봅시다.

 

타이머는 5에(아래그림) 해당하는 부분에서부터 [END]를 만나기 이전까지 아무것도 할 수 없습니다.

 

그 말인 즉슨 0부터 세서 실제로 5초인 순간이 하필이면 입력 리프레싱 출력 리프레싱 순간이 아니라

 

레더를 해석하는 과정에 있다면, 필히 [END]를 만나기까지 대기해야 하는 불상사가 벌어지는 것입니다.

 

빨간색선이 만약 아래 타임차트의 4라는 부분에 걸쳐있게되면 5라는 부분 이후에나 그수치를 인식하겠지요.

 

최대 1스캔 간격입니다. 

 

앞선 예제와 연관하여 쉽게 풀어설명하자면 [MOVP D0 D1] 명령에 대한 결과값 출력은 어쨋거나 [END] 명령이후에

 

이루어지므로 시간상 5 라고 가정한 붉은색 선에 대한 시간을 PLC가 인식하려면(아래그림) [END]까지 조금더

 

기다려야 합니다.

 

또한 다음 스캐닝 동작 7.5쯤 되는 부분에서 [MOVP D0 D1]을 마주하고 실시간으로 측정된 값이

 

디바이스 이미지 메모리에 저장된 후 [END]에 닿아 출력 리프레싱이 될때까지 기다려야 합니다. 

 

바로 우리가 눈으로 보는 값들이 출력리프레싱 된 값들인데요.

 

그러나 이렇게 해당 예제에서는 스캐닝으로 인한 지연동작이 생긴다고해도.

 

사실 스캐닝 동작이 워낙빠르고 1초 Clock의 상승 펄스 하강펄스 검출이 스캐닝동작보다 빠르게 변화하는 것은

 

아니어서 이러한 오차는 고속의 스캐닝 동작에 의하여 보정이 될 것 같습니다. 

 

그럼 수치가 이상하게 찍히는 부분에 대해서 다른원인을 찾아보아야 하겠는데요.

 

이그림은 XGK 메뉴얼에서 발췌하였습니다.

 

어느 PLC 포스팅을 보아도 이런 내용에 대해서 기술한 것은 보이지가 않네요.

 

그래서 소개드립니다.

 

타이밍차트가 좀 특이합니다. LS산전의 메뉴얼 예제에서 P0를 누르면 곧바로 통전되어 타이머가 동작할듯하나

 

실제동작은 그렇지 않고 오차 간격을 가지게되네요.

 

사람이 P0를 누른시간과 실제로 타이머 코일의 동작에 대해 동작하는 시간 차이에 대해서 *2라고 설명하고 있습니다.

 

쉽게말해서 *2는 프로그래밍상의 위치에 따른 오차인데요.

 

PLC가 래더해석을 한줄 한줄 한스텝 한스텝 하다보니 물리적인 시간이 소요되고.

 

실제로 동시에 진행되는것처럼 보이지만 그렇지 않다는 점을 말하고 있습니다.

 

*1은 우리의 예제와 같은 사례에 대해서 설명하는 글이네요.

 

'0부터 새었을때 실제로는 8의 위치가 점선부분이지만 어쨋거나 [END]를 만나야 타이머가

 

최신화되므로 8초보다 시간적으로 더 늦은 위치에 8이라는 수치가 부여가 된다'라고 이해하시면 될듯 합니다. 

 

위의 그림과 밑의 그림이 다른이유는 실제위치와 PLC가 인식하는 시간위치의 오차에 대한 그림으로 이해하시면 됩니다.

 

또 한스캔동작에는 그림에서 표현하길 타이머의 계수가 1개인 경우도, 2개인 경우도 존재합니다.

 

실제로 스캐닝주기는 21ms인데 타이머로는 10ms밖에 측정이 안되기 때문에 이런경우가 발생할 수 있겠죠.

 

21ms과 10ms의 최소공배수는 210ms이죠.

 

그말인 즉슨 210ms 마다 21ms 스캐닝 주기와 타이머의 10ms은 각각 10번 21번 주기동작을 하다가 결국 만나게

 

된다는 의미인데요.

 

이에 따라서 한스캔을 동작시킬때마다 계수가 다를 수 밖에 없다는 점을 시사합니다.

 

그렇게 되면 스캔당 측정된 시간이 달라질 수 있다는 것은 인지상정이겠죠.

 

타이머의 계수가 실제로는 다소 불규칙적이고 스캔당 포함되어 있는 타이머의 계수에 따라 시간이 카운팅된다는 점을

 

미루어 보았을때 LS산전에서 클럭신호도(매크로) 역시 타이머와 같은 원리로 동작되게끔 설계하였다면...

 

210ms 이내의 구간의 래더 해석에 있어서는 스캐닝 주기가 타이머 계수의 주기보다는 11번 덜 동작해야하므로

 

1스캐닝 주기내에  여러개의 타이머 계수가 들어가있겠네요.

 

그렇게 되는경우 한번 스캐닝 동작에 의하여 한번에 20ms이 작동되는 경우가 있고

 

때로는 한번 스캐닝 동작에 의하여 10ms만 인식되는 경우가 있을 겁니다.

 

우리가 들었던 예제처럼 100ms 주기의 타이머를 사용하는 경우를 따져보아도 비슷합니다.

 

100ms(타이머계수)과 21ms(스캐닝 동작)의 최소공배수는 2100ms 입니다.

 

위에 사례처럼

 

타이머계수와 스캐닝동작은 2100ms 마다 다시 만나게되며

 

타이머 계수는 최소공배수를 만들기위해 21번 동작하여야 하고 스캐닝 동작은 무려 100번이나 이루어져야 합니다.

 

이로 미루어 보았을때 어느정도 적절하게 분배되었다면 1 스캐닝 동작에 타이머계수는 대략 0.21개

 

존재한다고 볼수 있지요.

 

거꾸로 뒤집어 말한다면 타이머계수 1개당 4.76개의 스캐닝 동작이 필요하며 적절하게 계산해보면

 

타이머 계수 5개당 23.8개의 스캐닝 동작이 필요하다는 것을 알 수 있습니다.

 

각타이머 계수별로 1부터 5까지 표현해볼까요?

 

1: 4.76 => 5 (0.1초)

[실제 0.1초를 새기위해서는 대략 4.76개의 스캔동작이 필요함. 그러나 PLC는 5개의 스캔동작에서 0.1초를 판단]

 

2: 9.52 => 10 (0.2초)

[실제 0.2초를 새기위해서는 대략 9.52개의 스캔동작이 필요함. 그러나 PLC는 10개의 스캔동작에서 0.2초를 판단]

 

3: 14.28 => 15 (0.3초)

[실제 0.3초를 새기위해서는 대략 14.28개의 스캔동작이 필요함. 그러나 PLC는 15개의 스캔동작에서 0.3초를 판단]

 

4: 19.04 => 20 (0.4초)

[실제 0.4초를 새기위해서는 대략 19.04개의 스캔동작이 필요함. 그러나 PLC는 20개의 스캔동작에서 0.4초를 판단]

 

5: 23.8 => 24 (0.5초) 

[실제 0.5초를 새기위해서는 대략 23.8개의 스캔동작이 필요함. 그러나 PLC는 24개의 스캔동작에서 0.5초를 판단]

 

신기한게 뭐냐면...

 

1개의 계수에 필요한 스캐닝동작이 제각각 다르다는 점입니다.

 

1스캐닝 동작이 메뉴얼대로 21ms를 의미한다면

 

왜 똑같은 시간을 새는데 간격이 달라질까요?

 

0.1초부터 0.4초까지는 각각 5개의 스캔동작인 5*21= 105[ms]씩이나 새야 됬는데

 

희안하게도 0.5초를 새기 위해서는 4*21 = 84[ms]만 새도 된다는 의미입니다.

 

[오차를 방지하기 위해서 LS산전에서 보정치를 준 것이 아닌가 사료됩니다.]   

 

 

 

 

 

하기 그래프는 실제데이터를 기반으로한 XG5000내 트렌드 모니터링 기능입니다.

 

트렌드 모니터링 기능에 의해서 해당 해답을 찾을 수 있습니다.

 

트렌드 모니터링 기능은 오실로스코프 같은 기능을 하는 것으로써 다음포스팅에서 소개드리겠습니다.

 

이기능에 대해서 바로 소개하자면 너무도 포스팅이 길어질듯 합니다. 일단은 이런것이 있구나 정도만 알고 

 

넘어가주시기 바랍니다.

 

아래 그래프는 500ms마다 샘플링된 결과값 입니다.

 

 

 

앞에 설명드린 내용과 연관지어 그래프를 해석해봅시다.

 

이상한점이 보이죠? _T1S는 0.5초 주기 간격으로 HIGH와 LOW를 오가는데 왜 사다리꼴 모양이 만들어지는지 말입니다. 

 

이 부분은 500ms마다 모델링이 되었고 앞서 말했듯이 0.5초를 새기위해서 어느 구간에는 더 짧은 스캐닝 시간을

 

필요로 한다고 하였죠

 

즉 사다리꼴을 형성하는 부분은 실제로는 상승과 하강을 2번한 모양이 그렇게 표현된 것이며, 이가 시사하는바는

 

타이머 계수의 위치가 앞서 설명한 이론처럼 정확한 시간간격으로 분배되지 않기 때문이라고 판단됩니다.

 

이를 고려하여 노란선의 펄스 갯수를 새보면 빨간색선이 상승하는 시점에서 하강펄스를 감지하여 총

 

11이 되는것을 확인할 수 있겠습니다.

 

여기서 우리가 캐치해야 되는점은 시작시간이 17:09:15.6인데 반해 D1이 출력된 시점은 17:09:20.5

 

즉 서로간의 간격이 4.9초로 0.1초가 짧습니다. 타이머 계수가 1개가 덜 먹었지만 5초로 인식을 한다는 의미겠지요.

 

정리하면 사다리꼴이 형성되는 구간은 유독 타이머 계수의 위치가 촘촘하여 어느구간에서 데이터를 캡쳐하느냐에

 

따라서 값이 달라질 수 있다 입니다.

 

그래프로 한번 응용 예제를 확인해볼까요? 

 

그래프상에서는 사다리꼴이 총 2번 형성되었죠.

 

우리는 2번째 사다리꼴이 아니라 1번째 사다리꼴을 봐보겠습니다.

 

17:09:15.6~17:09:17.8 구간에서 캡쳐를 할 겁니다. 시간간격은 2.2초정도 되네요.

 

아까 사다리꼴 모양에서 실제 타이머에 입력하는 수치보다 실제치가 0.1초가 더짧으니 실제치 2.2초를

 

인식시키려면 타이머에는 23이라고 써주어야 되겠군요.  

 

먼저 23을 인식시켰을때 D1값은 5가 되죠?

 

그렇담 22를 인식시켯을 때는요?

 

그러니 [TON T0000 23]을 써주면 한번이 [TON T0000 22]인경우보다 D1값이 하나가 더 크겠네요  

 

맞는지 봐볼까요?

 

 

 

 

여기까지 이해하셨나요?

 

500ms이 아니라 아주 정교하게 그래프를 표현하여 여러분들께 확실히 이해시켜드리면 더 좋겠지만 제능력의 한계로

 

이렇게밖에 설명못드리는 점에 대해서 아쉽게 생각합니다.

 

오늘은 여기까지만 포스팅하겠습니다

 

포스팅에 궁금한점이 있거나 오류가 있는 경우 피드백은 언제든지 환영입니다.

 

코로나가 다시 기승이니 건강 유의하시기 바랍니다.

 

끝.

반응형
블로그 이미지

Lubly0104

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

,
반응형

안녕하세요.

 

맨날 딱딱한 인사만 하니까 글이 너무 무거워 지는 느낌이라 느낌을 좀바꿔보기로 했습니다.

 

대학생시절 공부하면서부터 느낀건데 공학은 안그래도 어려워 죽겠는데 왜 이렇게 딱딱하게 설명되어 있는지

 

늘 불만이 많았거든요.

 

영화도 공포 로멘스 코미디가 나뉘는데...

 

왜!.... 

 

제일 재미 때가리 없는 공학은 늘 궁서체 장르인가요??

 

제가 소싯적 했던 생각입니다.

 

내가 전문가가 되는날 나는 궁서체 장르가 아니라 최대한 코미디 장르로 재미있게 이해시켜줘야지 싶었는데...

 

막상.... 직장인이 되고 글을 올리다보니 제가 그러고 있네요.

 

그래서 인사 먼저 좀 바꾸겠습니다.

 

다시 인사드리죠

 

저는 공직자입니다.

 

(공)대 다녔던 (직)장인이라 (자)부심 있는 남자 입니다.

 

이번 시간엔 평소에는 좀 드물게 쓰는 명령들을 배워보겠습니다.

 

기능적인 부분만 이해를 하면 되다보니 이번시간은 한숨 돌리며 이야기 할 수 있겠어요

 

 

 

첫번째 주제는 재미 때가리 없어보이는

 

BIN/BCD 명령입니다.

 

BIN 명령은 뭘까요?

 

어디서 들어본것도 같아요

 

BIN은 Binary의 약자입니다. 주로 2진수를 표현하죠

 

2진수가 무엇인지는 잘 아시리라 믿습니다.

 

1 아니면 0 즉, 전기가 흐르냐 안흐르냐 입니다

 

BCD 명령은 뭘까요?

 

BCD도 어디서 들어본거 같은데 헷갈리죠? Binary Coded Decimal의 약자입니다

 

2진화 10진수라고 보면 됩니다.

 

2진수면 2진수고 10진수면 10진수지 

 

2진화 10진수가 뭐냐구요??

 

자 천천히 봅시다.

 

10진수는 뭔가요?

 

우리가 평상시에 사용하는 숫자이죠?

 

근데 컴퓨터라는 것은 10진수를 못알아 먹습니다.

 

그래서 보통 아래 그림과 같이 숫자를 이해시키게 되죠.

 

예를들어 십진수 42를 컴퓨터에 인식시키려면 어떻게 해야되나요???

 

128 = 2^7 64 = 2^6 32 = 2^5 16 = 2^4 8 = 2^3 4 = 2^2 2 = 2^1 1 = 2^0
0 0 1 0 1 0 1 0

그래요. 42는 컴퓨터에 잘 인식시켰어요.

 

근데 우리가 역으로 이진수를 보고 해석을 해야한다고 생각해보면 어떤가요???

 

이진수인 0010/1010 을 역으로 계산해야 하는 번거로움이 따르게 됩니다.

 

42이라는 수가 쓰였다는 걸 알아내기 위해서는 2^1 + 2^3 + 2^5 = 42(매우매우 귀찮음)

 

지금은 숫자가 작으니 그나마 하는거지 숫자가 크면 답이 없어요.

 

그래서 등장한 BCD 코드 일명 8421코드라고도 불립니다.

 

BCD 코드는 2진 코드와 무엇이 다를까요?

 

같은 수치인 42을 표현한다고 봐봅시다

 

아래 표를 보세요.

 

8 = 2^3 4 = 2^2 2 = 2^1 1 = 2^0 8 = 2^3 4 = 2^2 2 = 2^1 1 = 2^0
0 1 0 0 0 0 1 0

 

직관적으로 봐보세요

 

보라색 글씨가 42에서 10의자리수인 4를 의미하고

 

검은색 글씨가 42에서 1의자리수인 2를 의미하네요

 

컴퓨터만 알아들을 수 있는 2진수로만 표현했다고 하더라도 사람이 알아보기 쉽지 않나요??

 

바로 이거에요.

 

BCD 코드를 사용하는 이유에는 여러가지가 있겠지만

 

제일 중요한건 사람이 사용하기 편리하게끔 만든거라는거죠

 

8421가 조합되어 10진수의 한자리를 표현하기 때문에 BCD는 8421코드라고도 불립니다. 

 

기초적인 배경지식에 대해서 학습했으니

 

본격적으로 XG-5000내의 명령어를 한번 배워보도록 할까요?

 

1. BIN(P)

의미: BCD 코드를 2진수 코드로 변환한다.

D0는 FROM D1은 TO

 

2. BCD(P)

의미: 2진수 코드를 BCD 코드로 변환한다.

D1은 FROM D0는 TO

이게 답니다 끝.

 

그럼 예제를 통해서 좀 더 몸에 와닿게 이해를 해봅시다

 

레더는 아래와 같아요.

 

P0를 누른후 D0값에 어떤숫자가 들어가있나요?

 

어디서 많이본거 같죠???

 

앞서 설명한 이야기들과 일맥상통합니다.

 

 

그다음은 P1을 눌러보시죠.

 

 

여러분중 90%는 이때 갸우뜽하겠죠

 

"접점을 잘못넣었나?, 뭐여 왜 D1에 안들어가? 예제가 잘못된거아니야? 맛이 갔나????"

 

여러분....

 

이제 시뮬레이터를 끄고 다시 돌아가봅시다.

 

MOVP 명령부분에 숫자 '42'가 아니라 '41'을 넣어보고 똑같이 시뮬레이터를 돌려봅시다.

 

추측하건데 독자여러분중 90%는 이러실껍니다.

 

????????????

 

42는 안되고 41은 되????

 

왜????

 

머여?????????? 문제 잘못냈네???

 

여러분... 안돌아 가는거 맞습니다.

 

이게 바로 제 설계에요... ㅎㅎ

 

BCD코드에서 가장 중요한 부분을 각인시키기 위해 나중에 소개드렸어요.

 

BCD 코드는 8421코드라고 하였죠 즉, 4개의 비트 값의 조합으로 십진수의 숫자를 만들어냅니다.

 

2진수를 가지고 10진수를 표현하다보니 문제가 발생합니다.

 

공간이 남아도는게 바로 문젭니다.

 

1과 0의 조합으로 각 4개의 비트를 통하여 만들 수 있는 경우의 수는 16가지(2^4)인데 우리가 표현하고 싶은숫자는

 

0부터 9까지만 표현하고 싶습니다.

 

왜냐구요? 앞서 말했듯이 4개의 비트마다 십진수의 각 한자리수씩만 표현하고 싶거든요.

 

그럼 1001(십진수로 9에 해당) 다음은 어떻게 하나요?

 

네, 안씁니다. 남는 공간이 생긴다는 것이죠.

 

0,1,2,3,4,5,6,7,8,9만 있으면 우리가 사용하는 10진수를 표현하는데 전혀 문제가 없습니다.

 

16진수에서는 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 까지 표현하였겠지만

 

우리는 알파벳 따위는 필요가 없다는 것이죠.

 

다시 본론으로 돌아와서 42를 넣었을때를 봅시다.

 

숫자의 조합이 어떻게 되나요?

 

 

자... 힌트 진짜 많이드렸습니다

 

뭐가 문젠지 찾으셨나요???

 

42라는 숫자는 하위 4개 비트의 조합(1010)이 A로써 9라는 수치를 넘어버려 BCD 코드로 인식할 수 없으며 더욱이

 

이를 2진수로 변환할 수 없습니다.

 

그래서. 안되는겁니다.

 

BINP 명령은 모름지기 BCD를 BINARY로 변환하는 것이지 외계어를 BINARY로 변환할 수 없거든요.

 

근데 41은 왜 될까요?

 

하위 4개의 비트를 다더해도 9밖에 안되거든요.

 

네... 그래서 됩니다.

 

이건 BINP 명령 입장에서 외계어가 아니거든요.

 

D0에 41이라는 수치가 들어가있고 P1을 눌렀을때

 

D1 레지스터에는 29가 들어가네요.

 

 

 

 

41은 BCD 코드로 보았을때 4와 1이 각각 4개의 비트를 차지하기 때문에

 

D0가 0010 / 1001이 됩니다.

 

이를 BCD 코드로 변환시킨다면

 

0001 / 1101이 되는데 

 

2^0(1) + 2^2(4) + 2^3(8) + 2^4(16) = 29

 

이기 때문이죠.

 

이어 P2를 눌렀을때 데이터 레지스터의 수치변화를 봅시다.

 

다시 원상태로 돌아오는걸 확인할 수 있겠죠??

 

어떤가요?? 머리속에 콱박혔다면 제 오늘 목표는 소기의 달성을 한 것이네요.

 

두번째 주제는 Inverse 명령입니다.

 

반전 명령을 의미하는데요.

 

솔직히 말하면 왜쓰는지 모르겠습니다.

 

병렬을 직렬로 사용할때 편하다고 하시는 엔지니어도 계시고(?)

(개인적으로 노이해입니다.)

 

프로그램의 해석을 타인이 수정하기 어렵게 하기 위하여 일부로 해놓는 엔지니어님도 봤습니다....

(외주 설계시 프로그램 보완용이라는데, 개인적으로 더 노이해입니다.)

 

반전 명령은 전기기사를 공부하신 분이라면 뭔지 대충 감을 잡으실껀데

 

다 뒤집는겁니다 회로고 스위치 접점이고 전부다요.

 

사례를 볼게요.

 

1. A접점을 인벌스하면 B접점이 됩니다.

2. B접점을 인벌스하면 A접점이 됩니다.

3. 직렬연결을 인벌스하면 병렬연결이 됩니다.

4. 병렬연결을 인벌스하면 직렬연결이 됩니다.

 

XG-5000의 단축키로는 Shift + F9 버튼을 누르면 회로상 반전 명령이 된 답니다.

 

말로는 이해가 어려울듯하여 예제를 드릴테니 한번 해결해보시는 걸로 진행하는게 더 좋겠군요.

 

레더를 봅시다.

 

이 회로의 인벌스 회로는 뭘까요?

 

구조를 보아하니

 

1. P0를 누르면 P20이 점등되고

2. P21은 상시 점등되나 P1을 누르면 꺼지네요.

3. P22는 P3를 누르면 켜지나 P2를 누르면 꺼집니다.

4. P23은 상시 점등되나 P5만 누르게 되면 꺼지네요.

 

위 회로를 인벌스 시켜보세요.

 

자...

 

저는 반전회로를 보여드릴게요.

 

우리가 예측한대로 회로가 구동되는지 한번 봅시다.

 

제일 처음 화면을 띄우니 아래화면이 보입니다.

 

 

1. P0를 누르면 P20이 점등되고

2. P21은 상시 점등되나 P1을 누르면 꺼지네요.

3. P22는 P3를 누르면 켜지나 P2를 누르면 꺼집니다.

4. P23은 상시 점등되나 P5만 누르게 되면 꺼지네요.

 

이번주는 이정도만 이해하고 넘어가셔도 무방합니다.

 

다음주에는 특수릴레이 사용과 예제를 보며 공부해보도록 하겠습니다.

 

이상. 공직자였습니다.

 

끝.

반응형
블로그 이미지

Lubly0104

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

,