안녕하세요?


이번 포스팅에서는 크리스마스가 오기전인 이번수 화요일에 있었던 수업의 내용을 한번의 포스팅에 다 올리고자 했습니다만, 그게 만만치 않은 내용이 많아서 하는 수 없이 2부분으로 나누어야만 했습니다. 일단 수업의 절반에 해당하는 내용을 포스팅 하도록 해 보겠습니다.



먼저 적산 타운터를 사용하기 위한 사전 작업을 진행 하도록 합니다. 우선 디바이스 합계는 29K라는 단위를 만족해야 하기 때문에 데이터 레지스터라는 것을 12K에서 11K로 줄이도록 하고, 적산 타이머가 원래는 0K였는데, 이것을 1K로 올리도록 합니다. 여기서 1K라는 것은 듣기로는 1024개의 디바이스를 사용 할 수 있는 단위라고 합니다.



첫번째 과제입니다. 자동생산 버튼(M0)를 누르면 3초에 1개씩 생산되는 물건을 7회 생산시에 M21이 점등되고, 9회 생산이 되면 M20이 점등이 되도록 하며 동시에 정지가 됩니다. 그리고 정지(M1)을 누르면 정지되나, 초기화는 되지 않고, 리셋버튼을 눌러야만 카운터가 리셋이 되는 시스템입니다.



추가로 TiP이라면 팁인게, 위 스크린샷에 나와 있는 것처럼 Blink-블링크를 켜 두는 것만으로 깜빡이는 점멸을 만들 수 있다는 것입니다. 



그리고 GT designer에 위와 같이 터치 스크린에 뜰 수 있도록 만들어 주도록 합니다.



위 스크린샷처럼 제대로 작동을 하는 것을 확인할 수 있었습니다. 이것으로 과제를 완성하기는 완성했습니다.



먼저 위 스크린샷을 보시면, 이전에는 불 수 없었던 Z0, Z1이라는 것을 보실 수 있으실 것인데, 이건 인덱스라고 하는 것으로 D0001과 같은 데이터처럼 변수는 아닙니다. 그렇게 해서 [MOV K20 Z0]라는 것은 Z0라는 인덱스에게 10진수 숫자인 20을 집어 넣으라는 의미가 됩니다. 그리고 [MOV K-5 Z1]이라는 것은 10진수 -5를 인덱스인 Z1에 전송하라는 의미가 됩니다.




그리고 아래에 있는 [MOV K100Z0 W53Z1]이라는 것이 있습니다. 먼저 K100Z0라는 것은 위에서 Z0에 20이라는 십진수 숫자를 넣었기 때문에 간단하게 계산은 K100 + Z0 = 100 + 20 = 120 이라는 답이 나오게 됩니다. 하지만 여기서 복잡한 것은 W53Z1이라는 것입니다. 


그냥 보면 53-5 라는 것으로 보일 것 같지만, 문제는 W라는 것은 16진수라는 의미가 있습니다. 그래서 하는 수 없이 16진수 숫자와 10진수 숫자를 그냥 계산을 할 수 없으니, 계산결과를 16진수로 변환해서 답은 4E가 됩니다. 그리고 여기서 조금은 햇갈릴 수 있는 것이 나오는 데, 바로 [MOV K2X64 K1M33]의 의미입니다.



먼저 위 스크린샷에 보이는 것처럼 온라인 메뉴에 나와있는 디바이스/버퍼 메모리 알람 모니터라는 것을 불러 오도록 합니다.



일단 위 스크린샷에 나오는 것처럼 값이 저장이 되어 있는 것을 볼 수 있습니다.



다음으로는 옵션으로 들어가서, 10진수로 래더에 나오는 숫자를 16진수로 바꾸도록 합니다.



우선은 래더에서 16진수로 나오는 것을 볼 수 있었습니다.



먼저 X64라는 자리와 M10이라는 것을 보도록 합니다. 우선 X는 16진수 디바이스이며, M은 10진수 디바이스라는 것을 알 수 있었습니다.




아직까지는 제대로 된 이해도 없이 일단은 진도를 따라가는 중입니다.



일단 위 스크린샷에 나와 있는 [MOV K2X50Z0 K1M38Z1]이라는 것에 대해서 말을 풀어 가야 하는데, 먼저 X50Z0은 16진수 50에 10진수 20을 더하는 것처럼 보입니다. 그러나 여기서 착각이 시작될 수 있는 것이, 이건 단순히 계산을 하는 것이 아니라, 일종의 메모리에 공간을 할당하는 작업이라는 것입니다.



그래서 그냥 메모리를 보면, 아무런 값도 입력을 하지 않았기 때문에 0만 있는 것입니다. 그래서 여기다가 설정값 12를 입력하도록 합니다.



먼저 X50 + Z0의 값은 16진수로 64가 나오게 됩니다. 중요한 것은 이 64라는 것은 위 스크린샷에 보이는 것처럼 X라는 디바이스의 64번째 자리-다른 의미로는 X60의 줄에 4번째 자리부터 디바이스에 데이터를 저장할 공간을 할당하라는 의미가 됩니다. 


그리고 K2X64 라고 하면, 앞에 붙은 K2라는 것은 16진수의 숫자 한자리를 표현하기 위한 비트4개=이게 FND에서 숫자 한개를 표현하는데 4진 카운터가 1개 필요했는데, K2라고 하면 이 4진 카운터 2개 = 4비트 2개를 의입니다. 그리고 X64, X65 이런 것은 1비트입니다. 그래서 12라는 16진수를 집어 넣었는데, 2자리이기 때문에 첫자리는 1, 두번째 자리는 2이기 때문에 위에 표시된 갈매기 표시에서 K2라서 2번 뛰고, 다음에는 1과 2를 만들기 위해서 위 스크린샷처럼 두 부분이 1로 ON이 된 것을 볼 수 있습니다.


오해가 될까봐 하나 표현을 하자면, 저 자리 하나하나, 즉 디바이스 하나하나 자리에는 ON, OFF만 기록을 할 수 있기 때문에, 이렇게 4개씩 묶여서 표현이 되는 것입니다. 그리고 K1M38Z1 이 있는데, 이건 38-5라서 M33에 4비트 1개만 할당을 한다는 의미가 있습니다.


그래서 마지막으로 [MOV K2X64 K1M33]이라고 하면, 4비트 2개에 저장된 데이터를 4비트 1개의 공간에 넣으라는 명령이 됩니다. 그래서 앞의 한자리를 들어갈 공간이 없습니다.



그래서 위 스크린샷에 나온 것을 보면, 2만 M33부터 M36까지 입력이 된 것을 볼 수 있습니다.



이제 DMOV라는 것이 나오게 됩니다. 위 래더의 스크린샷을 보시면 M0과 M1 두가지가 있는 것을 보실 수 있는데, 둘다 같은 결과를 내지만, DMOV를 사용하게 되면, MOV를 2번 사용할 것을 1번으로 줄일 수 있는 것입니다.




그래서 값을 입력해서 한번 제대로 작동하는 지를 살펴 보도록 합니다.



Y0부터 시작하는 DMOV의 결과입니다. 일련의 패턴이 나오는것을 보실 수 있는데, 이제 초기화를 시켜두고 M1을 실행시켜 보도록 합니다.



일종의 증거 사진입니다.



디바이스의 자리가 다른 것만 빼면 같은 결과가 나오는 것을 볼 수 있습니다.



이렇게 MOV가 16비트의 데이터를 전송한다고 하면, DMOV는 32비트의 값을 전송한다고 할 수 있습니다.



이제 FMOV입니다. 이 내용은 10진수 값인 8을 M10을 기준으로 해서 4비트씩 뛰어서 3번 나누어 저장을 한다는 의미를 지니고 있습니다.



그래서 M10~M13, M14~M17, M18~M21 이라는 디바이스 자리에다가 십진수 8이라는 값을 위 스크린샷과 같은 형태로 데이터를 저장하는 것을 볼 수 있습니다.



다소 복잡해 보일 수 있는데, 위 스크린샷처럼 그냥 10진수 8이라는 값을 3군데 나누어서 저장을 한다는 의미가 있다고 보시면 됩니다. 


그냥 10진수만 쓰면 될 것 같기는 하지만, 기계는 2진수를 쓰고, 이게 확장이 되면 10진수가 아니라 16진수가 되게 됩니다. 그래서 예전 고등학교때 배웠던 16진수를 어디에 쓰는가 했더니, 이게 다 여기서 사용이 된다는  생각이 들기도 합니다. 다음 포스팅에서 나머지 내용을 마져 포스팅 하겠습니다.

  1. 2018.06.16 16:07

    비밀댓글입니다

+ Recent posts

티스토리 툴바