안녕하세요?


이번 포스팅에서는 이번주 수요일에 있었던 수업의 내용중 오후 수업에 해당하는 내용으로, PLC기기 자체에 어떻게 하면 숫자를 각각 하나하나의 램프에서 표시를 하며, 이 숫자를 이용해서 사칙연산이 가능한 계산기까지 만드는 것입니다. 일단 이 과제를 해결하기 위해서 작업에 들어갑니다.



먼저 2자리의 숫자가 입력되지 않도록 -9에서 9사이의 값만 입력이 되도록 만들어 줍니다.



한번에 모든 걸 할 수는 없으니, 우선 첫번째 입력되는 숫자를 표시하는 패널의 부분을 만들어 보도록 합니다.



위 스크린샷과 같이 버튼을 먼저 구현해 주도록 합니다.



위 그림과 같이 첫번째로 구성을 하기는 했는데, -의 수가 입력이 되면 어째서 인지 오류가 발생하였습니다. 그래서 뭐가 문제인가 했더니, 연산을 하기 위해서 데이터를 저장하는 D디바이스는 따로 두고, 숫자를 표현하기 위한 디바이스도 따로 두어야 한다는 것이였습니다.



그래서 이번에는 위와 같이 계산을 위한 D0 디바이스를 두어서 여기에는 -의 음수값도 두고, D1이라는 디바이스를 따로 만들어서 여기다가 D0의 값을 집어넣은 다음, 무조건 양수로 만든 뒤에 BCD연산을 하고, SEG명령어로 디코더를 통과하게 합니다.


이제 음수의 표현은 되는데, 문제는 0이 표현되지 않는 문제가 발생하였습니다.



그래서 어디가 문제인가 했더니, 위 스크린샷에 나오는 빨간 동그라미 친 부분이 문제였습니다.




그리고 한개의 입력숫자를 표시할 수 있는 패널 부분이 완성되면, 나머지 부분은 일단 붙여넣기를 해서 GT Designer에서 나오도록 만들어 줍니다. GX works2에서 나오는 래더는 복사한 다음, 디바이스 번호를 일단 다르게 하는 것으로 했습니다.



다음으로는 사칙연산을 하면서도, 리셋버튼이 될 래더 로직도 만들어 주도록 합니다.




그리고 일련의 로직을 짜도록 합니다. 이건 어디까지나 첫 시도이고, 일단 DIS명령어를 이용, 2자리수가 될 사칙연산 결과값을 한자리씩 나누도록 합니다.



우선 GT designer에서 위 스크린샷처럼 디자인을 하도록 합니다.



다른 건 다 되는데, 5X5와 같이 결과값이 2개로 나오는 경우에는 무언가 이상한 값이 나오는 것을 볼 수 있었습니다. 그래서 어디가 문제인지 이것을 해결하기 위해서 다양한 것을 시도해야 했습니다.



일차적으로 해보기는 해보니, BCD가 먼저와서 2진수로 디바이스의 메모리상에 저장이 되어 있는 연산결과값을 4자리로 FND로 표현할 수 있도록 표현식을 변환해 줍니다. 그 다음에 DIS명령어를 사용해서 제대로 4자리수로 나뉘어져 있는 값을 한개씩 잘라 줍니다. 그리고 나서 SEG명령어로 세크먼트 디코더에 넣어서 각각의 램프에서 숫자표현이 가능하도록 만들어 줍니다.



마지막으로 완성된 모습입니다. 이제서야 제대로 마이너스의 연산값도 표시가 되는 것을 볼 수 있었습니다. 지금은 비록 계산기에 불과한 지는 모르겠습니다만, 그래도 나중에 가면, 센서에서 측정된 값을 바탕으로 다양한 제어가 가능하리라 생각이 듭니다.

+ Recent posts

티스토리 툴바