기차 인터럽트 써보려고 하는데 오버부킹이 문제가 되더라고
요청역 입장에선 신호받고 공급역으로 간 열차를 알 수가 없어서 계속 신호를 보내는거라고 하더라
그러면서 요청받는 열차가 많아지면서 꼬이기시작하고..
해결하려고 찾아보면 다들 회로를 많이 썼더라고?
나란 팩린이는 간단하다는 회로들도 어려워서..
간단하게 만들어봤어 그래서 초반용이야
역 많아지고 기차 많아지고 기지 커지면 엄청 꼬일거야 그래서 초반용임
적게 쓰는 사람들은 무리 없을듯???
샌박에서 테스트 용으로 만든거야
내 기지에 적용하고 2시간 정도지만 잘 돌아갔어
철 하차역 두개, 상차역 한개
구리 상차역 한개, 하차역 한개
철은 상차역이 한개인데 두개역에서 동시에 요청하는 걸 생각해서 만든거고
구리는 철과 구리가 함께 요청하는걸 생각해서 만든거야
대기역은 이름은 같게 하고 기차수제한은 체크 안했어
이용중인 열차만큼만 만들어주면 될걸???
상차역
기차수제한만 1로 해줘 다른건 안해도돼
끝
하차역
조명은 역 활성화 보려고 만든거라 신경 안써도돼
회로는 보이는대로 연결해줘(글 다쓰고 생각났는데 초록선은 필요없다, 기차수 안읽어도 돼ㅋㅋ)
빨간성 상자->수량비교 인풋, 수량비교 아웃풋->기차역
초록선 기차역->수량비교 인풋
기차역 설정이야
기차제한 1로하고 활성화 체크, 필요 물품(여기선 철판) = 1, 기차수읽기 체크
수량비교조합기인데
조건은
1. 필요물품(철판) < 최소물량(테스트 용이라 50), 얼마 미만일때 요청하고싶은지 이건 해당 역의 상자크기와 물품묶음크기, 화물차칸수에 따라 계산해봐
2. C(기차역에서 받은 기차수 값) < 1
'그리고'로 설정하면 두 조건을 만족해야하니까
철판이 50개 미만이면서 해당역에 배정된 기차가 1미만(0일떄, =0으로 하면 잘안되던데 이유는 몰라)일떄 신호를 출력하고
출력신호는
필요물품(철판) = 1 로 해줬어
출력신호 전까지 역은 비활성화 되서 기차들이 신호를 안받을거야
인터럽트
크게 두 종류의 인터럽트가 필요해
대기역에서 대기하게 만들 인터럽트와 물품 요청하는 인터럽트야
대기 인터럽트는 '목적지가 가득 찼거나 경로가 없음' 넣어주고 대상 정류장에 대기역 넣고 출발조건 시간 5초 넣었어
'다른 인터럽트를 인터럽트 하도록 허용' 꼭 넣어줘야해!
이제 다른 인터럽트들이야
조건은
'정류장이 가득차있지 않음'을 선택하고 물품하차할 역을 선택해
대상 정류장은
상차역(공급) - 화물 가득채움으로 하고
하차역(요청) - 화물 비움으로 해줘
마지막으로 열차 스케쥴을 짜줄차례야
먼저 정류장 추가로 대기역에 출발조건으로 시간을 걸어줘 난 5초 걸어줬는데 2초 걸어보면 좀 정신없더라, 경로없음 이런거 너무 자주떠서
인터럽트는 제일 먼저 대기를 넣어줘
이걸 처음에 넣는 이유는 오버부킹 되어 경로없음 뜨는 열차가 이 인터럽트 때문에 계속 대기역에서 대기하고 있게 하기 위함이야
인터럽트도 위에서부터 순차적으로 작동한다고 하더라고
대기를 제외한 물품 요청 인터럽트들은 열차들간에 순서가 동일하면 안돼
순서를 동일하게 하면 인터럽트 순차 작동때문에 '철판 하차1'에 신호를 요청받으면 열차한대가 물품 상차 후 하차역 출발 전까지는 중간에 다른 요청이 생겨도
'철판 하차1'-'대기' 이 두개를 계속 반복하더라고
그래서 나는 열차별로 인터럽트 순서를 다르게 넣었어
'대기'는 무조건 첫번째이고
그 다음은
철판 하차1-철판 하차2-구리 하차
철판 하차2-구리 하차-철판 하차1
구리 하차-철판 하차1-철판 하차2
이런식으로..
그래야 인터럽트별 우선순이가 달라서 대기 인터럽트 걸리다가도 다른신호받아서 가더라고
다쓰고 보니 설명도 팩린이 스럽네
조금만 확장되어도 꼬일거야
당장 동일한 이름의 상차역을 하나 더 추가하는 것만으로도 오버부킹에 걸려버려ㅋㅋㅋ
기지 키우면서 회로 공부도 더해야지
여기 고수들 많지만
누군가에겐 도움이 되기를!
기차사랑단 회원증을 수여합니다 ^^