안녕하세요?


이번 포스팅은 수요일에 있었던 PLC 자동제어반의 수업의 내용을 포스팅하는데, 미쯔비시 PLC를 이용해서 2진수인 바이너리(Binary) 코드를 어떻게 하면 4자리 단위로 나누며, 이를 실제로 숫자로 나타내는 방법에 대해서 실습을 하였습니다. 그런데 수업의 내용이 많아서 하는 수 없이 두 부분으로 나누었고, 이번 포스팅의 부분은 이론을 주로 배웠는 부분을 다루었습니다.



다음은 PLC에서 사칙연산을 하는 방법입니다. 먼저 +P라고 입력을 하면 더하기가 되고, -P로 시작을 하면 빼가가 되는 것입니다. 


[+P D0 D1 D2] : D0와 D1을 더해서 D2에 저장 

[-P D0 D1 D2] : D0와 D1을 빼서 D2에 저장

[*P D0 D1 D2] : D0 와 D1을 곱해서 D2에 저장

[/P D0 D1 D2] : D0를 D1으로 나누어서 D2에 저장, D3(D+1)에는 나머지가 저장


여기서 주의해야 하는 것은 바로 나누기 입니다. 나머지를 구하는 공식이 PLC-특히 미쯔비시 PLC에서는 따로 있는 것이 아니라 나누기를 저장한 디바이스 D의 D+1에 자동으로 지정이 된다는 것입니다. 왜 나머지가 중요하냐 하면, 예전에 이 나머지를 이용해서 10진수를 2진수로 바꾸는 것처럼 일종의 디코더로 활용이 가능했습니다.



먼저 위 스크린샷과 같이 래더를 작성 하도록 합니다. 우선 M0와 M1의 A접점을 보시면 뒤에 조건문이 붙어 있는 것을 보실 수 있는데, 둘다 2자리로 넘어가거나, BCD가 4자리로 끊어 놓기 위해서 음수-마이너스 값이 나오면 에러가 뜨기에, 이를 방지하기 위해서 입니다.



먼저 위 스크린샷을 보시면, BCD로 그냥 2진수를 변환한 값을 그냥 표시에 나올 수 있지만, 우측에는 숫자를 표시하기 위해서 막대 하나가 한개의 독립된 램프로 되어 있는 것을 확인할 수 있습니다. 실제로 Y100이라는 시작점이 되는 램프에서 부터 Y106까지 6개가 모두 다 되어 있는 것을 확인할 수 있었습니다.



실제로 4라는 숫자를 입력하면, 우측에 4라는 것이 나오는 것을 볼 수 있습니다. 이는 세크먼트 디코더라고 해서, SEG가 바로 세크먼트 디코딩을 하라는 명령어가 됩니다. 그래서 위 그림에서 처럼 단순히 터치에서 나오는 화면만이 아니라, 램프를 통해서 실제로 숫자를 실제로 표기할 수 있습니다.



그리고 4라는 값이 위에서는 그냥 BCD로 변환되어 있는 것이 있는데, 여기 이 값이 Y100에는 FND와 같이 램프로 숫자를 표시하기 위한 값으로 변환되어 있는 것을 볼 수 있습니다.




실제로 SEG라는 명령어는 말 그대로 세크먼트 디코더로 FND라는 것을 만들 수 있습니다. 그리고 아래에 보시면 같은 9999라는 값이라도 BCD를 통하면 4개의 자릿수의 값으로 어떻게 바꿀 수 있는 지에 대해서 나와 있습니다. 


링크 : 디지털 회로 구성-3X8 디코더와 BCD-7 세크먼트 디코더의 구현



그리고 위 스크린샷에 NEGP라는 것으로 NEG라는 명령어와 같이, D0에 저장되어 있는 값을 마이너스인 음수로 바꾸어 주는 역할을 합니다. 그리고 한개의 디바이스인 D에는 0~32767h7fff와 -1~-32768h8000 이라는 값을 저장할 수 있습니다. 사실상 엄청나게 큰 값을 저장할 수 있는 것입니다.



먼저 위 스크린샷은 양수인 5의 값을 저장하고 있는 상태에서 D0에 저장된 값을 보여주고 있습니다.



그리고 마지막에는 -5라는 것을 확인할 수 있었습니다. 완전히 모든 숫자가 반전된 것을 볼 수 있으며, 마지막에 있는 D0의 F항목에 있는 값이 1이 되면 -를 의미한다고 합니다. 그리고 기본적으로 -1이 있었기 때문인지 몰라도, OFF가 되는 디바이스의 자리가 하나 적은 것을 볼 수 있습니다.



실제로 호기심에 -1을 입력해 보니, 모든 값이 다 ON으로 표시가 된 것을 볼 수 있었습니다.




위 스크린샷에 있는 래더를 보시면, 새로운 화면이 나오는 것을 볼 수 있습니다. 여기서는 DIS와 UNI라는 명령어가 있는 것을 확인할 수 있습니다.



먼저 D1의 디바이스에서 16진수의 값인 1234를 입력하자 2진수 코드로 제대로 나와 있는 것을 볼 수 있었습니다.



실제로 DISP명령을 실행하자, [DISP D1 D10 K4]라는 명령어를 실행한 결과입니다. 저 명령문의 의미를 풀어보면, D1에 저장되어 있는 값을 K4-4자리의 숫자로 나누어서 D10부터 일의자리 부터 저장을 하라는 의미가 됩니다.



그리고 실제로 [UNIP D10 D2 K4]라는 명령어를 실행시킨 결과입니다. 여기서는 D10부터 K4, 4자리수의 값을 가지고 와서 D2에 저장을 하라는 의미가 있으며, 실제로 제대로 16진수의 값으로 도로 돌아가는 것을 확인할 수 있었습니다.



그리고 위 스크린샷은 미쯔비시 메뉴얼에 있는 DIS명령어의 사용법입니다. 실제로 한개의 디바이스에 저장이 되어 있는 숫자를 n자리 수로 나누어서 따로따로 조각내서 저장하는 것을 확인할 수 있습니다.




그리고 위 스크린샷은 UNI명령어의 설명을 가져온 것입니다. 실제로 여러 디바이스에서 저장되어 있는 값을 1개의 디바이스로 합치는 것을 볼 수 있습니다.



위 그림은 DATERD라는 명령어를 실습한 래더의 결과입니다. 일단 위 래더는 D0에 기기의 시간기록을 읽으라는 것을 의미하는 명령어입니다.



그리고 각각 Y디바이스에 무슨 내용이 저장되는 지를 나타낸 것입니다.



그리고 실제로 매뉴얼에 있는 DATERD의 사용법입니다. 실제로 다양한 디바이스에 PLC에서 읽어놓은 날짜를 비롯한 시간까지 표시하는 것을 볼 수 있습니다. 다만 이게 2079년까지 가능하다는 것이 있는데, 저때까지 한개의 PLC가 사용이 될 것인지는 심히 의문이 하나 들기는 듭니다.

+ Recent posts

티스토리 툴바