안녕하세요?


이번 포스팅은 지난주 수요일에 있었던 미쯔비시 PLC의 래더를 짜는 프로그램인 GX works2와 터치의 디자인을 하는 GT designer를 실습하였고, 그 내용을 포스팅 하고자 합니다.



먼저 언급을 해야 하는 것으로는 BSFL과 BSFR이라는 것입니다. 뒤에 P가 각각 붙어서 BSFLP와 BSFRP라고 거의 같은 명령어도 나오기는 합니다. 아무튼 간에 Shift라고 해서 1칸씩 왼쪽이나 오른쪽으로 옮기는 것입니다. 그럼 무엇을 옮기는 지에 대해서 천천히 알아보도록 할 까 합니다.



그래서 M10과 M11을 각각 ON시켜서 0이였던 디바이스의 값을 1로 바꾸어 주도록 합니다. 그리고 나서 지금으로서는 잘은 모르지만, [BSFL M10 K10] 과 [BSFR M10 K10] 라고 나머지 M10은 10진수 디바이스인 M10의 주소에 있는 1을 옆으로 옮기라는 것은 알겠는데, K10은 무슨 의미인지 아직은 모르겠습니다.


먼저 BSFL이나 BSFR이라는 명령이 전혀 없는 상황에서 각각 M10과 M11에 1이 켜져있는 것을 확인할 수 있었습니다. 이제 위에 올려진 래더에 있는 X2와 X3라는 스위치를 눌러서 BSFL과 BSFR을 실행 시켜 보았습니다.



여러번 실습을 해본 결과 위 스크린샷에 그려저 있는 것처럼 BSFL은 왼쪽으로 디바이스의 비트라고 해야 할까요? ON이 되어서 1로 되어 있는 디바이스가 왼쪽으로 움직이고, BSFR이라는 명령어는 오른쪽으로 이동 시킵니다.



다음은 BCD와 BIN명령어를 실습해 볼 차례입니다. BCD명령어는 십진수의 숫자인 K10과 같은 수가 원래는 2진수로 디바이스에 저장이 되는데, 이런 2진수로 저장이 된 수를 FND에서 표현이 가능한 코드로 바꾸어 주는 명령어가 됩니다. 그럼 반대로 BIN명령어는 FND에서 숫자로 표현이 가능한 코드를 2진수로 바꾸어 주는 명령어입니다.



먼저 FND에서 숫자를 표시활 수 있는 코드로 시가 된 값들이 D10과 D12에 저장이 되어 있는 것을 볼 수 있습니다. 이 값들은 각각 16진수 10과 10진수 10이 저장되어 있습니다.



그리고 D20에는 16진수 10이 도로 2진수 코드로 변환이 되어 있고, D22에서는 10진수의 10이 2진수의 코드로 변환이 되어 있는 것을 볼 수 있습니다.




위 래더에서는 M3는 INC라고 해서 INCP와 동일하게 D100의 값을 1씩 증가시키는 명령어이고, M4는 DEC, 혹은 DECP라고 해서 뒤에오는 D100의 값을 1씩 감소시키라는 명령어 입니다. 그렇게 해서 Y100에는 4비트 단위 4묶음으로 묶어서, D100의 값을 FND에 숫자로 표시될 수 있는 코드로 만들어라고 하고, Y200에서 4비드 단위로 4묶음 묶어서 D100의 값을 그대로 2진수 코드로 표시하라는 래더를 짰습니다.



그리고 GT designer에서 10진수가 16진수라고 해야 할까요? 이렇게 각각 표시가 가능하도록 바꾸도록 합니다.



당연하지만, 16진수를 GT designer에서 표시하기 위해서는 Numerical display에서 format에 Hexadecimal이라고 지정을 하면 간단하게 해결이 됩니다.



그렇게 해서 그냥 MOV로 옮기기만 했을 경우와 BCD 명령어를 사용해서 같은 숫자가 어떻게 다르게 표현이 되는지에 대해서 실습하려고 합니다.



일련의 버튼도 다시 디자인 하도록 합니다.



GX works2의 시뮬레이터를 작동시키고, GT designer의 시뮬레이션을 작동 시키도록 합니다.



위 스크린샷에 나오는 것처럼, MOV명령을 하면 그대로 입력한 숫자가 표시가 되는 것을 볼 수 있지만, BCD명령어를 쓰면, FND에서 표시하기 위한 코드로 달라진 다는 것을 볼 수 있습니다. 이는 예전에 공부한 적이 있었는 BCD-7 세크먼트 decoder를 연상 시키는 명령어 입니다.


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


이제 새로운 과제로 넘어가야 합니다.



먼저 과제부터 이야기를 하겠습니다. 과제는 위 스크린샷에 보이는 숫자를 입력하고 켜기라는 버튼을 누르면, 해당하는 번호에 있는 램프만이 켜지는 것입니다. 이를 해결하기 위해서 여러가지 시도를 해 보았습니다만, 그다지 결과는 신통하지 않았습니다.



실제로 시뮬레이션을 돌려보니, 제대로 나오지 못하고, 이래저래 두개 이상의 램프가 한번에 여러개 나오는 것을 볼 수 있었습니다.



여기서 정답으로 나올 수 있는 것은 DECO라고 해서 2의 몇 승이냐고 승수를 묻는 명령어입니다. 다시한번 설명하자면, 아래와 같은 공식을 사용한다고 할 수 있습니다.


[DECO D10 Y10 K4]  이라는 명령어라면, D10의 값을 2^D10승 해서 그 값을 Y10에 저장을 하는데 유효한 자리의 숫자를 4비트로 묶어서 4자리 단위로 지정을 하라는 의미입니다.


 

실제로 DECO를 사용해서 제대로 된 결과를 얻는 데는 성공했습니다. 일단 DECO라는 것은 작은 숫자에서 큰 숫자로 가는 명령어라면, 반대로 ENCO라는 것은 큰 숫자를 작은 숫자로 바꾸어 줍니다. 일단 ENCO에 4라는 값을 넣으면, 2^2=4이기 때문에 답으로 승수인 2가 나오게 됩니다.



드디어 래더에서 조건문이라고 해서, 위 스크린샷의 빨간색 박스안에 들어가 있는 내용이 바로 조건을 만족하면 뒤에 있는 출력이 실행 되어라고 하는 것으로 펑션키로 그냥 입력만 하면 됩니다. 위 박스에 들어가 있는 조건은 위에는 X0에 저장된 값이 10진수 16이면 뒤에 있는 조건을 실행하라. 이런 식입니다.



위 스크린샷에서 처음보는 Y0F라는 16진수의 최대의 수인 15를 의미하는 숫자인데, 이 Y0에 들어가는 숫자가 16진수에서 최고의 숫자인 15가 들어가면, 저 Y0F라는 접점이 ON이 된다고 볼 수 있습니다.




이제 GRY와 GBIN이라는 것이 나오게 됩니다. 먼저 GRY라는 것은 [GRY D10 D11]으로 명령식을 입력하게 되면, D10을 그레이 코드라는 것으로 바꾸어서 D11에 입력을 하라는 의미가 됩니다. 그레이 코드에 대해서는 아래의 포스팅을 참조해 주시기 바랍니다.


링크 : Mux와 deMux, 그리고 그레이 코드 수업

그럼 따라오게 되는 GBIN이라는 것이 GRY와 반대로 [GBIN D11 D12]이라고 하면, 그레이 코드인 D11의 값을 2진수 코드로 바꾸어서 D12에 저장을 하라는 의미가 됩니다.



실제로 2진수인 바이너리 코드가 그레이 코드로 바뀌는 것을 볼 수 있었으며, 이 그레이 코드가 다시 2진수로 바뀌는 것을 디바이스/버퍼 메모리에서 확인할 수 있었습니다.


이제 과제를 할 차례입니다. 과제는 간단하게 100리터의 기름탱크가 있는데, 1번 장비는 한번 가동시 10리터의 기름을 소모하며, 2번 장비는 한번에 3리터씩 기름을 소모하게 됩니다. 기름탱크에 있는 기름이 40리터 미만이 되면 1번 경고 램프가 ON이 되며, 15리터 미만이 되면 2번 경고 램프가 3번 깜빡이고 나서 80리터로 기름이 탱크가 채워지게 하면 되는 것입니다.



일단 GX works2에서 래더를 완성하는 데 성공하였습니다.



GT designer에서 디자인을 하나하나 하기 시작합니다.



마지막으로 디자인이 다 끝난 다음에, 경고 램프에 불이 들어오며, 2번 램프에 제대로 된 것을 볼 수 있었습니다. 이것으로 과제까지 다 완료하는 데는 성공했으며, 수요일에 있었던 수업의 내용은 포스팅을 완료 하였습니다.

+ Recent posts

티스토리 툴바