(아 왜 이미지 파일이 안 올라가죠? 미추어 버리겠네요)
잘못된 점있으면 가감없이 집어 주십쇼.
긴 글이니 세줄 요약
- 어떤 조건으로 신호를 켠다
- 그 신호를 다시 내 입력으로 집어 넣고 이 신호로 '참'이 되는 조건으로 계속 켜진 상태를 유지한다
- '그리고'로 또 다른 조건과 묶어서 그 조건이 거짓이 되면 꺼진다.
회로를 안 써도 팩토 즐기는 데 지장은 없습니다. 다만 회로를 익히면 1000시간 만에 끝낼 거 2000시간이 필요하죠. '뭔 말이야?' 사만원 + 사만원 해서 팔만원 주고 팩토 + 스페이스 에이지 샀는 데 1000시간 만에 끝나 버리면? 아쉽잖아요? 이 떄 회로를 씌워주면 플탐이 두배로 늘어난 다 이런 행복 회로 되겠습니다. 참고로 3000시간으로 늘리고 싶다? 철도를 씌워주면 됩니다.
그래서 회로? 랫치? 씌워주면? '뭐가 좋아져?'
아뇨 안 좋아져요. 1000시간 -> 2000시간 되니까 하는 겁니다. 팔만원 뽕 뽑아야죠? 는 농담이고 회로 특히 랫치만이 해결할 수 있는 상황들이 꽤 많습니다.
자 회로 봅시다. '뭐가 뭐 이상이면 뭐 하고 뭐 이하면 뭐 하지 말고' 이렇게 기준치 정해주고 껐다 켰다 하는 건 많이들 쓰고 계실 겁니다. 근데 이 방법은 좀 단점이 있습니다.
100 이상에서 활성화? 99하고 100에서 계속 왔다갔다 하면 투입기 애들 ㅈ나 힘들어 합니다. 실시간으로 보고 있으면 ㅈ나 안쓰러워요. 넣어?멈춰.넣어?멈춰.넣는다?멈춰. 상황에 따라 다르겠지만 경계값에서 계속 활성화/비활성화 되면서 미친 듯이 파르르 떨고 있는 투입기들을 보고 있자면 마음이 좀 거시기 합니다.
물론 이런 기준값 하나의 조건만으로 충분한 경우도 많습니다. 근데 또 랫치없이는 상당히 어려운 상황도 많은 게 사실입니다.
제목에 랫치라고 써서 잘난 척 ㅈ나 하고 싶지만 저도 어디서 배껴서 공부해서 쓰게 된 거라 한 없이 고마운 마음 입니다. 감사합니다 랫치 만들어 준 형님들.
그래서 랫치가 뭐냐? 메모립니다. 어떤 상태를 저장 합니다. 어떤 신호를 줘서 켰는 데 이 신호가 꺼져도 계속 켜진 상태를 유지 합니다. 언제 까지? 끄는 또 다른 신호가 들어올 때 까지. 켜짐과 꺼짐의 신호를 각각 다르게 쓸 수 있고 한 번 켜지면 '유지' 조건 신호가 참인 동안 계속 켜 있는 거죠.
투입기 예를 다시 들면 경계값을 기준으로만 동작/멈춤을 하는 회로 조건에서는 '파르르' 떨림 현상 (제가 붙인 이름이라 대충 알아서 받아들이세요) - 상자에 철판 100개 넘으면 투입기가 빼도록 활성화 해 놨는 데 이 상자에 철판이 다시 채워지는 속도가 투입기가 빼는 속도하고 엇비슷하다? 그러면 경계값에서 매우 빠르게 투입기가 껐다켰다를 반복하면서 뭐랄까 뻘짓하는 느낌이 씨게 옵니다.
랫치는 이런 상황에서 유용하게 쓸 수 있는데, '일단 100개가 넘는 순간 빼기 시작해서 10개 미만으로 내려갈 때 까지 계속 동작해라' 이런 회로를 가능하게 해 줍니다.
다이소 자동 공장 만들 때도 유용하게 쓰이는 데, 예를 들면, 노란 탄창 천개, 빨간 탄창 천 개를 유지하고 싶다.
- 현재 보유 량 : 노란 1000개, 빨간 900개
- 공장에 자동으로 빨간 생산 신호 들어 감. 빨간 만들 때 노란 것도 재료라서 하나 만드는 순간 노란이 천 개 밑으로 떨어지겠죠? 노란 999개, 빨간 901개
- 공장에 노란 신호 빨간 신호 같이 들어 감. 노란이 우선 순위가 높으므로 빨간 만들 던 재료 다 빼고 노란으로 변경
- 노란 한 개 만들고 다시 천 개 됨. 노란 신호 사라지고 빨간 신호만 들어 감.
- 노란 만들던 재료 다 빼고 다시 빨간 생산으로 변경
- 계속 반복. 만드는 시간 보다 재료 넣었다 뺐다 하는 시간이 더 걸림
결국 목표 달성은 하는 데 저거 실제로 보고 있으면 개미친듯이 재료 넣었다가 뺐다가 반복하면서 뻘짓 하는 거 보실 수 있습니다. '아니 ㅅ발 노란 탄창 900개 넘게 있는 데 그냥 빨간 탄창 계속 만들라고!'
이럴 때 랫치를 쓰면 '노란 탄창은 100개 밑으로 떨어지면 그 때 1000개 될 때까지 쭉 만들어' 이렇게 바꿀 수 있죠. 이거는 상위 템하고 하위 템 신호를 동시에 제작법으로 조립 기계에 넣어주면 하위 템 부터 만드는 원리를 같이 이용 하는 겁니다. 이게 안되는 경우도 있어요. 선택 선별 조합기는 수량 비교 조합기가 재료인데 둘 다 동시에 제작법 신호로 넣어주면 선택 선별 조합기부터 만들려고 해서 재료 부족으로 멈춰 버립니다. 화학 공장하고 파이프, 정제된 콘크리트하고 철 막대기? 이런 것들도 그런 경우죠. 이런 건 따로 또 회로 신공이 필요 합니다. 이번 글의 주제는 아니니 패스.
실전으로 가 봅니다.
수량 비교 조합기를 하나 꺼내서 설치하고 입력과 출력을 연결 합니다. 내 출력이 다시 내 입력으로 들어간다. 이게 랫치의 핵심 원리 입니다. 이 부분이 상태 저장을 가능하게 합니다. 지금은 전선 색이 중요하지 않아요 암거나 써도 됩니다. 다만 이제 로보포트든 상자든 뭐든 외부의 신호를 연결해줘야 하는 데 이 때 지금 쓴 색과는 다른 색으로 해야 합니다. 백프로 이렇게 해야 하는 지는 확신이 없는 데 어쨌든 출력에서 입력으로 되돌아가는 신호는 절대로 외부의 입력에 의해서 변경 되면 안 됩니다. 그래서 외부 입력과 색을 다르게 쓰는 게 안전할 겁니다. 저는 이걸 녹색으로 쓰고 외부 입력을 적색으로 하겠습니다.
이 출력 신호를 투입기든 조립 기계든 뭐든 연결해서 활용하게 됩니다. 노란 탄창 해 봅시다.
- 출력: '노란 탄창 1'
- 어떤 조건을 만족하면? '노란 탄창 > 0' (혹은 '노란 탄창 = 1')
'= 1'의 조건이 더 정확하긴 한 것 같은 데 전자의 '> 0' 조건이 입력 하기가 쉽습니다. 마우스 클릭 두 번. 후자는 마우스 클릭 세 번 + 키보드 1 입력.
'뭔 말이야 이게? 입하고 응꼬하고 연결한 기분이잖아?' 좀 그렇긴 하죠. 어쨌든 여기서 부터 정신 바짝 차려야 합니다.
- 아무 외부 입력 없음. 노란 탄창 입력 신호 없음. 출력 신호도 없음
- 출력 신호가 입력으로 되돌아 가지만 출력 신호가 없으므로 결국 신호 없음 무한 반복 중. 0 아무리 더해 봐야 0.
- 이걸 키려면? 키는 조건을 추가 합니다. '노란 탄창 < 1000'.
- '그리고'로 해야 하나? '또는'으로 해야 하나? 아까 랫치의 핵심은 메모리 기능이라고 했죠. 활성화 시키는 신호가 꺼져도 그 상태를 유지 하는 즉, 기억 하는. 그래서 '또는'으로 해야 합니다. '< 1000' 조건이 만족해서 켜진 후 상황이 바뀌어서 조건이 만족되지 못할 경우에도 또 다른 '꺼짐' 조건이 켜질 때 까지는 출력 신호가 '노란 탄창 1'로 고정 되어야 합니다.
- '또는'으로 바꾸는 순간 조건이 참이 되면서 출력 신호가 나옵니다. 팩토 회로의 기본은 뭔가 신호가 없는 데 그 신호를 뭔가와 비교 하거나 산술 연산을 걸면 0으로 간주합니다.
- 노란 탄창 외부 입력 신호가 없는 데 이걸 수량 비교를 하니 0으로 간주 해서 1000 미만 조건이 참이 되고 '또는'을 썼으니 그대로 바로 전체 조건식이 참이 되고 출력 신호가 나옵니다.
일단 일정 신호 조합기로 노란 탄창 신호 99, 100, 999, 1000을 각각 다른 구역으로 만들어서 각각 껐다 켰다 할 수 있는 '가짜 신호 생성기'를 하나 만듭시다.
일단 모든 구역 다 꺼서 신호 안나오게 해 두고 이걸 아까 전선과는 다른 색깔 적색으로 랫치 꽁무니에 연결 합니다. 이렇게 연결하고 랫치를 클릭 해 보면 적색, 녹색 따로 선택 하는 부분이 활성화가 됩니다.
- 외부 입력이 적색으로 들어오니까 '노란 탄창 1000 미만' 조건은 적색만 선택.
- 자체 순환하는 연결은 녹색이니 '노란 탄창 > 0' 조건은 녹색만 선택.
두 연결을 같은 색으로 해 버리면 수치가 섞여서 랫치 동작이 이상해 지겠죠? 아마 각각 다른 신호다? 하면 같은 색으로 배선해도 괜찮을 겁니다.
현재는 '< 1000' 기준이 참이 되어서 전체식이 참이 되고 출력 신호 '노란 탄창 1' 나오는 상태 입니다. 이 때 일정 신호 조합기의 1000 신호를 키면? 꺼질까요? 출력 신호가 사라질까? 1000 미만이 키는 조건인데 1000 신호가 들어오니 꺼져야 하나? 이럴 거면 랫치가 필요 없겠죠. 1000 신호를 줘도 안 꺼지는 게 정상이고 제대로 동작 하는 겁니다.
- 외부 입력이 없어서 '< 1000' 조건 참이 되고 출력 신호 '노란 탄창 1'
- 이 출력이 입력으로 되돌아가서 위의 조건과 상관 없이 '노란 탄창 > 0' 조건이 만족하므로 전체 조건식 참. 출력 신호 다시 '노란 탄창 1'. 이 순간 이후로는 '< 1000' 조건의 참/거짓 상태는 아무 역할도 안합니다.
- 무한 반복. 1나가서 1들어오고 참이라 다시 1나가고 1들어오고 참이라 다시 1나가고 ...
결과적으로 '< 1000' 조건은 최초 활성화를 위해 한 번 쓰이고 이 회로가 꺼지는 데는 관여를 못합니다. 시동은 걸어주는 데 끄지는 못하는 거죠.
참고로 이 상태에서 랫치 신호를 끄려면 일정 신호 조합기에서 1000 이상을 쏴주는 상태에서 랫치 조합기를 '잘라내기' 했다가 다시 붙여 넣으면 초기화 됩니다. 다시 설치 하는 순간 1000 이상의 신호가 들어오고 있으니 '< 1000' 조건도 거짓이 되고 '> 0' 조건도 거짓이라 꺼집니다.
제가 풀고라 재활용 공장에 모든 템 일정 수치 넘으면 다 갈아버리는 회로를 랫치로 만들어서 쓰고 있었습니다. 100k 넘으면 활성화 90k 미만 되면 비활성화. 한 번 갈 때 만개씩 쭉 갈아라 이런 의도 였지요. 여기다 제외 항목을 설정한 일정 신호 조합기를 연결해서 홀뮴 광석은 제외 처리를 했는 데 전자기 팩 설정을 까먹은 겁니다. 이 때는 아직 전자기 팩 공장 세우기 전이라서 그랬죠. 전자기 팩 공장 다 세우고 이리저리 수정도 해 가면서 계속 생산하다 보니 이게 십만개가 넘었나 봅니다. 갑자기 공장들에 분홍색 아이콘이 주루룩 뜨면서 전자기 팩을 막 갈아대길래 깜짝 놀라서 일단 제외 목록에 추가는 했는 데 랫치 회로는 이미 활성화 된 상태라 요청 상자에 들어가는 신호가 꺼지질 않는 겁니다. 맨붕이 확 오는 데 그 때 떠오른 게 저 잘라내기 신공이 떠올라서 그나마 피해를 좀 줄일 수 있었다 하는 웃픈 일화가 있습니다.
켜는 법은 알았으니 끄는 법을 알아 봅시다.
'언제 끌까?' '노란 탄창 >= 1000'? 이러면 랫치 쓰는 의미가 없죠. 999 에서 켜지고 1000 넘으면 꺼진다? 뭔가 이상하죠. 이래서 우리가 처음에 추가 한 조건에 '최소값'을 넣는 게 자연스럽습니다.
'1000개 미만에서 활성화 해서 1000개 이상되면 꺼라' 이거는 좀 말이 안되죠.
'100개 미만에서 활성화 해서 1000개 이상되면 꺼라' 이게 좀 자연스럽습니다. 이 말을 좀 다르게 표현해 보면,
'100개 미만에서 활성화 해서 1000개 미만 까지 활성 상태를 유지해라'
그래서 아까 입력한 '< 1000' 조건을 '< 100'으로 바꿔주고 끄는 조건, 다르게 말하면 '활성 상태를 유지하는 조건'을 추가 합니다. 이 조건이 거짓이 되면 결과적으로 끄는 신호가 되겠죠. 참인 동안은 활성 상태를 유지하구요.
입력: 적색 신호: 노란 탄창 < 100 '또는' 녹색 신호: 노란 탄창 > 0 '그리고' 적색 신호: 노란 탄창 < 1000 출력: 노란 탄창 1처음에 외부 입력 연결 없이 이대로 설치하면 활성화 됩니다. 출력 신호가 나가요. 노란 탄창 입력이 없으니 0이고 이러면 '< 100' 부분이 참이 되버려서 활성화 됩니다. 아까는 우리가 이걸 끌 수가 없었죠. `출력: 노란 탄창 1'이 단 한순간이라도 활성화 되면 '녹색 신호: 노란 탄창 > 0' 이 부분이 참이 되고 다시 출력 1이 나가서 뺑뺑이를 돌기 때문에 단 한 틱이라도 활성화 되면 '무한으로 계속 켜져 있다'.
그런데 새로운 조건을 '그리고'로 같이 묶어 줬습니다. 그러면 이게 '녹색 신호: 노란 탄창 > 0' 이 부분만으로는 다시 출력 신호 '노란 탄창 1'을 내보낼 수가 없어요. '< 1000' 신호도 동시에 만족해야 합니다.
외부 입력을 연결하고 노란 탄창 신호가 1000이 되면? 그럼 꺼집니다. 1000 이상의 외부 입력을 연결하는 그 딱 한 순간(한 틱?) '녹색 신호: 노란 탄창 > 0' 이 조건은 참일 겁니다. 근데 그 밑에 조건 '< 1000'이 거짓이 되어서 되돌아오는 출력 신호가 없어지죠. 그 다음 틱 부터는 둘 다 거짓이 됩니다.
다시 출력 신호가 나오려면 첫번째 조건이 다시 한 번 딱 한 순간 만이라도 조건을 만족하면 됩니다. 그 이후로는 또 첫번째 조건과 상관 없이 출력 신호가 쭉 유지되게 됩니다. 언제까지? 제일 아랫 줄 '< 1000'을 만족하는 동안. 1000 넘는 순간 이제 그만~
아까 만들어 둔 일정 신호 조합기의 각 숫자별로 껐다 켰다 하면서 실험해 보세요. 랫치 조합기 출력에 램프 하나 달아서 불 들어노는 조건 '노란 탄창 > 0' 이렇게 해두고 실험해 보면 시각적으로 딱 느낌이 옵니다.
- 0 - 99 -> 켜짐.
- 999 까지 켜짐 유지
- 1000 넘어가면 꺼짐.
그러면 저 신호들은 꼭 같은 신호로만 구성이 되야 하냐? 그건 아닙니다. 각각 뭘로 하든 상관은 없어요. 핵심은 내 출력 신호를 다시 내 입력으로 받아서 그 신호로 '참'이 되는 항목이 꼭 있어야 합니다. 그게 상태를 유지하는 핵심이거든요. 그래서 결국 출력 신호와 '> 0' 조건의 신호 종류는 같아야 합니다. 이게 다르면 랫치가 성립이 안되겠죠.
입력: 적색 신호: [가상 신호 A] > 0 '또는' 녹색 신호: [가상 신호 B] > 0 '그리고' 적색 신호: [가상 신호 C] > 0 출력: [가상 신호 B] 1이런 식으로 자유롭게 섞어도 됩니다.
- A > 0 -> 켜짐
- 켜짐 유지. A가 '<= 0' 상태가 되어 거짓이 되어도 출력 신호는 켜진 채로 유지 되는 겁니다.
- C > 0 -> 꺼짐. 맞을까요? 아닙니다. C <= 0 이어야 꺼집니다. 이 조건의 의미는 '이 조건을 만족하는 동안 출력 신호 활성화 유지' 입니다.
다만 출력 신호와 녹색 신호: [가상 신호 B] > 0 이 부분은 같은 신호를 써야 참 상태가 유지 되겠죠. '켜짐' 조건이 여러가지도 가능할까? 가능합니다.
입력: 적색 신호: [가상 신호 A] > 0 '또는' 적색 신호: [가상 신호 D] > 0 '또는' 녹색 신호: [가상 신호 B] > 0 '그리고' 적색 신호: [가상 신호 C] > 0 출력: [가상 신호 B] 1'꺼짐' 조건 여러개도 가능할 까? 가능합니다.
입력: 적색 신호: [가상 신호 A] > 0 '또는' 적색 신호: [가상 신호 D] > 0 '또는' 녹색 신호: [가상 신호 B] > 0 '그리고' 적색 신호: [가상 신호 C] > 0 '그리고' 적색 신호: [가상 신호 E] > 0 출력: [가상 신호 B] 1이거는 C 하고 E가 동시에 '<= 0' 이어야 꺼지겠죠. 각각 별도로 하고 싶으면?
입력: 적색 신호: [가상 신호 A] > 0 '또는' 적색 신호: [가상 신호 D] > 0 '또는' 녹색 신호: [가상 신호 B] > 0 '그리고' 적색 신호: [가상 신호 C] > 0 '또는' 녹색 신호: [가상 신호 B] > 0 '그리고 적색 신호: [가상 신호 F] > 0 출력: [가상 신호 B] 1이렇게 하면 C 하고 F 각각 따로 동작 합니다. C, F 조건 중 한 가지만 만족해도 꺼지는 거죠. 녹색 신호: [가상 신호 B] > 0 이 부분은 각 유지 조건에 반복적으로 들어가는 거 중요 합니다. 마지막으로 한 가지 더 추가하면,
입력: 적색 신호: [가상 신호 A] > 0 '그리고' 적색 신호: [가상 신호 D] > 0 '또는' 녹색 신호: [가상 신호 B] > 0 '그리고' 적색 신호: [가상 신호 C] > 0 '또는' 녹색 신호: [가상 신호 B] > 0 '그리고 적색 신호: [가상 신호 F] > 0 출력: [가상 신호 B] 1A와 D가 동시에 0이 넘어야 켜지겠죠.
제가 꺼짐이라는 단어를 많이 썼는 데 엄밀히 말하면 '유지' 조건 입니다. 이걸 머리속에서 꺼짐으로 인식하면 부등호 방향을 거꾸로 하게 되는 경우가 있더라구요. 이것 때문에 한참을 해맨 적이 있습니다. 보통 최소값, 최대값을 입력하고 쓰는 경우가 흔할 텐데. '100보다 작아지면 키고 1000보다 작을 때 까지 유지' 이렇게 되기 때문에 '< 100', '< 1000' 이런 식으로 부등호 방향이 같은 게 맞습니다. 1000보다 커지면 꺼야지 하고 '> 1000' 이러면 100 - 999 구간이 거짓이 되버리기 때문에 출력 신호 유지가 안됩니다. 99에 한 개 만들면 100 되고 그냥 꺼지는 거죠.
구체적으로 실제 여러가지 활용 예를 들어가면서 더 써보고 싶지만 글이 너무 길어져서 다음 기회에.
랫치 만들기 세 줄 요약.
- 녹색으로 출력과 입력 연결
- 내가 원하는 출력 신호를 정하고 출력 값 1로 설정
- 같은 신호로 입력 조건 '신호 > 0'
- 켜는 조건, 활성화 시키는 조건 입력 '뭐가 얼마보다 작으면...'
- 3과 4의 신호는 '또는'으로 연결
- 활성화 유지 조건 입력 '뭐가 얼마 보다 작은 동안...'
- 3과 6의 신호는 '그리고'로 연결
- 외부 입력 적색으로 입력에 연결
- 3은 녹색 신호만 선택. 4와 6의 외부 신호는 적색만 선택
- 출력을 원하는 곳에 연결하여 2에서 정한 신호가 > 0이면 활성화 아니면 비활성화 혹은 그 반대로 설정하여 사용
세 줄 넘네요. 긴 글 읽어주셔서 감사합니다.
(스크린샷 편집한 게 업로드 에러가 계속 나서 못 올린게 아쉽네요)
댓글 0