현황: 주조소 1개로 쇳물과 철판을 동시에 만들고 있음.
정확한 횟수(10회)만큼 쇳물을 만든 후, 레시피 전환 시 잔여물이 남지 않도록 한 상태.
이에 관여하는 4개의 조합기가 있음.
1번 조합기. 주조소를 컨트롤하는 역할.
D는 주조소의 '제작 완료' 신호임
쇳물 레시피를 유지함과 더불어 투입한 철광석과 방해석, 제작 횟수를 카운팅함.
처음 가동하면 D는 1, 3, 4, 6, 9, 10, 12, 13을 거쳐 15가 된 후 레시피가 꺼짐.
3번, 4번 조합기.
잔여물이 남지 않게 마지막 투입 시 투입기 손 크기를 조절하는 역할.
인풋은 메모리인 1번 조합기에서 읽어옴.
쇳물 레시피를 10번 돌리니까 정확히 철광 500개, 방해석 10개만 투입함.
D=15가 된 후 1번 조합기가 쇳물 레시피를 끄는 데 1틱의 딜레이가 생기지만, 재료가 더 없으니까 거기서 멈추게 됨. 여기까진 괜찮음.
그런데 철판 제작 후 쇳물로 전환 시, 철판 제작완료 신호가 혼입되는 경우가 생김. 쇳물이 500 미만이라 래치가 켜지기 때문에 그것도 그대로 카운팅됨.
다행히 쇳물을 10번 만들면 쇳물 7500이 만들어지는데, 이는 철판 제작 375번을 수행할 수 있는 양이라 마지막 철판은 생산성 보너스를 못 받음. 평소엔 D=1만 추가됨.
D가 1,3,4,6,9,10,12,13 >> 2,4,5,7,10,13,14가 되는 거라 D<15 조건을 벗어나지 않음.
진짜 문제는, 우주선을 만든 후 두 번째 쇳물 생산임.
정상운행 중엔 정확히 7500을 만들고 7500을 쓰지만, 이때는 다름. D=1이 아니라 D=2가 들어와 모든게 어긋나버림. 쇳물 레시피가 한 턴 일찍 끝나버려서 잔여물이 생긴다는 얘기임.
그래서 2번 조합기를 넣음. D가 2인데 쇳물이 한 턴도 안 만들어진 상태라면, D에서 1을 빼버림. 500이 아니라 700인 이유는 철판 레시피 종료와 동시에 주조소 내 쇳물 200이 역류하기 때문. (실제로는 680이 찍힘)
정상적으로 작동하지만, 굉장히 찝찝함.
질문사항은 다음과 같음.
1. 잔여물 없는 정량배식을 보통 어떻게 구현함?
스루풋 손실이 없었으면 좋겠음.
2. 위 문제의 해답이 여기에 적용이 곤란하다면, 1번과 2번 조합기를 합칠 수 있는 방법이 있음? D=2로 시작하는 경우만 예외처리가 가능한가?
3. 3번과 4번 조합기를 합치거나 비교조합기로 대체할 수 있음?
우주선 청사진:
공9업 이상에서 테스트하면 됨. 주조소에 직접 뭔가를 넣지 말 것
A: 쇳물 생산 시작값을 바꿔봐
>>가능함. 그렇지만 일반해를 얻고 싶음. 이건 배관 사이즈 따라 달라지는 거라 디자인이 바뀔 때마다 시험해야 함
1. 잔여물이 안 남게 하고 싶으면 펌프 하나 달아서 주조소에 들어가는 쇳물양까지 정밀하게 조정하던가 작동 조건을 <500 같이 배관 사이즈 따라 달라지는 수치로 하지 말고 =0 으로 정확하게 다 쓰게 하면 될 테고 2. 2번 조합기는 달려있는 것만으로도 수치에 오류를 일으키니까 합칠 수 있냐가 아니라 그냥 삭제해야 하고 3. 3번 조합기는 방해석 넣는 투입기를 묶음 투입기로 쓰고 묶음 크기를 10으로 맞춘 뒤 'D가 0일 때만' 넣게 하면 아예 삭제 가능한데 빨간 투입기 쓰는 현 설계로는 불가능, 4번 조합기는 이것저것 조건 주렁주렁 달면 삭제가 가능할 것도 같은데 조합기 하나로 제어하는 현 설계보다 좋을 것 같진 않으니 그냥 그대로 쓰면 됨
녹은 철<500이면 철광석 녹이는 레시피 신호를 보내도록 짜놨는데 생산건물들은 뭔가를 제작하는 중이면 중간에 레시피 신호가 바뀌어도 일단 만들던 건 끝까지 만들고 난 다음 레시피를 바꾸게 되어 있음. 그래서 주조소는 조합기를 쓰는 이상 어쩔 수 없이 발생하는 1틱 차이 지연으로 인해 녹은 철 신호가 들어오기 딱 1틱 전에 철판 제작을 시작해버려서 '철판을 만드는 중'인데, 1번 조합기는 주조소가 조건 무시하고 철판 계속 만든다는 걸 모르니까 '녹은 철을 만드는 중'으로 인식해서 철판 완료했을 때 발생하는 D신호를 그대로 저장해서 D값이 오류가 나는 거임. 이건 우주선 운행이랑 아무 관련 없는 부분이니까 정상운행 중에는 7500 그대로 쓴다고 했는데 아마 정상운행 중에도 무조건 에러 날 걸?
@Nheitarahten 일정 신호기에서 무조건 철판 신호 보내게 하지 말고 수량 비교기에서 쇳물 > 0일 때만 철판 신호 보내게 수정하셈. 1번 조합기도 <500 말고 = 0으로 바꾸고 '철판 신호가 0일 때'를 AND 조건으로 추가하고. 주조소도 '내용물 읽기' 밑에 '제작 중인 내용물 포함'에도 체크하면 잘 작동함.
일단 100시간 테스트에서는 문제 없었음. 유체 출렁임이 없어서 항상 똑같이 작동하는 것 같아. 그리고 세 번째 댓글의 내용은 적용할 수 없는 게, 주조소가 마지막 쇳물을 빨아들이는 데 걸리는 시간이 있어서 잔여물이 약간 남는 시스템 대비 이점이 없어져. 나머지도 쇳물=0에 의존하는 내용이고. 유체가 아주 일관되게 거동한다는 확신이 서서, 역치를 500-20=480으로 설정하고 2번 조합기를 삭제해 봤는데, 맘에는 안 들지만 너무 깔끔하게 작동한다. 여기서 변수가 생길 게 있을까?
@797 변수라고 해봐야 파이프 기이이일게 깔아서 틱당 유체 전달량이 느려지는 거 정도일 텐데 공간 압축해야 하는 우주선이면 길게 깔 일은 없을 테니 지금 방식으로 깔끔하게 작동하면 문제 없다고 보면 됨