안녕하세요.
공직자에요. 어느덧 XG5000 관련 개념 포스팅 끝자락에 다가가는 듯합니다.
XG-5000을 포스팅하면서 많은 자료와 데이터를 바탕으로 여러분께 제가 아는 부분을 최대한 설명드리고자 했습니다.
그리고 이제는 잠시 쉬었다가 다시 재정비하여 돌아오려고 하는데요.
제가 말하는 휴식이 포스팅의 단절을 의미하는 것은 아닙니다. :)
저도 사람인지라 공부가 그다지 재밌지는 않습니다.
지치기도 하구요...ㅎ
일상 관련 포스팅도 올리고 싶고 제 취미인 재테크 관련 정보도 이야기드리고 싶거든요.
앞으로 포스팅을 진행하면서 기술 관련 포스팅을 한동안 올리다가, 한 시즌이 마무리될 시점에
다시 일상, 취미 관련 포스팅을 올리고 하는 방식으로 포스팅을 할 듯합니다.
혹시나 제 포스팅을 열심히 읽어주시는 분이 있다면... 이 부분 양해 부탁드립니다.ㅎ
제가 포스팅을 시즌별로 주제를 나누어서 한다고 말씀드린 부분엔 사실 이런 문제도 있습니다.
사실 이후의 포스팅은 실무적인 부분을 확대하여 모터 컨트롤 과정과 인버터 사용 과정을 보여드리면서
실제 구동 및 제어 장면을 보여드릴 차례인데 실물을 마련하는 것이 녹록지 않은 상황이거든요.
게다가... 실물 제어를 하는 것에 있어서는 시뮬레이션 기능으로는 이해하는데 한계가 있습니다.
실제로 제대로 동작이 되는지 눈으로 보고 확인하는 과정이 필수거든요.
실제로 구동해보면 시뮬레이션과 실제는 많이 다릅니다.
이후 기회가 된다면 관련 데모장비를 마련하여 포스팅을 이어가는 것으로 하겠습니다.
자 오늘은 MCS의 개념만 배우고 포스팅 간단히 마무리하겠습니다.
MCS라는 명령어는 제목에도 기술하였듯이 Master Control Set의 약어입니다.
MCS는 명령어로 [MCS n]의 형태를 가집니다.
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는 그 자체가 어렵다기보다는 개념을 이해하고 어떻게 활용할지를 아는 것이 더 중요합니다.
오늘은 여기까지 하도록 하겠습니다.
끝
'PLC > PLC(XG-5000)' 카테고리의 다른 글
19. MCS 및 Step relay의 응용 예제 (0) | 2020.08.10 |
---|---|
18. Step Relay의 개념 (1) | 2020.08.03 |
16 .BIN/BCD, 반전명령, 특수릴레이, 래치의 응용 해설 (0) | 2020.07.15 |
15. BIN/BCD, 반전명령, 특수릴레이, 래치의 응용 (0) | 2020.07.08 |
14. 트렌드모니터링, 래치의 개념 (0) | 2020.07.07 |