안녕하세요? 


지난주에 미쯔비시 PLC..... 이게 PLC마다 프로그램을 짤 수 있는 소프트웨어가 따로 있는 것 같은데, 우선 미쯔비시 PLC의 경우에는 GX works와 GT design을 사용해서 PLC의 로직인 래더를 짜고, 제어하는 판넬인 터치라는 터치 스크린의 유저 인터페이스를 디자인 하는 것으로 보입니다. 우선은 GX works의 단축키에 대해서 설명을 하고 넘어가야 겠습니다.



일단 위에는 단축키로, 여기서 단축키를 사용해서 래더를 작성하는 데 유용하게 사용할 수 있습니다. 다만, 아래에 있는 SM400, SM402, SM412는 단축키라기 보다는 F8로 불러올 수 있는 펑션에서 입력해서 사용할 수 있는 내용이라고 보실 수 있습니다.



새 프로젝트를 만들어서 GX works에서 작업을 하도록 합니다.



이번에는 카운터와 타이머를 사용하였습니다. 위 스크린샷에서 보이는 T1이라는 것이 타이머1이며, 아래에 보이는 C1이라는 것은 카운터1입니다. 여기서 T1 K30 이라는 것으로 F7 코일에 입력을 하면, 타이머1에 30초라는 시간을 주어서, 맨 처음 전류가 공급이 되면, 30초 후에 ON이 되어라는 것입니다.


C1 K5라는 것을 F7으로 부르는 코일에 입력을 하면, 카운터1번에는 5번을 세고, 5번이 다 차면 ON신호를 주어라는 의미가 됩니다. 처음이라서 낯설기도 했지만, 사용하는 것에는 큰 문제가 없다는 생각이 듭니다. 그리고 아래에 있는 펑션에 [RST C1 ]이라는 것은 카운터1을 resetting하라고 해서 초기화 시킨다는 의미가 있습니다.



시뮬레이션 했는 결과, 제대로 작동하는 것을 볼 수 있었습니다. 그런데 여기서 하나 주목해 보아야 하는 부분이 따로 있습니다.



위 스크린샷에서 빨간 동그라미로 표시된 부분인데, 여기서는 T1 타이머가 ON이 되면 자동으로 X1의 전원을 차단해 주는 역할을 합니다. 그래서 연속적으로 계속해서 카운터가 올라가지 않고, X1 스위치(A접점)을 눌러서 30초가 지나기를 5번 해야만 C1 카운터가 ON이 되는 것을 볼 수 있습니다.



이제 GT design에서 디자인을 하는 작업입니다. 위 스크린샷은 X1 스위치를 토글 스위치로 하는 것인데, 토글 스위치의 경우에는 지난번 포스팅에서 언급을 했다 시피, Bit-ON/OFF를 선택하고, Device에서는 X1을 선택 하도록 합니다.



다음으로는 버튼에 텍스트를 입력하는데, 여기서 중요한 것은 True Type이라고 시작되는 폰트를 고르면, 평상시에 다른 곳에서도 볼 수 있는 스타일로 바뀌며, 상당히 익숙하며 편안한 방식으로 글자의 크기도 조절을 할 수 있습니다.



다음은 GT design에서 처음으로 사용해보는 숫자 display라고 해서 표시기인데, 맨 처음에는 위 스크린샷과 같은 옵션이 되어 있는 것을 볼 수 있습니다. 이래서는 너무 숫자가 긴 감이 있기 때문에 바꾸도록 합니다.



여기서는 trueType이라는 것으로 바꾸어서 소위 전자시계에서 볼 수 있는 스타일로 바꾸도록 하고, Digits라는 항목은 표시할 숫자의 자릿수입니다. 이는 얼마나 큰 숫자를 나타낼 것인지 고려해서 자릿수를 지정하면 되는 것이고, plate color는 숫자의 배경색, numerical color는 숫자의 글자색을 의미합니다.




그리고 이어서 카운터의 숫자도 표시를 하는데, 여기서 하나 짚고 넘어가야 하는 것이 있습니다. GT design에서는 GX works에서 타이머와 카운터가 T1과 C1으로 표기되었다고 해서, 여기서도 같이 쓸수 있는 것이 아니라 타이며는 TN, 카운터는 CN으로 표시가 되어야 합니다. 그래서 타이머 T1은 GT design에서는 TN1, 카운터 C1은 GT design에서는 CN1으로 표기가 되는 것입니다.



일단 디자인을 다 했는 화면입니다. 이제 여기서 배경이 시꺼먼 색만 있는데, 이걸 채우도록 합니다.



GT design에서는 사각형을 배경이 되도록 하나 그리고, 채우기를 해야 하는데, 여기서는 사각형을 그리고나서, 마우스 우클릭이 아니라 더블클릭을 해서 위 스크린샷에 보이는 화면을 불러와야 합니다. 그리고 여기서는 pattern을 누르도록 합니다.



여기서 solid를 선택하도록 합니다.



이제 배경을 다 채웠는 이후의 화면입니다. 이렇게 해서 디자인을 하는 것은 다 끝났습니다.



GX works와 연동해서 시뮬레이션을 한 결과, 제대로 작동하는 것을 볼 수 있었습니다.



이제 오늘의 다음 과제를 하도록 합니다. 우선 여기서는 INCP와 DECP라는 것이 있는데, 이 둘은 각각 INCP : 1씩 증가를 한다. DECP : 1씩 감소를 한다. 이런 식으로 이어지는 것입니다. 그리고 뒤에 있는 D100이니 D110이니 하는 것이 있는데, 이는 레지스트라고 해서, data가 들어간 주소라고 보시면 되는 것입니다.




즉, D100이라는 주소를 할당하고, 여기다가 데이터를 집어 넣는 것인데, 카운터와는 약간 다르게, 여기서는 다양한 데이터를 집어 넣을 수 있는 것을 보입니다. 그리고 실제로 GT design에서는 D100이니 하는 주소를 Device란에 입력을 하는 것으로 Numerical display에서 여기에 저장된 숫자를 보여줄 수 있습니다. 


그런데 여기서 아래를 잘 보시면 이런 공식으로 적혀 있는 것을 볼 수 있으실 것입니다. [+P K1 D100] 이 펑션의 의미는 우선 +P는 1번만 증가시키는 실행을 하라는 의미이며, K1 D100은 D100이라는 레지스트에 있는 값을 1씩 증가시키라는 의미가 됩니다. 여기서 중요한 것은 K뒤의 숫자를 2나 3 등으로 두면, 2씩, 3씩 증가를 시킬 수 있는 것입니다.


그리고 아래에 있는 -P라는 것의 의미는 1번만 감소시키는 실행을 하라는 의미가 됩니다.



다음으로 언급해야 할 것은 이 래더에서도 연산자가 있다는 것입니다. 위 그림처럼 <>한 연산자를 펑션 앞에다가 사용을 하면, 뒤에 오는 K3와 레지스트  D110이 같지않을 때, 즉 다를때 펑션을 ON시키라는 의미가 되게 됩니다. 이 평선이 앞에 있는 입력란에 있기 때문에, 해당하는 조건을 만족하면 A접점이 연결이 되어서 전류가 흐르게 되는 것입니다.



= 는 같다. >=는 역시 크거나 같다 등으로 나머지는 흔히 보아왔던 것과 같은데, AND와 OR연산이 어디에 있느냐고 하면, 위 그림에서 나와 있듯이 별것 아닌것 같이 평소에 사용한 것이 사실은 모두 AND와 OR연산이였던 것입니다.



실제로 GT desing상에서 래더와 연동을 해서 시뮬레이션을 한 결과입니다. 카운터와 타이머는 제대로 작동을 하는 것을 확인할 수 있었습니다.



실제로 증가와 감소가 각각 3과 4씩 일어나는 것이 맞는지를 확인하기 위해서 래더를 임의로 디자인을 해서 실험해 보고자 했습니다.



그리고 래더와 연동이 되는 GT design의 시뮬레이션 결과 제대로 작동을 하는 것까지 확인을 할 수 있었습니다.



그리고 제가 GX works를 건드리면서 알게 된 것인데, 위 스크린샷에 나와 있는 스크린샷이라고 하는 부분을 건드려서 하나 더 래더 프로그램을 짜는 공간을 만들 수는 있지만, 시뮬레이션을 작동 시키면, 에러가 떠서 제대로 된 작업이 완전히 불가능해 집니다.



제 경우에는 어찌어찌 해서 자리수를 조정하는 것으로 잘 나오기는 합니다만, 경우에 따라서는 2자리 수의 값이 3자리 이상 표시가 되는 경우가 있습니다. 이럴 경우 래더에서 1/10으로 나누기를 할 수는 있지만, 여기 GT design에서 계산된 결과를 보여줄 수도 있습니다.




위 스크린샷을 보시면, Operation/script라는 항목으로 들어가도록 합니다. 그리고 여기서 Data Operation을 선택한 다음, 가장 아래에 있는 Data Expression으로 가서, EXP라는 버튼을 누르도록 합니다.



여기서 Style항목에 A. B를 고르고서, A와 B를 어떤 값으로 정하는 것인지 결정하는 것입니다. 여기서 $$는 래더에서 지정된 device에서 나오는 값 그대로고, Constant는 문자그대로 상수입니다. 변하지 않는 수인데, 그 사이를 나누기 / 로 두어서 원래 device에서 표시해야 할 값을 10나눈 값으로 나오도록 하는 것입니다.



다음은 플립플롭으로 만들 수 있도록 F8을 눌러서 나오는 펑션에다가 FF를 맨처음에 넣으면 되는 것입니다. 여기다가 또 중요한 것이 하나 더 있는데.....


Shift + F7 : 상승엣지

Shift + F8 : 하강엣지


이렇게 일일히 지정할 수 있습니다. 그리고 다음으로 중요한 것은 SET이라는 것과 위에서 설명한 RST라는 것이 있습니다. 우선 SET이라는 것은 0인 상태를 1로 만들어서 계속 유지하기 때문에, 자기유지 회로를 그냥 간단하게 만들 수 있어서 래더의 한줄을 절약하는 것으로 보입니다. 하지만 듣자니 reset인 RST가 없으면, 장비 전체의 전원을 내렸다가 다시 올리면 그 즉시 작동이 되어 버리는 경우가 나오기 때문에 사고를 유발 할 수 있다고 합니다.



일단 디자인을 했습니다. 여기서 M6라는 스위치만 토글 스위치로 하고서, 상승엣지와 하강엣지가 OR로 연결이 되어있으면, 그냥 M2스위치가 FF를 한 것과 무엇이 다른지를 살펴 보고자 합니다.



먼저 M6의 경우처럼 상승엣지와 하강엣지를 OR논리로 래더에서 연결하자, 버튼스위치를 누를때만 전류가 통하고, 그 상태로 계속 ON이 되다가 버튼 스위치를 다시 튀어 나오게 누르면, 꺼지는 것을 볼 수 있었습니다.



이에 비해서 그냥 FF라고 플립플롭회로를 F8 펑션에서 연결해 놓으면, 스위치를 첫번째로 눌러서 원래 상태로 돌리면 전원이 들어오고, 다시 한번 더 눌러서 스위치가 원래대로 보이는 상태에서 전원이 꺼집니다. 이건 그렇게 크게 중요하지 않을 수도 있지만, 그대로 디자인 적인 측면에서는 중요할 지도 모른다는 생각이 듭니다.



먼저 예제로 나왔는 순차적인 작동을 하는 회로입니다. 이걸 기반으로 해서 마지막으로 나온 과제는 SET과 RST명령을 이용해서 순차적으로 점등을 하는 래더를 만드는데, 여기서 X1스위치를 누르면 일시정지를 하고, X2스위치를 누르면 리셋이 되면서 모두 정지가 되는 것으로 로직을 설정해야 합니다.



먼저 위에는 래더를 만들어낸 화면입니다. 여기서는 일시정지를 위해서는 각각의 타이머에 들어가는 회로에 B접점을 내서, 타이머에 들어가는 전류를 순간적으로 끊어버리면, 바로 일시정지가 됩니다. 그리고 리셋과 정지의 경우에는 간단하게도 X2스위치를 누르면 [RST 각각의 릴레이]를 해서 모든 릴레이를 ON인 1의 상태에서 OFF인 0으로 만들 수 있는 것입니다.



마지막으로 GT design에서 래더와 연동해서 시뮬레이션 시켰을 때, 제대로 작동하는 것을 볼 수 있었습니다. 전등은 순차적으로 점등을 해서 다시 처음으로 돌아갔고, 일시정지와 리셋정지는 제대로 작동하는 것을 볼 수 있었습니다.

  1. 조아하자 2017.12.06 19:25 신고

    사실 저런 회로에서는 AND/OR 연산이 더 쉽겠지만, 반도체 단위로 들어가게 되면 NAND/NOR 연산이 기본이고 오히려 AND/OR을 구현하는게 더 어렵습니다. 나중에 정말 그런 작업을 해야 할 때가 되면 NAND/NOR 연산을 가지고 저런 동작과 비슷한 걸 해야 할 때가 오실 겁니다...

    • 예.... 제 경우에는 뭐라고 해야 할까요? 일단 반도체 단위까지는 아마 건드리지 않을 것이라고 생각은 듭니다. 다만 실제로 수업시간에 들었습니다만, NAND와 NOR연산을 더 중요하게 다루기는 했습니다.
      흠............. NAND와 NOR가지고서 AND/OR 구현할 일은 될 수 있으면 개인적으로는 안 왔으면 합니다.

+ Recent posts

티스토리 툴바