\ 전기 엔지니어의 꿈 :: 'PLC/PLC(XG-5000)' 카테고리의 글 목록 (2 Page)
반응형

안녕하세요.

 

공직자에요. 어느덧 XG5000 관련 개념 포스팅 끝자락에 다가가는 듯합니다.

 

XG-5000을 포스팅하면서 많은 자료와 데이터를 바탕으로 여러분께 제가 아는 부분을 최대한 설명드리고자 했습니다.

 

그리고 이제는 잠시 쉬었다가 다시 재정비하여 돌아오려고 하는데요.

 

제가 말하는 휴식이 포스팅의 단절을 의미하는 것은 아닙니다. :)

 

저도 사람인지라 공부가 그다지 재밌지는 않습니다.

 

지치기도 하구요...ㅎ

 

일상 관련 포스팅도 올리고 싶고 제 취미인 재테크 관련 정보도 이야기드리고 싶거든요.

 

앞으로 포스팅을 진행하면서 기술 관련 포스팅을 한동안 올리다가, 한 시즌이 마무리될 시점에

 

다시 일상, 취미 관련 포스팅을 올리고 하는 방식으로 포스팅을 할 듯합니다.

 

혹시나 제 포스팅을 열심히 읽어주시는 분이 있다면... 이 부분 양해 부탁드립니다.ㅎ 

 

제가 포스팅을 시즌별로 주제를 나누어서 한다고 말씀드린 부분엔 사실 이런 문제도 있습니다.

 

사실 이후의 포스팅은 실무적인 부분을 확대하여 모터 컨트롤 과정과 인버터 사용 과정을 보여드리면서

 

실제 구동 및 제어 장면을 보여드릴 차례인데 실물을 마련하는 것이 녹록지 않은 상황이거든요.

 

게다가... 실물 제어를 하는 것에 있어서는 시뮬레이션 기능으로는 이해하는데 한계가 있습니다.

 

실제로 제대로 동작이 되는지 눈으로 보고 확인하는 과정이 필수거든요.

 

실제로 구동해보면 시뮬레이션과 실제는 많이 다릅니다.

 

이후 기회가 된다면 관련 데모장비를 마련하여 포스팅을 이어가는 것으로 하겠습니다.

 

자 오늘은 MCS의 개념만 배우고 포스팅 간단히 마무리하겠습니다. 

 

MCS라는 명령어는 제목에도 기술하였듯이 Master Control Set의 약어입니다.

 

MCS는 명령어로 [MCS n]의 형태를 가집니다.

 

XGK 메뉴얼 발췌

 

MCS는 우선순위를 결정해주는 역할을 하는 신박한 기능이 있어요.

 

이전 자기 유지 포스팅을 보시면 Quest에 우선순위에 따라

 

점등되는 예제를 보여드린 바 있습니다.

 

이 예제에서는 b접점을 이용하여 우선순위를 구현하였다면

 

MCS라는 명령은 이미 우선순위가 구현되어있고 어떤 데이터 레지스터를

 

통전시킬 것이냐에 따라서 명령이 수행됩니다.

 

MCS는 0번부터 7번까지 사용할 수 있는데요.

 

MCS 0번이 우선순위가 가장 높고 

 

MCS 7번이 우선순위가 가장 낮습니다.

 

우선순위를 높은 순서대로 나열하자면 아래와 같습니다.

 

[MCS 0]

[MCS 1]

[MCS 2]

[MCS 3]

[MCS 4]

[MCS 5]

[MCS 6]

[MCS 7]

 

대충 어떤 식으로 사용하는지 이해가 가실 겁니다.

 

MCS 역시 SET, RESET 코일과 마찬가지로 MCS를 살리는 명령이 있다면 RESET 시키는 명령이 존재하는데요

 

[MCSCLR n] 형태입니다.

 

말로 설명했을 땐 아직 알쏭달쏭하실 거예요.

 

간단히 예제를 통해 알아보면 더 이해가 잘될 듯합니다.

 

아래를 보시죠.

 

[래더 삽입]

 

이 래더를 바탕으로 몇 가지 실험을 하며 기능을 이해해보겠습니다.

 

먼저 P1을 먼저 눌러봅시다.

 

어떤 시나리오가 예상되나요?

 

결과가 다소 의아하죠? P1을 누르면 P20이 점등되어야 할 듯한데 점등되지 않습니다.

 

이런 사실 확인 이후 다시 한번 TEST를 해봅시다.

 

이번엔 P0를 눌러보겠습니다.

 

오.. P20이 켜졌습니다.

 

보아하니 P20이 켜지기 위해서는 P0이 눌려야 한다는 것으로 미루어 보았을 때 [MCS 0] 명령어가 먹어야 내부 명령이

 

수행되는 것 같네요.

 

자 시뮬레이션을 껐다가 다 시켜봅시다.

 

이번엔 P3를 먼저 눌러볼 겁니다.

 

예상대로 켜지지 않네요.

 

그다음은 P3를 떼지 말고, P1도 한번 눌러봅시다.

 

 역시 아무것도 안 켜지네요.

 

자 이상태에서 P2를 눌러볼 겁니다.(P1과 P3는 역시 누른 상태입니다.)

 

어? 뭔가 이상하죠.

 

P2를 눌렀을 때 [MCS 1]이 동작하여 적어도 P21은 켜져야 할 듯한데 안 켜지죠.

 

그다음은 P2를 끄고 P0를 켜볼 겁니다.

 

드디어 P20이 켜졌습니다.

 

하나 P21은 여전히 켜지지 않네요.

 

P3를 눌렀음에도 불구하고 켜지지 않는다는 점에 주목합니다.

 

마지막으로 P2를 눌러봅시다.

 

드디어 비로소 모든 스위치가 켜졌습니다.

 

그리고 그 상태에서 P0을 꺼봅시다.

 

P20과 P21이 동시에 소등되었음을 확인할 수 있습니다.

 

자, 이번엔 P0을 켜고 P2를 꺼봅시다.

 

보시다시피 P21이 소등되었으며 P20은 점등되어있네요.

 

제가 앞서 말씀드렸듯 MCS명령은 우선순위가 있다고 하였었죠.

 

우리는 이 실험을 통해 다음 사실을 알아냈습니다.

 

 

 

1. MCS는 0번부터 작은 번호가 우선순위가 높다는 사실

2. MCS의 1번을 실행하기 위해서는 0번이 수행되어야 가능하다는 사실

   (즉, 우선순위가 높은 명령이 먼저 SET 돼야 그다음 우선순위가 동작한다는 사실)

3. MCS에 전원이 빠지는 순간에도 우선순위가 높은 것이 OFF 되면 이후의 우선순위 명령도 모두 OFF 된다는 사실

 

다음 실험을 진행해봅시다.

 

[MCSCLR 0]의 역할은 무엇인지 알아내는 게 목적입니다.

 

래더는 요런 식으로 짜주세요.

 

가장 먼저 P2를 누릅니다.

 

그다음 P3를 눌러보세요.

 

자. 앞의 포스팅을 충분히 이해하셨던 것이라면 여러분은 여기서 이상한 점을 눈치채셔야 합니다.

 

MCS 0번이 안 켜졌는데 MCS 1번이 먹었다니요?

 

P2를 끄고 P4를 켜봅시다.

 

P4를 누른 채로 P5를 눌러봅시다.

 

자 이쯤 되면 여러분의 머릿속이 뒤죽박죽이 되었을 겁니다.

 

분명히 MCS는 우선순위대로 동작해야 켜진다고 말씀드렸는데 MCS 0번은 명령어가 안 먹어도

 

MCS 1이 잘 먹는데

 

왜. MCS 2번은 MCS 1번이 안 먹으면 안 먹는 거지?? 하는 생각.

 

이제 위 방법과 마찬가지로

 

P2와 P3를 켜봅니다.

 

P2만 ON 되었을 때는 위 그림과 같고

 

P3가 켜졌을 때 비로소 P21, P22가 점등됩니다.

 

이쯤 되면 눈치 빠르신 분은 눈치채셨을 텐데.

 

위와 같은 차이를 만드는 이유는

 

MCS 명령어의 시작과 끝을 어디로 볼거냐입니다.

 

MCS 0을 예로 들면

 

시작은 당연히 [MCS 0] 이겠지요.

 

끝은요? 당연히 [MCSCLR 0]이 될 겁니다.

 

[MCS 0]이 독립적으로 움직일 수 있는 이유는 

 

[MCS 0] 안에 또 다른 [MCS 1]을 품지 않았기 때문입니다.

 

무슨 소리인고 하니.

 

 

[MCS 0]

      .

      .   

    [MCS 1]

        .

        .

        .

    [MCSCLR 1]

     .

     .

[MCSCLR 0]

 

위와 같은 구조의 명령이 아니라

 

[MCS 0]

    .

    .

[MCSCLR 0]

 

여기서 끝이라는 거죠

 

즉 MCS 0이 우선순위가 가장 높기 위해서는 MCS 0안에 또 다른 MCS를 품었을때나 우선순위가 높아지는 것입니다.

 

MCS안에 또 다른 MCS를 품기 위해서는 시작위치 끝위치를 어디로 볼거냐에 따라서 또다른 MCS를 품을 수도 있고

 

안 품을 수도 있는데

 

바로 [MCSCLR n] 명령이 품을 것인지 안품을 것인지를 결정하는 주체가 됩니다.

 

여기까지 알게 된 사실을 위에 예제와 이어서 다시 정리해보겠습니다.

 

1. MCS는 0번부터 작은 번호가 우선순위가 높다는 사실

2. MCS의 1번을 실행하기 위해서는 0번이 수행되어야 가능하다는 사실

   (즉, 우선순위가 높은 명령이 먼저 SET 돼야 그다음 우선순위가 동작한다는 사실)

3. MCS에 전원이 빠지는 순간에도 우선순위가 높은 것이 OFF 되면 이후의 우선순위 명령도 모두 OFF 된다는 사실

4. MCS는 또 다른 MCS를 품을 수도 있고 아닐 수도 있다.

5. MCS는 MCSCLR 명령을 통해 끝을 어디로 볼 것이냐를 결정한다.

 

이젠 세 번째 예제인데요. 두 번째 예제를 다음과 같이 바꿔봅시다.

 

MCS 0이 중복되어 사용되었다는 점을 주목하세요.

 

이 래더를 돌려보면 위의 결과와 동일하게 나올 겁니다.

 

여러분이 헷갈릴만한 부분은

 

요 부분이라고 할 수 있겠네요.

 

MCS 0을 살려도 P20이 붙지 않는 이유.

 

MCS 0은 이미 MCSCLR을 만난 시점에 끝났기 때문.

 

그래서 또 다른 MCS 0번은 앞에 MCS 0번과 다르게 고유의 식별자가 됩니다.

 

말이 어렵죠?

 

한마디로 앞에 MCS 0과 뒤에 MCS 0은 생긴 모습은 똑같으나 구현되는 래더 로직이 다르다는 것이에요

 

체육 시험 보는데 패찰을 1번부터 10번까지 주고 차례대로 멀리 뛰라고 시켰어요.

 

그리고 시험이 끝난 친구들은 뒤로 퇴장합니다.

 

그리고 또 다른 친구들이 시험을 볼 차례입니다.

 

이 친구들한테 번호표를 11부터 20번이 아니라 1번부터 10번까지 줬다고 문제가 되지는 않겠죠.

 

위도. 같은 이치입니다.

 

자, 마지막 정리 들어갑니다.

 

1. MCS는 0번부터 작은 번호가 우선순위가 높다는 사실

2. MCS의 1번을 실행하기 위해서는 0번이 수행되어야 가능하다는 사실

   (즉, 우선순위가 높은 명령이 먼저 SET 돼야 그다음 우선순위가 동작한다는 사실)

3. MCS에 전원이 빠지는 순간에도 우선순위가 높은 것이 OFF 되면 이후의 우선순위 명령도 모두 OFF 된다는 사실

4. MCS는 또 다른 MCS를 품을 수도 있고 아닐 수도 있다.

5. MCS는 MCSCLR 명령을 통해 끝을 어디로 볼 것이냐를 결정한다.

6. MCS는 넘버를 기존과 같이 부여하여 사용 가능하다.

   (단, 중복하여 사용할 문장은 MCSCLR로 끝마침이 된 상태여야 한다)

 

 

사실 위 기능은 MCS라는 명령이 없어도 충분히 구현할 수 있습니다.

 

근데 PLC가 고마운 것은 이러한 기능을 이미 매크로로 구현해놓았다는 것이죠.

 

C언어도 비슷한 개념이 있습니다.

 

자주 사용하는 수식을 함수로 만들어 필요할 때마다 호출하는 개념이지요.

 

MCS는 그 자체가 어렵다기보다는 개념을 이해하고 어떻게 활용할지를 아는 것이 더 중요합니다.

 

오늘은 여기까지 하도록 하겠습니다.

 

 

 

반응형
블로그 이미지

Lubly0104

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

,
반응형

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

 

지난주의 해설을 들고왔습니다.

 

퀘스트들을 내면서 어떻게 하면 설명드린 개념과 연관시켜 쉽게 이해시킬수 있을까하는 고민으로 문제를 내는데

 

그러다보니 몇몇 오류들이 생기기도하고 잘못 작성한 부분도 보이는것 같아요.

 

늘 말씀드리는 것이지만 문제가 이해가지 않거나 오류가 발생하는 부분.

 

과감하게 피드백 주세요.

 

저도 미숙한 부분이 많지만 서적을 뒤져서라도 답을 찾아서 답변을 드리겠습니다.

 

퀘스트.

 

잘 해결되었나요?

 

늘상 말씀드리지만 래더를 그리고 프로그래밍하는데에는 정답이 없습니다.

 

어떻게 프로그램을 짜도 제어를 하기만 하면 됩니다.

 

우리는 학교 수업처럼 시간재고 문제를 푸는 것이 아니며, 평가받는 것이 아니고 문제 해결이 목적이기 때문입니다.

 

물론 A프로그래머는 100줄로 기능을 구현하였는데

 

B프로그래머는 그 과정에 불필요한 부분을 제거하여 50줄로 기능을 구현하였다면 실력이 있다고 보겠지만.

 

어쨌든 사용자 입장에서는 프로그램의 줄수가 짧던 말던 전혀 상관이 없습니다.

 

에러없이 잘만 돌아가면 100줄이든 50줄이든 모두 훌륭합니다.

 

QUEST1

 

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

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

           D0는 분, D1은 시간

 

->

이를 쉽게 구현하기 위해서 단계적으로 구현을 해볼게요.

 

먼저 시계 로직을 만들어볼까요?

 

포인트는 T0가 올라간다고 해도 D0에 즉각 즉각 수치가 변화하는게 아니라는 것.

(T0는 초의 단위인데, 7-SEGMENT는 분의 단위부터 표현하기 때문입니다.)

 

또한 분의 표현 단위는 0~59 이며 시의 표현단위는 0~23이라는 것.

 

분의 표현단위와 시의 표현단위의 한계가 넘어가면 0으로 떨어진다는 것.

 

이 3가지 포인트를 잘 이해하셔야 래더링을 할 수 있어요.

 

아래는 시계 로직만 구현한 것이에요.

위에까지는 별거 아니였죠?

 

본격적으로 7-SEGMENT로 표현하는 부분을 다뤄볼게요

 

7-SEGMENT를 표현하기 위해서는 어쩔까요??

QUEST2 관련자료.xlsx
0.02MB

이 엑셀파일을 참고해보시면 몇가지 특징을 발견할 수 있어요.

 

노란부분과 빨간부분이 분침과 시침의 각자리수를 표현하며

 

하나의 데이터 레지스터에 저장될 수 있는 이유는 7-SEGMENT가 총 7개의 비트의

 

조합(정확히 말하면 온점까지 8개)으로 이루어지기 때문에 분침의 일의자리와 십의자리를 나타내기

 

위해서는 총 16개의 비트가 필요하고 이를 표현하기 위해서는 하나의 데이터레지스터만 필요하기 때문입니다.

 

요쯤에서 힌트를 얻으시고 스스로 래더링을 해보시기 권장합니다.

 

해설보시다 정답보이면 맥빠질까봐... 

 

PDF로 해설 공개드립니다.

15_QUEST1.pdf
0.03MB

 

PDF를 보고 제가 래더링 한부분을 이해해보셔도 좋고

 

독자여러분 스스로가 제가 드린 힌트를 바탕으로 독창성 있는 레더링을 하셔도 좋습니다.

 

중요한건 여러분이 스스로 해낼 수 있어야 한다는 사실이죠.

 

여러분이 아마도 제 해설을 보시고 궁금증을 가질만한 부분에 대해서 정리를 해보면

 

1. '왜 비명령문을 넣으셨나요?'

   -> 비명령문은 독자여러분께서 왜 비명령문을 넣었을지 생각을 해보시길 바라는 마음으로 넣었습니다.

       왜 시간은 30부터 표현이 안되도 되는지

       왜 분은 60부터 표현이 안되도 되는지 말이죠.

 

2. 표현중에 [D0.0]은 무엇인가요?

  -> 데이터 레지스터는 총 16개의 비트를 저장한다고 하였었죠. D0.0이라는 것은 비트의 실제 위치를

      지정합니다. D0.0은 하위 첫번째 비트를 의미하고 D0.8은 하위 9번째 비트를 의미하겠죠.

 

3. MOV8은 무엇인가요?

   -> MOV8은 8비트 전송 명령으로 총 16개의 비트중 8개만 옴기는 명령입니다.

 

4. 타이머는 왜 T0번을 안쓰셨나요?

   -> 진짜 시계를 구현해버리면 24시간이 흘러야 회로가 제대로 돌아가는지 판단이 가능하죠?

       제대로 구현했나 확인한다고 하루를 낭비해서야 되겠나요???

       기능이 제대로 구현되었는지 편하게 확인하기 위해 시간간격을 줄였습니다. 

 

5. D100과 D101을 넣은 이유는 무엇인가요?

   -> 시침과 분침의 각 자리수를 분리하여 표현하면서 이 데이터를 적절하게 이용하기 위함입니다.

       C언어로 치면 일종의 버퍼 변수라고 보시면 되는데요

       D0와 D1에는 16비트의 데이터가 들어가기 때문에 이를 이용해 먹기가 어렵습니다.

       16비트의 데이터를 각각 8개씩 쪼개서 표현하기 위해 사용한 임시 데이터레지스터라고 보시면 됩니다.      

 

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

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

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

->

요번문제는 간단합니다.

 

각비트의 통전이 명확히 이루어지는지 알기위해서는 모든 비트를 ON 시키면 되겠죠.

 

 

 

15_QUEST_2.pdf
0.04MB

 

 

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

           생각해보시기 바랍니다.

 

->

 

문제 a)에서 결론내린 래더는 BCD를 활용하여 시침 분침을 자리수 별로 분리하였었죠?

 

근데 BCD로 변환하지 않고 2진수를 그대로 가져다 쓴다고하면 어떻게 프로그래밍 될까요?

 

문제 a)의 엑셀의 로직을 보시면 시침마다, 분침마다 계산되어져 있는 수치들이 보이시죠?

 

 

이걸 일일히 다넣으시면 됩니다.

 

분침은 00부터 59까지 총 60개의 래더와 시침은 00부터 23까지 총 24개의 래더가 추가되니

 

D2와 D3의 조합을 사용하여 시간을 표현하려면

 

총 60 + 24  = 84개 가 필요합니다.

 

제가말한게 잘 이해가 가지 않으신가요?

 

엑셀을 곧이곧대로 만들어보겠습니다.

 

QUEST3.pdf
0.05MB

한마디로 노가다판이죠.

 

래더링 해야하는 부분도 늘고 수치계산도 매우매우 복잡합니다.

 

하지만 이도 틀린 방식은 아닙니다.

 

시계기능이 구현되고 있으니까요.

 

여러분은 어떤게 편하신가요?

 

저는 BCD 변환이 더 편합니다.

 

정리하면.

 

BCD의 장점은 사람이 알아보기 쉽고 줄수의 길이를 줄일 수 있는 장점을 가지고 있으며

BCD의 단점은 데이터레지스터를 많이 필요로하고 메모리 공간이 낭비될 수 있는 단점을 가지고 있겠습니다.

 

2진수로 프로그래밍 할때의 장점은 머리를 덜써도 됩니다.

but

2진수로 프로그래밍 할때의 단점은 손을 더써야 됩니다. 계산도 더 해야 됩니다.

 

어떤것이 편한지 어떤것이 불편한지는 독자여러분의 선택을 존중하겠습니다.

 

      

 

QUEST3

 

문제 a).

 

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

 

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

 

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

 

NOR 회로

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

 

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

 

->

 

먼저 X는 P0으로 Y는 P1로 치환하겠습니다.

 

저는 NOR 회로를 두 가지 방법으로 구현해봤습니다.

 

첫 번째 방법입니다.

 

 

래더를 보세요.

 

그리고 시뮬레이션 화면입니다.

 

아무것도 안눌렀을때 P20이 점등됩니다.

 

P0을 눌렀을때(X, ON시) P20은 소등됩니다.

 

P1을 눌렀을때(Y, ON시) P20은 소등됩니다.

 

 

P0, P1을 눌렀을때(X&Y, ON시) P20은 소등됩니다.

 

그다음으로 두 번째 방법입니다.

 

래더를 보시죠.

신기한게 뭐냐면. 첫 번째 방법과 두 번째 방법의 결과가 동일하다는 것.

 

바로 이것이 포인트에요

 

시뮬레이션을 한번 돌려보시면 첫 번째 방법과 결과가 똑같다는 것이죠.

 

아무것도 안눌렀을때 P20이 점등됩니다.

 

P0을 눌렀을때(X, ON시) P20은 소등됩니다.

 

P1을 눌렀을때(Y, ON시) P20은 소등됩니다.

 

 

P0, P1을 눌렀을때(X&Y, ON시) P20은 소등됩니다.

눈치빠른 독자님은 여기서 제가 구현한 두 가지 방법이 어떻게 도출된 것인지 대충 감을 잡으셨을듯 합니다.

 

문제를 잘읽어보면 F=(X+Y)' = X' * Y'라고 하였죠.

 

그렇습니다.

 

F=(X+Y)'는 첫 번째 방법을 표현한 것이고, 

 

F=X' * Y'는 두 번째 방법을 표현한 것 인데요

 

이 수식과 래더를 매칭시켜보면 특징을 찾아볼 수 있습니다.

 

수식상 '+' 기호는 래더에서 병렬 접점로 연결된다.

 

수식상 '*' 기호는 래더에서 직렬 접점으로 연결된다.

 

반전 기호는 즉, NOT 회로는 '*'로 표현된다 

 

다른 표현으로 확장하였을때 '*'는 AND 조건이며 '+'는 OR 조건이라는것 입니다.

 

왜 똑같은 기능을 하는 회로들을 구지 이렇게 다른 방법으로 표현할까요?

 

다음 회로를 보실까요?

 

수식은 F = A * B + A + B' 라고 주어져 있는 회로를 앞서 소개한 래더링 규칙으로 변환하여 봅시다.

 

어떻게 래더가 구현되나요?

 

A를 P0으로 치환 B를 P1으로 치환하면 아래처럼 회로가 구현이 되겠지요?

 

시뮬을 돌려 P0과 P1이 각각 0과 1의 조합을 가져 총 4가지 경우수가 발생하는데

 

이때의 결과값을 봅시다.

 

먼저 아무것도 안눌렀을때 입니다.

P0만 눌렀을때

 

 

P1만 눌렀을때

 

 

P0 & P1 모두 눌렀을때 

자 정리해보면

 

P0(X) P1(Y) OUTPUT
0 0 1
0 1 1
1 0 0
1 1 1

 

이 번거로운 회로를 결과값을 동일하게 하면서 더 쉽게 구현할 수 있는 방법이 없을까요?

 

 F = A * B + A + B' 를

 

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

 

디지털 논리회로를 배우신 분이라면 위와같이 회로를 축약하실 수 있을겁니다.

 

하지만 비전공자를 위해서 납득이 안가실만한 부분을 소개합니다.

 

B+1은 1 입니다. 왜냐구요?

 

B는 0아니면 1이라는 사실은 이해를 하셨으리라 봅니다.

 

전에 말씀드렸다시피 우린 수학을 배우는중은 아닙니다..ㅎ

 

0과 1은 전기가 안들어왔느냐 들어왔느냐라고 했지요?

 

B + 1에서 B는 전기가 들어왔는지 안들어왓는지 모르나 1은 이미 전기가 들어와있습니다.

 

'+' 기호는 위에서 설명하였듯 병렬회로라 했습니다.

 

즉 전기가 들어와있는 선과 B라는 명칭을가진 스위치 접점을 병렬로 연결한겁니다.

 

당연히 B가 전기가 들어오던 안들어오던 결과는 무조건 전기가 들어온다는 사실을 알 수 있습니다.

 

 정리하면 1에다가는 어떤 접점을 붙이던 값이 1 입니다.

 

다시 돌아와서...

 

 F = A + B' 의 수식을 래더로 그려봅시다.

 

위 회로를 시뮬을 돌려보겠습니다.

 

먼저 아무것도 안눌렀을때

 

P0만 눌렀을때

 

 

P1만 눌렀을때

 

 

P0 & P1 모두 눌렀을때 

 

분명히 접점이 줄었음에도 불구하고

 

기능이 똑같아요.

 

OMG.

 

요래서 여러가지 방법으로 표현하는게 쓸모가 있다는 것이고

 

여러가지 방법중 가장 래더링이 짧게끔 하는 것이 업무 효율을 높일 수 있다고 할 수 있죠.

 

허나 기능이 구현되기만 하면 어쨋든 상관은 없습니다.

 

문제 b부터는 완성된 레더만 보여드릴테니 직접 시뮬레이션 돌려보시고 진리표와 동일하게 결과가

 

나타나는지 확인해보시기 바랍니다. 

 

문제 b).

 

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

 

진리표 참조바랍니다.

 

NAND 회로

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

 

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

 

->

 

첫 번째 방법 래더

 

 

두 번째 방법 래더

 

 

문제 c).

 

다음은 Exclusive OR 회로인데요

 

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

 

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

 

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

 

Exclusive OR

F = A' * B + A * B'

 

->

 

이 문제는 한가지 방법으로만 나타내겠습니다.

 

더이상 축약이 안되거든요.

 

뭐 다른방법으로 나타낼려고하면 나타낼수야 있긴합니다.

 

하지만 가장 짧은 수식을 표현하는 것으로 넘어가도록 하겠습니다.

 

아마도 이렇게 회로를 짜셨을겁니다.

 

결론부터 말씀드려보자면 위 회로는 틀렸습니다.

 

왜냐하면 '*'가 앞선 래더의 모든 반전을 의미하기 때문이지요.

 

위 회로는 따지자면 F= X' * Y + (X * Y)' = 가 됩니다.

 

축약하자면 F = X' * Y + X' + Y' = X' * ( Y + 1 ) + Y = X' + Y' 가 되겠습니다.

 

즉 X와 Y가 모두 ON 일때만 0이 됩니다.

 

그렇다면 우리가 만들고 싶은 F = A' * B + A * B'는

 

어떻게 만들어야 할까요?

 

답을 이해하기 위해서는 PLC가 스캔하는 순서에 대해서 이해하고 있어야 하겠죠.

 

 

자 위에 순서를 이해해서 위와 동일한 회로를 구현해 봅시다.

 

F = A' * B + A * B' 는 위 순서에 입각하여 구현코자 할때

 

아래 래더와 같이 만들면 가능할겁니다.

 

 

PLC 래더 특성상 NOT회로가 전단 로직의 모든 것에 대해 부정을 하기 때문에

 

스위치 순서를 바꿔주는 것이죠.(BOOL 대수의 교환법칙)

 

시뮬레이션을 돌려 진리표대로 작동하는지 확인해보시기 바랍니다.

 

 

문제 d).

 

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

 

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

 

Exclusive NOR

 

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

 

->

 

이건 너무 쉽습니다. 앞문제에서 마지막에 반전명령만 추가하면 되니까요.

 

래더는 이렇게 생겼습니다.

 

 

 

QUEST4

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

->

 

래더???

 

이렇게 한번짜보세요

 

이렇게 짜고 시뮬레이션을 돌리면 어떤결과가 발생할까요?

 

일단 P0한번 눌러보면

 

P20이 켜집니다.

 

P0을 계속계속 눌러봅시다.

 

계속 켜졌다 꺼졋다합니다.

 

근데 10이 되는순간?

 

P20이 안켜져요.

 

C0가 ON이 되는순간 JMP 구문이 작동하기 때문인데요.

 

우리는 여기서 JMP라는 동작이 스캐닝 동작중에 건너뛰고 싶은 래더를 지정할 수 있구나라는 사실을 알게됩니다.

 

한마디로 스캐닝동작중에 씹는 래더 영역을 지정하는거죠.

 

추가적으로 설명드리면 레이블을 설정하기 위해서는

 

아래 화면과 같이 주황색 부분을 더블클릭하면 아래 팝업창이 드는데

여기서 레이블을 선택하고 확인을 눌러주시면

 

레이블 리스트 창이뜹니다.

 

여기서 JMP 명령에서 지정해주었던 이름과 동일한 이름을 레이블로 지정해주시면 됩니다.

 

 

 

QUEST5

 

물류자동화 공장내에 운전하고 있는 자동화 로봇이 에러가 났어요.

 

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

 

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

 

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

 

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

 

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

 

[DATERD D0]

 

명령입니다.

 

이것을 잘 활용하셔서 문제를 풀어보세요 단, 에러는 여러번 발생할 수 있으며

 

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

 

->

 

LS산전에서 배포한 XGK 메뉴얼에 보면 총 4개의 데이터 레지스터가 필요하단 사실을 알 수 있어요.

 

 

 

메뉴얼에 사실 설명이 너무너무 잘나와있어 따로 설명이 필요가 없을 정도입니다.

 

다만 (3)번에서 금요일이면 H05가 되는데 메뉴얼상 오타로 보입니다.

 

제가현재 포스팅을 작성하는 시점 2020-07-21 화요일에 오류가 났을때는 데이터레지스터에 어떻게 저장이 될까요?

 

위 기능을 구현하는데에는 다양한 방법이 있겠지만 저는 이렇게 래더를 짰습니다.

 

 

위에 짜놓았던 로직을 시뮬레이션 돌려봤습니다.

 

그다음 디바이스 모니터를 통하여 데이터를 뽑아봤습니다.

 

먼저 이해해야 하는 부분은 데이터레지스터 D0부터 D3까지는 캡쳐한 시점에 데이터가 들어가고

 

D4~ D7 : 에러가 첫 번째 났을때의 D0~D3값 저장 

D8~D11 : 에러가 두 번째 났을때의 D0~D3값 저장

D12~D15 : 에러가 세 번째 났을때의 D0~D3값 저장

D16~D19 : 에러가 네 번째 났을때의 D0~D3값 저장

D20~D23 : 에러가 다섯 번째 났을때의 D0~D3값 저장

 

요런식으로 저장이 됩니다.

 

메뉴얼에서 설명한 이론대로 디바이스 모니터의 D0~D3의 값을 해석해보도록 하겠습니다. 

 

각 데이터레지스터는 BCD 형태로 값이 저장된다고 하였으니 4비트 단위로 한자리씩 쪼개질겁니다.

 

8개 비트면 십진수로 2자리를 나타낼 수 있죠 데이터 레지스터는 16비트 이기 때문에

 

십진수로 표현하였을때 총 4자리를 나타낼 수 있습니다. 

 

정리하면

 

D0 : 월/년       -> 07 / 20  -> 07월 20년

D1 : 시/일       -> 21 / 21  -> 21시 21일

D2 : 초/분       -> 22 / 54  -> 22초 54분

D3 : 백년/요일 -> 20 / 02   -> 2,000년 (20백년), 화요일(숫자 2에 해당)

 

나머지도 같은 방식으로 해석이 가능합니다.

 

GMOVP가 기억이 나지 않으시는 분들은 이전 포스팅을 참고해주세요.

 

QUEST6

 

 

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

 

있습니다.

 

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

 

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

 

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

 

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

 

P0: 공정시작 버튼

P1: 공정중지 버튼

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

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

P20: 프레싱기구 모터

 

->

 

사실 위 기능은 비교적 레더로 구현하기 간단합니다.

 

이렇게 래더를 짜주신 이후에 기본 파라미터 설정에서 

 

좌상단 영역 1사용 체크박스 선택

 

래치영역 항목에서 데이터레지스터 D 우측 체크박스 사용 선택

 

확인 클릭

 

 

이렇게 하면 20ms 마다 샘플링된 수치가 PLC 베터리에 저장되어 전원을 끈다고 하더라도 그 값이 보존되어

 

전원을 껏다 켜도 몇번 프레싱 기구를 사용하였는지 확인이 가능하게 됩니다.

 

아쉬운점은 이 기능이 제대로 구현되는지 확인을 하려면 실물 PLC가 있어야 하는데...

 

그이상은 보여드릴 수가 없는점은 아쉽습니다...

 

또, 문제를 풀다보니 접점을 수정해야 하는 것들이

 

생기고 약간의 문제상 수정이 있었네요...

 

이전 포스팅의 문제를 약간 수정하였습니다.

 

물론 문제 자체가 바뀐건 아니고 시뮬레이터로 버튼기능이 안되는 것들에 대해서만 수정을 하였습니다.

 

오늘도 최선을 다해 최대한 쉽게풀어서 설명드리고자 하였으나 저도 제가 직접 포스팅 작성하면서 어렵네요.

 

이제는 뭐라고 떠드는지도 모르겠어요.

 

하나의 포스팅을 쓰기위해 거의 1주일 정도 고민하고 쓰는거 같아요..

 

제가 여러분께 당부드리고 싶은 것은.

 

고민하고 스트레스 받는만큼 여러분은 전문가가 된다는 사실이에요.

 

복잡한 PLC 공부하겠다는 다짐으로 구지 찾아 들어오셨으니 포스팅은 넘겨집지 마시고

 

스트레스 팍팍 받다 가시기 바랍니다.

 

분명 여러분은 그 과정의 반복속에 실력이 쌓일거니까요.

 

오늘은 여기까지만 할게요.

 

끝.

반응형
블로그 이미지

Lubly0104

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

,
반응형

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

 

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

 

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

 

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

 

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

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

,