안녕하세요?


이번 포스팅에서는 드디어 화요일의 수업내용중 절반에 해당하는 내용을 포스팅 하고자 합니다. 이번 시간에는 선입선출이라고 해서 데이터를 저장한 다음, 이 작업을 다시 꺼내어 써서 작업을 하는 것을 이야기 하고 있습니다. 즉, 여러개의 작업을 반복해서 작업하는 것인데, 그 기초를 배우고 이해한 다음 포스팅 하고자 합니다.



먼저 여기서 다루어야 하는 것은 #에 관련된 명령어가 있습니다. 위 스크린샷처럼 D0라고 하면 D디바이스의 0번 워드를 이야기하는 것이 되지만, #을 붙이는 순간 상황이 많이 달라지게 됩니다. 즉, 소위 주소로 바뀐다고 해야 하는데, 이 경우에는 MOV명령어를 한번 봐 주시기 바랍니다.


[MOV 7 D0] 라고 하면 일반적으로 D0에 7이라는 값을 넣는 것이 됩니다. 그럼 이렇게 하고 나서 다음과 같은 명령어를 내닙니다.


[MOV 5  #D0] 이렇게 되는 경우에는 #D0는 D0에 5를 넣어라가 아니라, #7이라고 해서 정확히는 D7이 됩니다. 즉, 5의 값을 D7이라는 워드에 집어 넣으라는 의미가 됩니다.


왜 이런 헷갈려 보이는 #을 사용하는가 하면, D1에서 D100까지 일일히 다른 값을 집어넣으라고 하면 기존의 MOV명령어로는 100줄의 래더가 작성이 되어야 합니다. 그러나 위 스크린샷처럼 5초 마다 한번씩 타이머를 때려서 D0의 값을 1씩 증가시키고, [MOVP D0 #D0]라는 명령을 동시에 주면 아래와 같은 결과를 얻을 수 있습니다.



실제로 D0가 1씩 증가하는 것 만큼 단 두 줄로 8개의 워드에 각각 다른 값을 집어 넣는데 성공한 것을 볼 수 있습니다. 이런 방식을 이용하면 다음과 같은 과제를 해결할 수 있다고 합니다.


3명의 작업자가 각자 버튼을 누르면, 누른 순서를 기억했다가 출력 버튼을 누르면 출력이 되는 작업입니다.



실제로 위 스크린샷처럼 작업을 하면 가능합니다. 일단 어느 작업자든지 간에 누르면 D0의 값이 증가를 하는데, 이 값은 나중에 순서를 늘려주는 것으로 들어가게 됩니다. 그리고 작업자들이 버튼을 누른 것마다 다른 값이 적용이 되는데, 이 값을들 D1부터 계속 저장을 하게 되는 것입니다.



실제로 D6에 걸쳐서 작업자 3명이 버튼을 누른 순서대로 데이터가 저장이 되는 것을 확인할 수 있습니다. 그리고 이제 저장만 해서는 소용이 없고, 이를 꺼내 써야 하는데, 그 명령어는 WSFT라는 명령어가 있습니다.




여기서 P0라는 버튼을 누르면, 작업이 순차적으로 진행이 되는데, 문제는 이 래더에는 한가지 치명적인 문제점이 있다고 합니다. 



위 그림처럼 WSFT명령을 하고나서 몇번 빠지고 난 다음에 다시 입력이 들어오게 되면, 공백이 발생하게 되는 것입니다. 문제는 이게 위 그림에서는 2개 이길 망정이지, 실제로 수십을 넘어가면 수습이 상당히 어려운 상황이 발생하게 될 듯 합니다.



그래서 작업 버튼-저장된 데이터를 꺼내오는 버튼을 누르면, 아래의 그림과 같이 D10-위 래더에서 원래 D0인 값을 D10으로 바꾸어 놓았는데, 아무튼 이렇게 #이 붙어서 데이터의 주소를 지정해 주기 위한 용도로 만들어진 워드 디바이스의 값을 위 스크린샷의 오렌지색 밑줄 친 곳처럼 감소 시켜줄 필요성이 있어 보입니다.



그리고 위 스크린샷처럼 무한정으로 입력과 0을 넘어서 저장된 데이터를 빼내는 명령이 실행이 되면, PLC에서는 데이터가 꼬이는 현상이 발생합니다. 실제로 D1부터 저장을 하라고 했지만, 9개를 초과하는 순간 D10을 건드리기 때문에 무언가 문제가 발생할 소지도 있습니다. 그래서 오렌지색 박스처럼 제약을 둬야 하니다.



그리고 소개가 늦었는데, WSFT라는 명령어는 위 그림과 같이 시작되는 디바이스와 끝나는 디바이스가 있는데, 특이하게도 아래와 같은 특징이 있습니다.




실제로 시작워드와 끝 워드의 값이 어느쪽이 큰가에 따라서 워드가 이동하는 방향이 달라지는데, 매뉴얼에는 아랫방향 위 방향이라고 되어서 헷갈리기는 합니다만, 일단 지금으로서는 그냥 [WSFT 워드1 워드2] 로 명령을 내리는데, 워드1>워드2로 하면, 워드2로 저장된 데이터를 빼와서 이를 저장된 데이터를 사용할 수 있다. 이렇게 일단 이해를 했습니다.



이제 다음 과제를 부여 받았습니다. 과제의 내용은 단순하게 조그운전이라고 직접 명령을 내려서 스텝모터를 움직이는 운전을 한 다음, 정지된 위치를 기억 시키고, 나중에 자동운전을 시키면 알아서 운전을 하게 하는 것입니다. 일단 위 스크린샷에 보이는 레더를 작성해서 먼저 만들기는 했습니다.



위 동영상을 보시면 제대로 작동을 시키는 것을 볼 수는 있습니다. 그런데 이렇게 일일히 기타 모듈에 대한 창을 띄워서 조그운전을 하는게 영 번거롭기 그지 없습니다.



실제로 매뉴얼을 보면 K4291로 정방향 조그운전 개시, K4292 역방향 조그운전 개시와 같은 메모리 주소가 있습니다. 이 주소는 처음부터 이렇게 지정이 되어 있기 때문에, 래더 상에서 그냥 출력 접점을 설정하기만 하면 되는 것으로 보이는 상황이기는 합니다.




실제로 래더 상에서 조그운전을 할 수있도록 구현까지는 해 보았습니다. 그런데 이렇게 하면 딱 1번만 작동을 하고, 더는 작동을 하지 않기 때문에 실제 산업 현장에서는 사용이 안된다고 합니다. 그래서 실제로는 아래와 같은 메모리 주소를 사용한다고 합니다.



일단 첫번째 스탭에서 스탭모터의 위치가 위 스크린샷에 나와 있는 것처럼 K530이라는 것이 있습니다. 그리고 이 워드는 더블워드이기 때문에, 이 점에 유의해야 한다고 합니다.



그리고 2번째 스탭이 되자, 메모리의 주소가 10증가한 것을 볼 수 있었습니다. 그래서 스탭이 1씩 증가할 때 마다 실제로 목표로 하는 위치를 저장하는 메모리의 영역은 10씩 증가한다는 것을 알 수 있습니다.



그래서 마지막으로 위 스크린샷과 같은 래더 다이어그램을 짜서 작업을 하였습니다만, 실제로 작동을 되지 않았습니다. 다만 시간이 너무 늦은 것이 되어서 하는 수 없이, 여기서 마쳐야만 했습니다. 아마도 다음주 수업시간이 되면, 이 부분을 다시금 작업할 것 같습니다.

  1. 조아하자 2018.02.24 08:46 신고

    고생하시네요 ㅠㅠ 잘되길 바랍니다...!!!

  2. 반갑습니다 2018.04.13 02:23 신고

    반갑습니다 야밤에 우연찮게 들리게 되었습니다. 쭉 훝어보니 제가 아는 그 분 같으신데요 ㅋㅋ 스텝모터 관련 하나만 여쭤보겠습니다. LS XBM시리즈 위치결정카드 XBF-PD02A로 전원 24V 유니폴라 방식의 2상 스텝모터를 각도 제어해야 하는데요 카드를 잡아주니 래더에서 명령어가 운전준비,정,역조그,완료신호 디바이스 영역이 UXX.0.0 이런식으로 자동으로 잡히더라구요 질문은 조그신호로 각도를 제어 할 순 없는 거죠? 위치결정데이터를 이용해야 하는거지요?

    • 조그 운전으로 각도조절이라..... 저도 듣는게 처음이라는 생각이 듭니다. 다만 제가 했는 것도 모든 것을 다 했는 것은 아니라서, 아마 메뉴얼을 봐야 할듯 합니다.
      다만......
      http://cafe329.daum.net/_c21_/bbs_search_read?grpid=k6Ae&fldid=MJoa&datanum=13466&contentval=&docid=k6Ae%7CMJoa%7C13466%7C20110624150529&q=%BD%BA%C5%D7%C7%CE

      여기서 아마 관련된 자료가 있는데, 보니까 펄스수로 생각해야 한다고 나와 있습니다.

  3. 반갑슺니다 2018.04.13 20:29 신고

    360도 1회전 펄스 수를 확인하니 계산해서 쉽게 제어 가능하네요 감사합니다

+ Recent posts

티스토리 툴바