이 글은 로봇 물류와 비슷한 시스템을 이번 2.0으로 추가된 기차 인터럽트와 회로들로 구현하는 방법에 관한 글임. 글 맨 마지막에 테스트에 사용된 맵과 청사진을 공유함.
이게 진짜 실용적인지는 모르겠지만 그래도 재밌으니까 한번 해봄. 그냥 추가된거 가지고 이런 짓 하는 사람도 있구나 하고 봐주셈. 맨 밑에 5번만 읽어도 뭐 해놓은 건지는 대충 짐작 갈거임.
대부분 이미 비슷한/다른 방법으로 구현된 것들임. 특별히 추가된건 능동형 공급 상자 구현 정도. 이미 좋은 기차 청사진 많아서 쓸 사람 있을 지 모르겠지만 청사진만 가져가거나 테스트 맵 다운받아서 구경만 해줘도 좋을 것 같음.
이 글은 이런걸 다룸
1. 간단한 로봇 물류 리뷰
2. 기차 인터럽트 메커니즘
3. 기차 물류 구성요소
4. 각 역의 작동 메커니즘과 실제 구현
5. 맵과 청사진 공유 및 사용 방법
1. 로봇 물류 네트워크
로봇 물류는 아래와 같은 요소들로 구성됨
- 로보포트
- 수동형 공급 상자
- 능동형 공급 상자
- 요청 상자
- 보관 상자
- 완충 상자
다들 알겠지만 기본적으로 보관 상자와 수동형 공급 상자에서 요청 상자로 옮기며, 능동형 공급 상자는 아이템을 보관 상자로 보내더라도 무조건 비우려 하고, 완충 상자는 버퍼를 담당함.
로봇의 아이템 수송 우선순위를 구체적으로 써볼 수 있는데, 플레이어 물류 요청 & 폐기를 제외한다면 상자 간 우선 순위는 다음과 같음.
- 공급 우선 순위
능동형 공급 상자 > 보관 상자 = 완충 상자 > 수동형 공급 상자
- 대상 우선 순위
요청 상자("완충 상자로부터 요청"이 켜짐) > 요청 상자 > 완충 상자 > 보관 상자
2. 기차 인터럽트 작동 메커니즘
1) 인터럽트
이미 다들 대충 알거라 생각함.
역에서 출발하기 직전에 인터럽트 조건을 검사하고, 작성된 인터럽트 조건이 만족 될 때 미리 쓰여진 임시 일정을 현재 일정 바로 뒤에 끼워 넣음.
2) 인터럽트 작동 메커니즘
역에서 출발 조건이 만족 되어 출발 되기 직전에 위에서 부터 순서대로 인터럽트 조건을 검사함. 바로 밑에서 더 자세히 설명하겠지만, "순서대로"가 중요함.
만약 이미 다른 인터럽트로 붙여 넣어진 일을 수행하는 중이라면, "다른 인터럽트를 인터럽트 하도록 허용"옵션이 켜진 인터럽트만 검사함. 하지만 이 글에서 쓸 인터럽트는 모두 일정이 하나 밖에 없어서 "인터럽트 중"에 인터럽트 조건을 검사하는 상황이 없음. 그래서 이 옵션은 일단 무시해도 됨.
인터럽트 검사 방식은 순차적임. 위쪽부터 차례대로 검사하다가 조건이 만족된 인터럽트가 있는 경우 그 보다 아래 있는 인터럽트 들을 무시하고 해당 인터럽트를 발생 시킴.
따라서 더 중요한 인터럽트를 위에 배치하여 인터럽트 간의 우선순위를 줄 수 있음. 다르게 해석하자면 위에서 이미 조건 1을 검사 했다면, 그 뒤 인터럽트부터는 조건 1이 거짓이라고 가정하고 인터럽트 조건을 작성해도 됨.
의사코드로 표현하자면
만약 (인터럽트 1 조건) 이라면:
일정에 인터럽트 1 끼워넣기
아니면 만약 (인터럽트 2 조건) 이라면:
일정에 인터럽트 2 끼워넣기
아니면 만약 (인터럽트 3 조건) 이라면:
일정에 인터럽트 3 끼워넣기
아니면 만약 (인터럽트 4 조건) 이라면:
스케쥴에 인터럽트 4 끼워넣기
이렇게 적어볼 수 있음.
3) 와일드 카드를 이용하는 일반화 인터럽트
아이템, 연료, 유체, 회로 가 있음.
아이템, 연료, 유체는 같은 방식으로 동작함.
아이템 매개 변수에 대해서 설명하자면, 기차 자신의 화물 인벤토리에 있는 아이템들을 순서대로 인터럽트 조건에 대입해보고, 만족하는 첫 번째 아이템을 가져옴. 그리고 해당 아이템을 인터럽트 발생 시 붙여 넣을 일정에 대입함.
만약 조건을 만족하는 아이템이 없으면 해당 인터럽트는 발생하지 않음.
연료, 유체도 똑같이 동작 함.
사실 회로도 다를 게 없다. 인터럽트가 발생하는 시점은 기차 역의 출발 조건이 만족 되어 출발하기 직전이라고 했는데, 이 시점에서 기차 정류장을 통해 기차로 전송된 신호 중에서 조건을 만족하는 것 중 첫 번째 신호를 가져오고, 이후 진행할 일정에 대입함.
3. 기차 물류 네트워크 구성 요소
이제 여기부턴 내가 로봇 물류 작동 방식을 따라서 기차로 비슷하게 만들어 본 것임.
로봇포트 -> 대기 역 & 연료 역
수동형 공급 상자 -> 수동형 공급 역
능동형 공급 상자 -> 능동형 공급 역
요청 상자 -> 요청 역
보관 상자(필터 지정됨) -> 보관 역 & 보관 공급 역
보관 상자(필터 없음) -> 일반 폐기 역
완충 상자 -> 요청 역 & 수동형 공급 역 (미구현)
로봇 물류 네트워크의 각 구성 요소를 이렇게 역으로 구현했음.
완충 상자의 경우 기차를 일반적으로 사용한다면 딱히 필요해 보이지 않음. 완충 역을 만들 바에, 요청 역 자체에 버퍼를 키워주면 되므로 필요 없다고 생각했음. 만약 필요하다면 아래 보관 역 구현한 것 처럼 완충 요청 역 따로 만들어서 수동형 공급 역과 합쳐주면 됨.
요청 상자의 "완충 상자에서 요청" 옵션도 같이 구현해야 하고, 불가능해 보이진 않으나 아직 구현 아이디어를 생각해보지 않음.
보관 상자의 경우 아이템을 받는 보관 역, 아이템을 주는 보관 공급 역 두 개로 나눠졌는데, 역을 하나만 쓰고 회로로 모두 컨트롤 하는 방법을 생각해보긴 했으나, 회로와 요청 메커니즘이 지나치게 복잡해지는 것 같아 역 두 개로 따로 분리했음.
1) 기차 물류 우선 순위
로봇 물류에도 우선순위가 중요한 역할을 하므로, 기차 물류에도 비슷한 우선 순위를 부여 해줘야 했음.
- 공급 우선 순위
능동형 공급 역 > 보관 역 > 수동형 공급 역
- 대상 우선 순위
요청 역 > 보관 역
여기서 공급 우선 순위는 수동형, 능동형, 보관 전부 이름을 같게 해두고, 2.0에서 추가된 기차 정류장 우선 순위를 다르게 해서 적용했고, 대상 우선순위는 위에서 언급한 인터럽트 우선 순위를 이용해서 구현함. 기차가 아이템을 받으면, 가장 먼저 요청 역 중에서 받아줄 수 있는 검색함. 만약 적절한 요청 역이 없으면, 수동형 공급 역의 경우 그냥 기다리고, 능동형 공급 역의 경우 보관 역으로 보냄. 능동형 공급 역이 있는데 해당 화물의 보관 역이 없는 경우, 그냥 경로 없음 띄우면서 기다림.
2) 필요한 역
위에서 역 종류들 많이 나눠 놓았었는데, 실제로 역 이름으로 쓰일 적은 아래 다섯 가지임.
- 대기 역
- 연료 공급 역
- [item=item-tag]* 요청 역
필요에 따라 우선순위 조정
- 공급 역
우선 순위 다른 3 개, 능동형 > 보관 > 수동형,
능동형의 경우 아이템이 남을 때 보관역으로 보낼 수 있도록 따로 회로를 설계
- [item=item-tag]* 보관 역
이중 공급 역, 보관 역, 요청 역 세 가지는 유체 버전이 따로 필요함. 서로 다른 길이의 기차를 운용한다면, 그 역시 나눠 줘야 함. 이 부분은 편하게 할 수 있게 청사진으로 만들어둠.
* [item=item-tag]는 아이템 아이콘임. item-tag를 iron-ore 같은거로 바꾸면 해당 아이템 아이콘이 들어감.
3) 기차 인터럽트
연료 재보급
연료 부족시 활성화.
연료 보급 역으로 가서 연료를 채움.
- 유체/아이템 적재
화물 인베토리가 비워졌고, 공급 역이 가득차지 않았을 때 활성화.
공급역으로 이동해 화물을 채움.
- 수동형 공급 역/보관 역에서 요청 역으로 수송
화물이 하나라도 있고, 수동형 공급 역에 있다는 신호를 받고 있을 때 활성화.
해당 화물의 요청 역으로 이동 해 화물을 비움.
(요청 역이 켜져 있을 조건을 안 넣은 이유가 있음. 요청 역이 꺼져 있는데 수동형 공급 역에서 화물을 채우는 사고가 난다면, 요청 역이 다시 켜질 때 까지 공급 역에서 대기하도록 하기 위함임.)
- 능동형 공급 역에서 요청 역으로 수송
화물이 하나라도 있고, 능동형 공급 역에 있다는 신호를 받고 있고, 해당 화물의 요청 역이 켜져 있을 때 활성화.
해당 화물의 요청 역으로 이동 해 화물을 비움.
- 능동형 공급 역에서 보관 역으로 수송
화물이 하나라도 있고, 능동형 공급 역에 있다는 신호를 받고 있을 때 활성화.
해당 화물의 보관 역으로 이동 해 화물을 비움.
- 대기 역으로 복귀
화물이 비었고, 목적지가 가득 찼거나 경로가 없을 때 활성화.
대기 역으로 이동.
기차의 기본 일정에 대기 역으로 이동이 걸려 있기 때문에 별 일 없으면 자동으로 대기 역으로 감. 그냥 보통은 발생할 일이 없는 인터럽트임.
이렇게 6개 필요함.
사진은 1-2 기차의 인터럽트라서 뒤에 1-2가 다 붙어있음.
4. 각 역의 작동 메커니즘과 실제 구현
전체적인 메커니즘은 내가 예전에 썼던 글
https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=72788&exception_mode=recommend&search_head=20&page=1
의 아이디어에
https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=72863&search_head=40&page=1
초간단 기차 제어 (2.0.12 패치 반영위가 상차역 아래가 하차역임전역 네트워크에 요청을 올리고, 기차가 배정되면 하나씩 낮추는 방식을 사용함그래서 역 당 기차수제한 올리는 조합기, 내리는 조합기 두 개만 있으면 됨기차는 대기역에서 대기하다가 상차역이 켜지gall.dcinside.com이 글의 상차 메커니즘을 가져왔고, 능동형 공급을 추가 함.
전체적인 시스템은 전역 네트워크(레이더 또는 대형 전신주)를 이용해 요청 카운터를 구성하고, 요청 기차 수를 음수로 네트워크에 넣은 후, 기차가 배정될 때 마다 +1씩 하도록 함. 전역 네트워크가 음수일 때 상차 역들을 켜서, 기차를 추가로 배정하는게 기본 아이디어임.
이제 각 역의 작동 방식을 살펴보면
- 대기 역
단순히 기차가 할 일 이 없을 때 기다릴 공간, 모종의 이유로 기차의 목적지가 사라져버렸을 때 갈 곳.
- 연료 공급 역
연료가 떨어졌을 때 인터럽트를 이용해 방문하여 연료를 다시 채울 역
- 수동형 공급 역
기차에 화물이 없을 때 아이템 적재 인터럽트를 통해 진입함.
아이템을 적재할 수 있는 역은 수동형, 보관, 능동형 공급 역 들이 있는데, 이들 모두 같은 이름으로 해두지만, 우선순위를 다르게 설정해, 능동형 -> 보관 -> 수동형 순서대로 아이템을 소비하도록 했음.
내 기차 물류 다른 버전이나 다른 글 처럼 회로를 이용해 아이템 적재 제어를 하지 않고,
https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=72863&search_head=40&page=1
초간단 기차 제어위가 상차역 아래가 하차역임전역 네트워크에 요청을 올리고, 기차가 배정되면 하나씩 낮추는 방식을 사용함그래서 역 당 기차수제한 올리는 조합기, 내리는 조합기 두 개만 있으면 됨기차는 대기역에서 대기하다가 상차역이 켜지gall.dcinside.com이 글 처럼 모든 공급 역 이름을 통일하고 기차가 켜져 있는 공급 역 중 비어있는 역으로 출발하도록 했음. 차이가 있다면, 상차역으로 향하는 일정을 기본 일정이 아니라 인터럽트로 넣었다는 점임
기차 역에 회로를 연결 해 이 역에 배정된 기차 수를 얻고, 다음 두 가지를 제어함.
1. 기차 수 제한
이 역에서 채울 수 있는 기차 수, 이 역에서 데드락 안 생기고 안전하게 대기할 수 있는 기차 수 중 더 작은 값으로 제한함.
2. 기차 역 ON/OFF
전역 네트워크에 해당 아이템 요청이 있는지 없는지 확인하고 요청이 있으면(신호가 음수) 역이 켜지도록 설정함. 역이 켜지면 대기하던 혹은 방금 베달을 끝낸 기차를 추가로 배정시킴.
다른 방법들과 마찬가지로 동일한 시점에 일이 없는 기차가 둘 이상 생기고 공급 역이 여러 개 있으면 요청량 이상으로 기차가 배정되는 문제가 존재함. 하지만 링크 걸어 둔 글 댓글 답으로 달려있듯 이럴 확률 자체가 매우 낮고, 발생 해도 그냥 공급 역에서 기다리게 되어있어서 상관없음.
이 역으로 배정된 기차 수를 해당 아이템 신호로 출력하여 전역 네트워크로 보냄. 이러면 요청이 음수로 들어왔을 때, 기차가 배정 된 만큼 + 해줌.
기차 수 제한은 현재 버퍼에 담긴 자원의 양을 고려할 때, 가득 채울 수 있는 기차 수, 이 역에 도착해서 기다릴 수 있는 최대 기차 수를 고려한다.
단순히 (채울 수 있는 기차 수, 최대 기차 수)중 더 작은 값을 기차 역의 기차 수 제한으로 설정한다.
그리고 기차 역 ON/OFF의 경우, 전역 회로 네트워크에서 요청을 읽어와, 기차가 배정되지 않은 요청이 있을 때 (요청 값이 음수 일 때) 기차역을 켠다. 그러면 아이템 적재 인터럽트로 켜진 공급 역을 찾는 열차가 이 역으로 배정됨.
또한 위에서 각 공급 역(수동형, 능동형, 보관)의 이름을 같게 하고 대신 우선순위를 다르게 한다고 했는데, 이러면 기차가 지금 무슨 역에 있는지 구분을 못함. 그래서 수동형 공급 역에서 보관 역으로 화물을 보내버릴 수도 있음. 그래서 기차에 지금 어떤 역에 있는지에 관한 정보를 주기 위해서 빨간 신호를 추가로 줬음.
+) 여기에 채울 수 있는 기차 수 구하는 알고리즘을 버퍼들의 단순 합을 열차 용량으로 나누지 않고, 각 화물차를 채우는 버퍼들에 대해 따로 계산하고 최댓값을 취하는 방법이 있음. 이러면 버퍼들이 불균형 하게 채워지는 경우를 대비할 수 있지만, 밸런서 써서 모든 버퍼에 동등하게 공급되도록 하면 사용할 일이 없어서 이 아이디어는 폐기함. 하려면 지금도 바로 할 수 있음.
- 능동형 공급 역
기본적으로 수동형 아이템 공급 역과 동일하게 작동하고, 이름도 똑같음. 다른 점은 능동형 공급 역임을 알 수 있도록 보라색 신호를 준다는 점, 우선순위가 더 높다는 점이 있음.
가장 중요한 다른 점은, 버퍼에 저장된 아이템 수가 미리 설정 된 "능동형 공급 임계"를 넘을 때 발생함. 버퍼를 검사해서 너무 많은 아이템을 저장하고 있다면, 해당 아이템의 요청이 있는 지와 관계 없이 기차 역을 켬. 그러면 아이템 적재 인터럽트로 공급 역을 찾는 기차들이 배정되고, 아이템을 적재하며, 적재를 마쳤는데도 요청이 들어오지 않는다면, 그대로 보관 역으로 수송하거나, 적절한 전용 보관 역이 없으면 그냥 경로 없음 띄우고 공돌이에게 보관 역 만들어 달라고 시위함.
- 요청 역
역 이름을 "\[item=item-tag\] 요청 역"으로 통일함.
기차에 화물이 있을 때 아이템 매개 변수를 이용해 식별 된 아이템의 요청 역으로 수송 인터럽트를 통해 요청 역으로 진입함.
다른 역과 마찬가지로 기차 역에 회로를 연결해 배정된 기차 수를 얻고, 기차 수 제한을 제어함.
공급 역과 마찬가지로 배정된 기차 수를 전역 네트워크에 더해주는데, 요청 역은 아이템이 지정된 양 보다 부족하면 요청도 전역 네트워크로 전송해야 함.
여기서 요청은 이 기차 역의 기차 수 제한에 (-1)을 곱해서 보내주기만 하면 됨.
이제 기차 수 제한을 구해야 하는데, 고려해야 할 것은 총 세 가지임.
1. 이 역에서 대기할 수 있는 최대 기차 수
2. 지정된 요청을 충족하기 위해 필요한 기차의 수
3. 버퍼에서 받을 수 있는 최대 기차 수
1번은 공급 역과 동일 하고, 2번과 3번이 왜 따로 있는 지 궁금할 수 있는데, 요청량을 버퍼에서 수용할 수 있는 양 이상으로 설정한 경우 요청을 전부 충족할 정도로 기차를 부르는게 아니라 버퍼를 가득 채우는 정도 까지만 기차를 부르도록 하기 위해서이다. 간단하게, 그냥 버퍼를 가득 채울 때 까지 수송하도록 하려면 요청량에 999를 집어넣는 편의를 위해 만든 기능.
아무튼 이거 구해서 기차 수 제한으로 설정해주고, 그대로 (-1) 곱해서 전역 네트워크로 요청도 올려주면 된다. 사실 실제 구현은 편의 상 음수 값으로 먼저 구해서 기차 수 제한 설정할 때 (-1)을 곱해 양수로 바꾸도록 했음.
- 보관 공급 역
그냥 우선순위만 높은 수동형 공급 역이다.
- 보관 역
역 이름을 "\[item=item-tag\] 보관 역"으로 통일함.
능동형 공급 역에서 요청 역을 찾지 못하면 보관 역으로 진입함.
대기 기차 수를 동적으로 조절할 이유가 없기 때문에 기차 역에서 상수로 설정함. 또한 요청 신호를 발생하거나 받을 필요가 없으므로 회로가 일절 필요 없는 역. 이 역의 메커니즘은 전부 기차 인터럽트를 통해 돌아감.
버퍼를 거친 후 보관 공급 역 버퍼로 공급해주고 남는 자원은 재활용기 중첩이나 난방 타워로 태워버리면 좋다. 아니면 용암에 담그던가....
그리고 기차 역 색을 다 다르게 했는데, 이러면 기차의 경로를 보거나 클릭 안해도 무슨 일을 하기 위해 움직이는지 바로 알 수 있고, 더 중요한건 알록달록 예쁨.
+) 추가 개선 아이디어
능동형 공급 역와 요청 역의 아이템 양에 따라 우선순위를 가변적으로 조정할 수 있다.
능동형 공급 역이 있지만, 해당되는 보관 역이 없는 경우에 기차가 향할 수 있는 다중 폐기 역을 만들 수 있다. 사실 원래는 계획에 포함 시켰었는데 쓸대 없이 회로랑 인터럽트 추가해야 하는 문제들이 생기고 꼭 필요해 보이지도 않아서 그냥 여기로 옮김 있으면 풀고라 같은 곳에서 꽤 좋을 수도?.
5. 맵과 청사진 공유 및 사용 방법
청사진 링크 공유&각 매개변수 설명임
일반 템플릿
https://factoriobin.com/post/9ef2cn
일반 템플릿은 위에서 설명한 내용들로 만들어진 가장 일반적인 청사진임.
특수화(아이템/유체, 기차 길이)
1-2
아이템:
https://factoriobin.com/post/u2rxd7
(2024 11월 19일 11:10 수정)
유체:
https://factoriobin.com/post/t96t8k
(2024 11월 19일 11:10 수정)
2-4
아이템:
https://factoriobin.com/post/si8gh3
(2024 11월 19일 11:10 수정)
유체:
https://factoriobin.com/post/3jbk9s
(2024 11월 19일 11:10 수정)
2-8
아이템:
https://factoriobin.com/post/p6oov4
(2024 11월 19일 11:10 수정)
유체:
https://factoriobin.com/post/l3mcjm
(2024 11월 19일 11:10 수정)
+) 대기 역 기차에 기본으로 들어가있는 연료 핵 연료로 바꾼 청사진
https://factoriobin.com/post/cx2o9r
(2024 11월 20일 4:50 수정)
내 공장이 핵 연료 써서 만든 김에 추가했음 각 기관차에 핵 연료 하나씩 들어가있고, 인터럽트도 핵 연료 용으로 연료=0일 때 연료 역 방문하도록 되어있음.
만약 다른 연료 버전 기차가 먼저 돌아다니고 있었다면 새로 놓은 기차는 원래 있던 기차 그룹에 설정된 인터럽트를 우선으로 하기 때문에 기존에 있던 인터럽트를 직접 수정해줘야 함.
패치노트:
2024 11월 19일 13:25:
2-4 유체 요청 역에서 회로와 버퍼 사이에 빨간 전선이 연결되지 않은 문제를 수정
2-4 아이템/유체, 2-8 아이템 대기 역+기차 청사진에서 기차의 공급 역 출발 조건에 있던 문제를 수정(작동에 치명적인 문제는 없음)
2024 11월 19일 11:10:
대기역 TYPE-A의 연속 철도 신호가 다른 대기 역 보다 한 칸 앞에 달려있는 것을 수정(작동에 아무런 문제 없음, 미관상 불편함을 느낄 수 도 있음)
2024 11월 20일 4:50
핵 연료 기차 대기 역 청사진 책자의 청사진"2-4 대기 역 TYPE-A 유체"에 "2-4 대기 역 TYPE-D 아이템"이 들어 가있던 문제를 수정
매개 변수 설명:
- 수동형 공급 역
공급 아이템은 말 그대로 해당 역에서 취급하는 아이템
최대 기차 수 제한은 해당 역에서 대기할 수 있는 기차 수 최댓값임. 여유 없이 타이트하게 역을 만들어놨으면 1 넣으면 됨.
화물차 수는 기차가 몇 대의 화물차를 끌고 다니는지 입력하는 매개 변수임
- 능동형 공급 역
얘는 로봇이랑 비슷하게 보관 역이랑 같이 쓰는 놈임.
다른건 위와 같은데 "능동형 공급 임계"가 있음. 기본값 500 %로 두면 버퍼에 기차 기차 5개 분의 만큼의 화물이 쌓이기 전에는 우선순위만 높은 수동형 공급 역으로 작동 하다가 비축된 화물이 기차 5개 분을 넘어가는 순간 요청이 없더라도 기차역을 켜고 기차를 받음. 그리고 보관 역으로 보냄.
- 요청 역
얘는 아이템이랑 유체가 살짝 다름.
+아이템 요청 역
+유체 요청 역
공통적으로
1) 요청 아이템/유체는 뭘 요청할지
2) 요청량은 기차 몇 개 분의 화물을 가지고 있을지
3) 최대 기차 수는 위와 동일,
4) 화물차 수도 위와 동일
아이템 요청 역에서 버퍼당 상자 수는 화물차 하나에 할당된 버퍼의 상자 수임.
+이러면 6
+이러면 12
상자 용량은 말 그대로 버퍼를 구성하는 상자의 묶음 용량임. 철 상자면 32, 강철 상자면 48. 모드로 늘렸으면 그 값
유체는 이번 패치로 이어진 유체 망은 전부 평균을 냄. 그래서 그냥 전체 저장 탱크 수를 입력하는 방식으로 했음.
+이러면 16
+이러면 20
보관 역, 보관 공급 역: 위와 동일
그리고 강한 요청 역 & 약한 요청 역이 딸려있는데 이건 같은 요청 역인데 우선순위만 다름. 로봇 물류에서 요청 우선순위가 (완충 상자 요청 켜진 요청 상자)>요청 상자>완충 상자라서 이거 구현하려고 나눠진거라 큰 의미 없음.
사실 난 이걸 바로 쓰진 않고 기차 길이에 따라서 미리 적재/하역까지 구성해두고 청사진을 따로 만들어서 씀 그게 아래 유체/아이템, 기차 길이 써진 6개 청사진임.
청사진 책 6개는 각각 유체/아이템 1-2, 2-4, 2-8 기차들에 대해서 좀 더 사용하기 편하게 만들어 둠. 추가로 역 이름과 기차, 인터럽트 이름에 기차 길이를 붙여서 구분해 놓음. 그래서 설치하고 따로 이름 바꿀 필요 없이 다른 길이의 열차를 바로 동시에 쓸 수 있게 해둠.
DLC 없는 사람들 위해서 대용량 투입기 써놨는데, 묶음 투입기나 다른 품질 쓰고 싶으면 업그레이드 계획기에 설정해서 집어넣으면 됨.
그럴 일 잘 없겠지만, 같은 품목에 대해서 기차 길이를 섞으면 문제가 되는데, 이건 현재 초록색 신호로만 전송하고 있는 전역 요청 신호를 기차 길이에 따라 빨간색/초록색으로 나눠서 전송해주면 됨. 근데 이거 하려면 역 구성하는 다른 신호들이랑 간섭해서 전부 빨<->초 반전 해야 되기 때문에 좀 번거로움.
그리고 테스트에 사용한 맵 따로 올림. 기차 만들면서 직접 만든거고, 구리 광석, 철 광석, 유체, 황산 써서 우라늄 채굴, 좀 비현실적이긴 하지만 우라늄 전지 능동형 공급 등으로 구성 됨.
https://drive.google.com/file/d/1hKjxqi1vOboCrk0SH6h4BdAUwsBnFNIe/view?usp=sharing
기차 물류 테스트-extended.zip기차 물류 테스트-extended.zipdrive.google.com이건 그냥 빈 맵이고,
https://drive.google.com/file/d/1ITKh5k3hwei--fwh9JfzPfkYt5y9lCeF/view?usp=sharing
기차 물류 v1.0.0 테스트.zip기차 물류 v1.0.0 테스트.zipdrive.google.com이건 이 글에서 다룬 기차 역 집어넣고 테스트 해볼 수 있게 해둠. 들어가서 /editor 에디터 모드 풀면 됨. 에디터 시간 탭에서 시간 원하는 속도로 흘리는 것도 되는데 이 글은 에디터 기능 설명 글은 아니기에 자세한 건 직접 찾아보셈.
빈 맵은 다른 기차 시스템 테스트하는데 써볼 수도 있음.
사실 이 글은 구상/구현 하면서 메모해놓은거 재구성해서 쓴거라 재미없을텐데 읽어줘서 고맙고, 청사진은 이미 테스트 하면서 버그 대부분 고쳤는데 아직 남아있는거 있으면 댓글 달아주면 고맙겠음.
구현에 사용된 회로 궁금한거 있으면 답해줌.
정성글 추천. 회로에 대한 기본개념이 전혀 없어서 기초부터 공부해야 하지만 좀 익숙해지면 참고 할게. 쓴다고 수고했다.
요청 생기면 공급역에서 제한 풀어서 받는다고 했는데 같은 아이템의 공급역이 여러개인 경우 한번에 열려서 요청보다 많은 기차가 공급역으로 가지는 않음?
본문에도 나와있듯, 발생할 수 있음. 하지만 시간 멈추고 기차 한번에 집어넣고 동시에 켜는거 그럴 확률이 매우 낮음. 상차 메커니즘 참고 한
https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=72863&search_head=40&page=1
이 글 댓글에도 나와있음.
말해준 그런 문제가 발생하려면 정확히 같은 틱에 공급 인터럽트가 검사 되어야 하는데 그럴 확률은 매우 낮음. 그래도 기차 수가 300대가 넘어가면 좀 발생할 수도 있을 텐데 그러면 대기 역에서 기다리는 시간을 늘려줘서 발생 확률을 낮출 수 있음
최고다
요청역 만들때 1개라도 템 남아있으면 요청안하도록 되어있음? 초간단 어쩌고 글에서는 그렇게 되어있더라고
무슨 뜻인지 잘 모르겠는데 아이템이 설정된 요청량 미만으로 남아있으면 요청하도록 되어있음. 템 1개만 남았으면 아마 요청이 될텐데 이건 초간단 뭐시기 글도 동일함.
ㄳㄳ 잘쓰고있음 근데 유체 요청역에 전신주 사이에 빨간선 빠져있는거임? 꽉 찼는데도 계속 배달이 와서 선 연결하니까 해결되던데
미안하다 버퍼들 사이에는 선 다 연결되어야 맞음 수정할게 바빠서 테스트 충분히 못해봤네
ㅋㅋ 다행히 빨리 찾아서 별문제 없었음 한가지 더 질문이 있는데 상차할때 활동없음 20초 조건 들어있는건 무슨 용도임? 이거때문에 상차역에서 너무 오래 대기하는거같아서
그거 조건 "그리고"가 아니라 "또는"으로 들어가 있어야 했는데 잘못되어있네 나도 지금 막 본 공장에 적용해보고 있어서 버그가 좀 있었다 1시 반쯤까지 다 고쳐놓음
활동 없음 20초 자체는 나중에 공급 역에서 버퍼 채워지기 전에 미리 부르는 기능 구현하려고 넣어둔거긴 함 확인해보니까 아이템 2-4, 유체 2-4, 아이템 2-8에 문제 있네
기차 물류 v1.0.0 안에 있는 기차에 아무 스케쥴이 등록이 안되어있네요..
연료가 안들어있긴 했는데 스케쥴은 문제 없는데요?
혹시 이미 "아이템 운송 기차"라는 이름의 기차가 돌아다니고 있었으면 청사진에 저장된 일정&인터럽트 보다 맵에 이미 돌아다니고 있는 기차의 일정&인터럽트를 따라가니까 확인해보시길
우와.. 정말 고마워. 이거 1-4나 1-4-1 같이 따로 커스텀해서 만들고 싶은데 미리 만들어 준것처럼 2-4 처럼 만들려면 청사진 어떻게 만들어야 할까?
이게 좀 복잡한데 간단하게 말하면 미리 1-4, 1-4-1 같은거 만들어 놓고 기차 역에 1-4 붙여주고, 기차 그룹 이름이랑 인터럽트들 수정 해줘야 함 이건 1-2 2-4 2-8 미리 만들어 좋은거 보고 따라 하면 되는데 복잡한 부분은 매개변수화 할 때 겹치는 변수 우회하는 테크닉이 필요해서 살짝 어려울 수 있음. 저기 있는 문제가 선택 선별 조합기에 들어있는 2랑 최대 기차 수 제한으로 설정된 2가 겹치는건데 각각 90 91 이런 상관없는 수로 안겹치게 해놓고 나중에 매개변수화 할 때 선택 선별 조합기는 공식에 2 집어넣고, 최대 기차 수 제한은 기본 값을 2로 고치는 이상한짓을 해야함. 댓글로는 자세히 설명하기 어렵네
그러게 해보니까 -123 으로 해둔거 같더라고? 여튼 감사염
혹시 다중상차도 가능한가요?
기본은 안됨
이거 계속 써봤는데 문제가 물건을 채운상태에서 대기역으로 가거나 뭔가 꼬이더라고?
아이씨 엔터치니까 입력되버렸네. 그래서 잘 보니까 연료 채우러 가면서 에러 나는거 같아서, 연료쪽에다가 화물이 다 비었을떄만 가도록 AND조건을 추가 햇는데. 다른 문제가 있을까? 가끔은 공급역에서 다 채우고 멍떄릴때가 있어서 다른 기차가 오는걸 방해하더라고?