기본편 : http://gall.dcinside.com/mgallery/board/view/?id=factorio&no=4191
부터 봐라
#2-6 smarter train 모드 응용
# 하차역의 기본적인 형태와 열차 운행 방식 설명
( 역 화물칸에서 내릴 때 로더를 사용했고, 로더가 아니라 투입기를 써도 상관 없음 )
1. 역에서 물품을 내려 보관하는 상자와 SR 래치를 연결해서, 상자 안에 충분한 물품이 쌓여 있으면 역을 끄도록 설계
2. 열차가 역에 들어오면 역을 끄도록 설계
ㄴ 역을 끄는 이유는, 한마디로 표현하자면 효율적인 기차 운행을 위해서임. 자세한 설명은 생략하겠고, 왜 그렇게 하는지 모르겠으면 개념글 정독하고 오셈
개념글 기차 관련해서 다 읽어볼것 - 아래 링크는 대표적으로 기차 설명 잘해놓은 좋은 글
http://gall.dcinside.com/mgallery/board/view/?id=factorio&no=1500&page=1&exception_mode=recommend
3. 하차역에 충분한 물품이 쌓였다고 생각되면, 하차중이던 열차를 출발시키도록 설계 ( 밑에 사진으로 추가 설명하겠음 )
4. 하차역에 충분한 물품이 쌓였는데도 불구하고, 열차의 화물칸에 여전히 많은 수량의 물품이 남아있다면 바로 공급이 필요한 다른 하차역으로 직행하도록 설계
ㄴ 일단, 기본적으로 열차의 기본 스케줄은 상차역 -> 하차역 으로 지정해 놨을거임
그런데, 이런 경우가 자주 발생함. 예를 들어, 하차역에서 필요한 물품은 1k 개인데 열차 화물칸에는 10k 가 실어져 있다고 가정해보겠음
이 때, 화물차는 10k 를 들고 하차역에 가서 1k 를 내리고 , 9k 를 화물칸에 실은 상태로 또다시 상차역에 감 ( 기차 스케줄이 상차역->하차역->반복 이니까)
내 생각에 열차의 화물칸에 충분한 재고가 실어져 있으면 굳이 다시 상차역에 갈 필요 없이 다른 하차역에 가서 물건을 내리면 더 효율적으로,
정확하게는 더 빠르게 물품의 운송이 가능하다고 생각되서 사용하고 있는 기차역 설계임.
즉, 무슨 얘기냐면 내가 '기본편' 에서 설명했던 '특정 상황' 의 케이스 중 1개가 바로,
열차가 하차역에서 물품을 내린 후, 여전히 열차 화물칸에 '충분한 수량의 물품이 실어져 있는 상황' 이라면
굳이 열차에 입력된 스케줄대로
상차->하차->상차->하차 이런식으로 움직일 필요없이
상차->하차->하차->하차 (열차 화물칸에 실어져 있는 재고가 다 바닥나거나, 모든 하차역에 충분한 물품이 공급될 때까지)
이렇게 움직이는게 굉장히 효율적이고 '빠르게' 재료를 공급 가능하다는거임
기본편에서 LTN 과 비교를 많이 했는데 내 생각으로는 이 방식이 LTN 보다 더 '빠르게' 물품을 운송 가능함
그리고 이 방식은 smarter train 모드에서만 사용 가능함
어떤 식으로 역에 회로를 갖다 붙혔는지는 아래에서 사진으로 설명하겠음
#상차역의 기본 형태는?
- 나는 기본적으로 ' 상차역의 갯수 = 열차의 갯수 ' 이렇게 설정함 모두가 그렇게 하는지는 모르겠지만 열차 몇대 더 만드는게 그렇게 자원적으로 큰 부담이 아니고 이렇게 해야 열차가 조금 노는 경우가 발생하더라도 상차역에서 회로를 덜쓰게 되서 간단하게 구성이 가능함. 상차역의 갯수 < 열차의 댓수 이렇게 만드는 것도 나쁘지는 않은데, 이렇게 만들면 대기열을 추가해줘야됨. 이것도 회로를 쓰면 쉽게 할 수 있긴 한데 나는 귀찮아서 그렇게까지는 잘 안함
- 상차역의 형태도 하차역과 동일하게 구성한다고 생각하면 되는데, 하차역에는 꼭 필요하지만 상차역에는 굳이 만들지 않아도 되는게 더러 있음.
내 기준으로 상차역에 만드는 설계는
ㄴ (필수) 열차가 역에 도착했을 때 역을 끄기 위한 회로
ㄴ (선택) 상차역에 도착해서 물품을 화물칸에 적재하고 있는데, 생산시설의 문제발생 등 기타 이유로 적재가 제대로 안되고 있을 경우 이를 감지해서 다른 켜져있는 상차역으로 열차를 보내는 회로 : 시간을 측정하는 회로를 만든후 30초가 지났음을 감지 ( delay 만들듯이 조합기 input ouput 을 연결해서 만들 수 있음 ) -> 역에서 기차 화물칸에 적재된 아이템을 읽어 오는 회로를 통해 일정갯수보다 이하면 열차를 출발시키도록 하면됨
ㄴ (선택) 만약 하차역의 우선순위가 있다면, 우선순위가 높은 하차역에 공급이 필요할 때 상차역에서 그 하차역을 1순위로 보내줄 수 있도록 설계 : 이런 경우에는 우선순위가 높은 역의 이름을 다르게 설정해줘야함 이유는, 같은 이름의 역은 같은 신호값을 할당받게 되므로 역의 이름이 달라야 해당역으로
가라는 신호를 보내줄 수가 있음
이거 3개가 끝임. 엄밀하게 얘기하자면, 열차가 역에 도착했을 때 역을 off 시키는 회로, 이거 1개만 있어도 충분히 잘 돌아감
그러므로 상차역은 따로 사진 안찍었고 관련 설명 안할거
#이제, 아래 사진을 보면서 하차역이 어떤식으로 구성되어 있는데 한번 보겠음
↑사진1
하차역의 설계 : 이 사진에서는 초록선, 빨간선이 어떻게 연결되어 있는지 잘 보기를 바람
↑사진2
사진에 쓴 번호대로, '기능' 설명
1. SR latch
- 하차역에 열차가 도착해서 물품을 내릴 때, 충분한 수량이 상자에 확보되면 열차 화물칸에서 역의 보관함으로 이동되는 벨트의 작동을 멈추게 함
- 하차역의 보관상자에 충분한 물품이 쌓이게 되면 역을 끔
2. 역에 열차가 도착했을 때, 역을 끄기 위한 조합기
3. '특정 상황'이 되었을 때 신호를 램프에 입력하는 조합기
- 3번 같은 경우에는 개개인의 능력에 따라 더 다양하고 많은 기능을 하는 회로를 만들 수 있는 부분임
- 위 사진을 간단하게 설명하자면, 3번 동그라미 안에 위/아래 조합기가 있음. 위에 있는 조합기 input 은 '역'과 연결되어 역에 정차한 열차의 화물칸의 물품을 읽어오는 회로
- 위에 있는 조합기의 output 은, 열차의 화물칸에 실려있는 아이템이 일정 갯수 이상이 되면 신호를 출력해서 아래에 있는 조합기에 input 으로 들어감
- 아래 있는 조합기의 output 은 램프의 인풋으로 들어감 기본편 글을 정독한 사람이라면 램프의 역할을 알거라고 생각함. 특정 상황이 되었을 때 이를 신호로 감지해서 램프에 입력하라고 얘기한 적이 있는데, 램프에 입력되는 '신호의 값' 에 따라 열차의 다음 행선지가 결정된다고 했었음. 즉, 아래에 있는 조합기는 '어떤 역' 을 다음 행선지로 정할지 정하기 위해 신호의 크기를 바꿔주는 역할임. 나는 심플하게 보여주기 위해 조합기 1개만으로 달아놨는데 이런걸 잘하는 사람들은 복잡하게(=다양한 상황을 신호로 감지해서 각각의 신호를 보낼 수 있게) 만들 수 있을 것 같음
↑사진3
각 회로에 어떤 신호가 input 이고, 어떤 신호가 output 인지 한눈에 보이도록 한 사진
각각 조합기에 어떻게 신호를 받고 출력하게 조건을 설정했는지는 아래 사진을 보면됨
↑사진4
노란색으로 테두리 된 조합기의 input / output 설정
↑사진5
노란색으로 테두리 된 조합기의 input / output 설정
↑사진6
노란색으로 테두리 된 조합기의 input / output 설정
↑사진7
노란색으로 테두리 된 조합기의 input / output 설정
↑사진8
노란색으로 테두리 된 조합기의 input / output 설정
↑사진9
노란색으로 테두리 된 조합기의 input / output 설정
여기서 내가 실수했는데 D+0 이 아니고 D-2 로 설정해줘야함
왜냐하면 내가 하차역을 -1 이라는 신호로 할당했거든.
인풋에서 D=1 이라는 신호가 들어왔으므로 1-2 를 해줘야 -1 이 되잖아?
이런식으로 너희들이 설정한 station mapping ( 각 역에 어떤 신호값을 할당하는지 정한느것 ) 에 따라 가변적으로 설정해 줘야함
↑사진10
하차역에 할당된 값 : -1 (오른쪽에 보면 -1 이라고 되어있는 output signals 이 보일거임)
각 역에 어떻게 신호값을 부여할 수 있는지는 기본편에 나와있음
그리고 같은 이름을 가진 역은 모두 같은 신호값 ( 여기서 모든 하차역은 -1) 이 할당됨
즉, 하차역에 도착한 열차가 원래대로라면 다음 행선지는 상차역인데,
램프에다가 -1 이라는 신호를 입력해주면 열차의 행선지가 상차역이 아니라 하차역으로 바뀐다는거임
↑사진11
열차가 하차역에서 도착 한후, 하차역에서 출발시킬 때 어떤 조건을 사용했는지 보여주는 사진
( 참고로 J≠0 이 의미하는건 말로 풀어서 설명하면, ' J라는 신호가 입력될 때 ' 라고 생각해도 무방함 )
열차가 하차역에서 출발하는 조건은
(J≠0) AND (2초간 활동없음) OR (2초간 활동없음)
이부분 집중해주기 바람
(J≠0) AND (2초간 활동없음) OR (2초간 활동없음) 이 경우에, 열차는 어떻게 작동할거같음?
사람이 봐도 이건 중의적인 논리조건임
왜냐면 and 를 먼저 연산하는지 or 을 먼저 연산하는지에 따라 결과값이 달라지기 때문
사람이 손으로 쓸 때 and 와 or 은 연산자 우선순위가 같으므로 대괄호를 표현해서 어떤 연산이 우선순위인지 정해줘야하는데
팩토리오 프로그램은 대괄호를 못 쓰니까 둘중 어떤게 우선순위 연산자인지를 알아야함. 결론은 and 를 우선순위로 연산함
즉, [ (J≠0) AND (2초간 활동없음) ] OR [ 2초간 활동없음 ]
위와 같은 연산을 실시하게 된다는거임
왼쪽에 밑줄친 조건 or 오른쪽 밑줄친 조건 중 하나만 만족하게 되면 열차가 출발한다는 얘기임
말로 풀어서 설명하자면, J=숫자 라는 신호가 입력되면 ( J=숫자 의 신호가 입력되었다는 건, 특정한 상황이 발생되어 조합기에서 램프에 신호를 주고 있다는 거)
특정 상황이므로, 기존 스케줄대로 운행하지말고, 다음 행선지인 정거장은 신호로 입력되는 값으로 결정된다 라는 거였음.
여기에 and 2초간 활동 없음 이라는건 하차역의 보관함상자가 꽉 차서 더이상 하차를 안하고 있거나, 열차 화물칸에 모든 아이템을 다 내려서 더이상 물품을 내리지 않고 있는 상황이라는 2가지 경우에 활동 없음 조건이 만족됨
결론적으로, 특정 상황이 발생하든 안하든 일단 도착한 하차역에서 필요로 하는 물품은 다 공급을 한 후, 만약 특정 상황이 발생했으면 ( 이 글에서 특정한 상황이란, 하차역에서 필요한 물품을 다 내렸음에도 여전히 열차 화물칸에 충분한 수의 물품이 적재되어 있는 경우 ) 열차에 입력된 스케줄대로 움직이는게 아니라 ( 열차의 스케줄은 상차역->하차역 반복) J라는 신호가 입력되는 값에 따라 다음 행선지 역 ( 지금 내 글에서 설정한대로라면 다음 행선지는 상차역이 아닌 하차역이 되어야함 ) 을 정하고 그 역으로 움직여라 라는 거임
기본편에서 설명할 때, 2-4 파트에서
열차가 역을 출발하는 조건에 ' ~초 후 역을 출발 ' 과 같은 조건은 쓸 수 없다고 설명했던 부분이 있음
만약에 몇초 후 출발 이라는 조건을 쓸 수 있었으면 이 글의 위에 '사진2' 에서 SR 래치가 벨트와 연결한 부분은 필요 없었을거임
~초후 출발 과 같은 조건은 쓸 수 없지만 '2초간 활동없음' 과 같은 조건을 만족시키기 위해서 '사진2' 에서 SR 래치를 쓰는 것
스크롤 올리기 귀찮을테니 사진 다시 올려줌
↓사진2 - 빨간색 1번 동그라미가 SR 래치고 , 벨트와 연결되어 있는 부분이 왜 있는지 알려준거임
위와 같이 하차역을 여러개 설계해주고
상차역은 간단히 만들어놓고
열차가 하차역을 떠나는 조건을 사진 11과 같이 만들어주면
열차 화물칸에 충분한 적재량 ( 위에 사진에서는 철광석으로 했음 ) 이 있을 경우
상차역 -> 하차역 -> 하차역 .. 이런식으로 움직이는 걸 볼 수 있을거임
아 이 때 모든 역은 회로 네트워크 4개가 다 체크되어 있어야함
기본편에서 간단하게 언급했었는데 실제로 하다보면 알게될거임
--------
일단 나름대로 심플하게 설명한다고 했는데
이해가 안되는 부분도 많이 있을 것 같음
내가 설명 빼먹은 부분이 있을 수도 있고..
읽어보고 이해가 안되는 부분이나 설명이 부족하다고 느끼는 부분 댓글 달아주면
글 수정해보겠음
너무하잖아 ㅋㅋㅋㅋ 그래도 글을 썼으니 뭐라고 올려봐~~
ㄴ LTN 은 왜 쓰다가 포기했냐 유튜브 보면 강의 괜찮은거 몇개 있어 영어라서 좀 문제지만 그래도 보다보면 대충 이해갈덧
ㄴ음.. 그냥 내가 원하는건 멀티에서 광물을 적재해서 하차역에 내리는건데 이건 걍 바닐라 기차 기능으로도 충분할것 같아서 포기했지.