※이 글은 기차 인터럽트에 대한 내 생각을 끄적임과 동시에, 유능한 팩붕이들의 고견을 듣고자 하는 목적으로 작성됨


기존 념글에 있던 글도 그렇고, 찾아봐도 완벽히 기존 LTN처럼 대기 장소에 주차되어 있던 기차가 부족한 물품과 정류장에 대한 정보를 받아 딱 필요한 행동만 하게 만들기가 쉽지 않다.


회로 없이 인터럽트 만으로는 불가능이라 해도 무방한데, 인터럽트의 조건이 한계가 있기 때문이다.



↑특정 정류장에 있는지의 여부만 확인할 수 있고, 해당 정류장의 정보를 받아올 수는 없다.


때문에 멀리 있는 정류장의 조건을 받아오기 위해 기본적으로 철도를 따라 전신주를 연결하고 빨간선 녹색선 모두 이어줌으로서 회로를 사용 가능하게 만들었다.

아래 자세히 설명하기 전, 간략히 설명해 보자면


공급 정류장에서 재고가 충분할 경우 해당물품을 초록 네트워크로 출력하며

요청 정류장에서 물품을 요청할 경우 해당물품를 빨강 네트워트로 출력한다.


대기 정류장에서 동일한 물품을 초록과 빨강 네트워크로 동시에 수신할 경우, 해당 물품 정보를 기차에 전달하여 기차가 공급 정류장에서 물품을 받아 요청 정류장에서 물품을 내리게 한다.


이 때, 신호가 계속 오면서 모든 기차들이 해당 정류장으로 일정을 잡아버리면 곤란하므로, 공급&요청 정류장에서는 기차가 배정되는 순간 발신하는 신호를 차단한다.


딱 이 정도고 아래는 내가 실현한 방법을 설명함.


↑대형 전신주를 따라 빨간선과 녹색선이 연결되어 있다.



다음은 기차 대기소 정류장의 모습이다.


기차 정류장의 이름은 뭐가 됬든 통일시켜 주고, 기능은 기차에 신호 보냄만 체크해 둔다.


옆에 있는 수량 조합기는 이렇게 설정해 두었다. 위에서 설명했듯 빨간 신호 초록 신호를 동시에 수신한다면 해당 정보를 기차에 전달함.


기관차 설정은 이렇게 되어 있다.

하얗게 빛나는 부분은 인터럽트로 설정되어 반복되는 부분이므로 무시해도 좋고, 중요한 건 인터럽트다.


기차에는 총 3가지의 인터럽트가 필요한데

1. 기차 대기소로 돌아오는 인터럽트

2. 기차가 운반할 물품을 인식하고 작업하는 인터럽트

3. 연로가 부족할 때 채우는 인터럽트


여기서 3번은 생략하고 1, 2 번만 인터럽트만 남겨 두었다.


대기 정류장으로 가는 조건이 적인 인터럽트와


작업이 할당되는 인터럽트를 볼 수 있다.


즉, 위에 하얗게 임시로 되어 있는 부분은 이 인터럽트에 의해 작업을 대략 2초마다 받아오고 있다.

인터럽트 내의 정류장 이름이 [네모]+[@]로 되어 있는데, 이 @는 기차 정류장으로부터 받아오는 신호가 되겠다.


다시 말해 공급과 요청이 발생한다면 그 물품의 아이콘은 저 @를 대신하게 된다.


여긴 물품을 공급해주는 정류장이다.


기차 정류장 세부 설정. 확인해야 할 것은


기차 정류장 이름

기차 수 제한이 활성화

회로 연결 설정에서 구리판이 2개 이상일 때 정류장이 활성화(설명하기 위해 2개로 한 것이므로, 적용할 땐 숫자를 원하는 대로 바꾸면 된다.)

해당 정류장으로 오고 있거나 정차되어 있는 기차의 수를 C라는 아이콘으로 내보냄


요것들이다.


동일한 요청과 공급이 여러 곳에서 발생할 경우 혼선이 생기는 걸 방지하기 위해 정류장마다 한 기차씩만 배정하도록 설정해 둔 거임


정류장 옆에 있는 것들도 하나하나 설명해 보겠다.

우선 이건 해당 정류장으로 기차가 한 대 이상 무한정 배정되는 것을 막아주기 위한 장치다.

한 대 배정되는 순간 X라는 신호를 출력한다.


그 다음에는 구리판이 두 개 이상이며(물품 재고가 충분히 많고) X라는 신호가 없을 때(기차가 배정되어 있지 않을 때) 체크를 출력하며 두 조건을 만족하면 물품 아이콘을 빨강회로로 출력함.


요청 정류장이다. 여기도 비슷하다.


요청 정류장의 이름은 물품 아이콘 앞에 파란 상자를 두어 공급 정류장과 차별화함. 구리판 개수도 마찬가지로 원하는 대로 설정하면 됨.



요청 정류장에서와 비슷한 역할을 한다. 기차가 배정되어 있지 않고, 물품의 재고가 부족하다면 물품 아이콘을 초록회로로 출력.


참, 중요한 게 또 있음.


한 기차에 화물차가 여러 개 있을 경우, 요청 정류장에서 화물차들에게서 가능한 같은 양의 물품이 빠져나가도록 밸런서를 만들어 두어야 함. 어떤 화물차에서는 다 내렸지만 다른 화물차에서는 못 내려서 기차가 떠나지 못하는 것을 방지하기 위함임. 여기에 더해 대충 상자 용량의 절반 정도를 요청하는 기준으로 삼으면 좋을 것 같음.



세팅은 다 끝났다. 한 번 요청 정류장에 있던 구리판 4개를 꺼내서 잘 작동하는지 확인해 보겠다.


신호를 전달받은 기차가 출발한다. 기차를 두 대 놓은 이유는, 한 대만 정류장에 배정되는 것이 잘 작동되는지 확인하기 위함.


잘 작동하는 모습이다.


물품을 싣고


요청한 곳에 하차하고


무사히 대기 정류장으로 돌아옴


일단은 동작은 잘 하는 것 같긴 한데, 혹시 더 좋은 생각이 있는 갤럼들은 아낌없는 피드백 부탁할게.

막상 사용하다 보면 오류 날 수도 있으니까.




지금 시간이 늦어서 매우 비몽사몽하므로 글이 좀 두서난방에 대충 씨부려서 알아보기 힘들 수 있음에 미리 사과함. 사진도 스팀 스크린샷 기능을 이용했더니 화질이 저 모양이네.


정류장에서 회로 연결이 잘 안 보일 텐데, 직접 사용해 볼 사람들을 위해 문자열을 남길게.





0eNrlm82O2zYQgF+l0Fle8J/iIsml16Kn3BYLQ7aZXSG2ZMjypovAb9AnKHrp8xV9h5L688+O1zNGkgbpJUtR5GcOOUMOR5PPyWy59eu6KJvk9nNSzKtyk9zefU42xUOZL2Ndma98cpvUebFMdmlSlAv/W3LLd/dp4sumaArf9WgfnqfldjXzdWiQDj3n2/rJLyYRMMmTNFlXm9CrKiM8kCYiS5Pn5FZKGfCLovbz7i0Xu/QFVozYTROID49NC4awGsYqgCrxVImnKjyV46kaTeUOTzV4qsVTLZ5KWK0MTyWslsNTCavFGRpLWC3O0VTCanG8cRFWi+ONi7BaHG9clNVCGxcFirYtivxo06IsFdqyKFrlsCeBgaEGOgbQZkWwKoE+s6KloIcqQOoM0v9BATTmJNzbVQvsT2zgcDE3gw6oGxR5b1uz7fLjpCg3vm7CG2AfOEJDrEOL8n45mT/6TfMqSZ8h7c1o5RfFdjXxyyBGXcwn62rpoem8iNwbUVSicrJpqvV5szyZuzBLwV1q6mo5nfnH/Kmo6thhXtTzbdFMfZnPln6R3Db11qdjdeiyGOEfinrTTF/4WvNqvfb1ZL3MGx99ruiVNXl00UR8WK3zOm/iryVv4utl9VBsmmJ+zN530gzqtfHlYtpU01by5PZDvtyEYbZP0zgPa784GFnzvI4jeyrqZttq2bCobYvJ+0isfb7ocJswlG386U72wzo88+dkF4fZ5J1EyV3fsNf0t32z6MDe3xWNX709nLf7JAq97NYk/MNuhLJMZ5mQlinLnVZSacskjyr6EBtobk1ok1ltFWOaC+N093oWX2cuY9IJEVpJw1kmXaakDW/z6A6nySovw+iGCVgWq6Jpz4ngXVd1ULvoDEBKmBH1Wl1Ua4fbGRRxX5AMu5ONHpK+vD9KjqZaAnW/6y78vFgEtQgmMCvK1gTOHuf2BmfkPXNvcZve5Manu2usOwpy2uuClSx8+dxRDgz8bTJU+GnfPy8XSbyzVdtmvW3OXPJeDm393Jvth7paTYsy9O33it39DlI+Ka+aePM1J/7yRnMyf+9emSr0etCnTuE9hcEU3PGsgWar0QamRyrEMVjOeJ2FOftTd1Y8XNrteqdQcRCVoaMMsncElULMGHIDncT9osfqUwXOoIgAw4G5PuJCJLyvakfBIY7AjUjwiyOS2BENMZQzI8Lf7MY1tSAIf5mzr3LQ97dRMJhj6YKBBqQysmAwx5EFAzmakQXToDlrThXsDEdQBTvDkXTBJAhSZMFgjiYLBnMMXTDQ6LUlCwZzMrJgMMfRBQON1TDKITXpTyltQBZdreEx0dUa5lyh1qDhG7pawxy6WsMculob0PANWa3PcMhqfYZDV2sDGr5lNO989EOM3H07h9zn88fjmxEHLjiH0Gnpm09V/bH98TpGXfp4xkPtfdnFIXZX3K6+xEi6GEg/kM7/J97O0IMkXzkseWs6o1eCGMTg2V6zYH/S0i6Sewf1v1ZVxr61bh7dXK/4cVgdv4S1iMuTgTaP9EstDnHCvmv7VeQDBrZfTT9gYKs1FL8pfh19hUU/hWEO/RSGOVecwqADljHUd4chHBMgx5EFeHu7PnSPCbOvi/JjH2ZfVkH7q6Z4ehFk510kvQ2Y8z4wDslPP3XgeRSoeRzCUT/ePEqyYsPzqMjxLpNh4l2Zpsa7Wi5EMtQ41VmSJccMLUOImlEDcqdU8OtQ5qhRNRTW0a63gwVZ8PBwnBy3tgjlcYIatz6lwqJLahgbh1XUz9NiVHprYVV1muQCT4Q44J18z/v/fU5x5srZM1919sjf+N8lP8BnQWfJWTD25NsWB7P2MnIWjHUvvjVCYIfyLcY00xejFd9Besg7THpIxtgPnSASLnGo/JA2+UNnzoT9UxuprNFmzA0RbeaIVtJmljFx+H52Kbnk1fwQMGeUUc+SfTjFnnF7OOPorC5+bCsgTSDzug5YZ0cmifkqOAvmTFHzVU6NGMZqasIKDmvIGfMZR+yQnFlyzvwpGOZm5Kx5HNeR8+ZRXEIq9pA5j+Nycu48jivI2fM4riTnz+O4ipxBj+Nqago9DmuoOfQ4rKUm0eOwGTWLHod11DR6FBafnk2icmIiPY4qiJn0OKokZr3jqIqYoI+jamIyPY5qqNn0L7HhYvIpPMdryV0YpUgDVNynd/FPKuxQDm+yVMdyqEql6OrbsuzKWVevxrId6nUsx76xW2wf24QqnhqW8q4sYll0ZR3LsX18nVrTtmnLjg1lEevFUHZsKOtYr4ey6zi25Yi2r237duMPZZVmXd/4OrWyayP2vxubxnoxls1QHn8rvA6cjunacaq2r2vHoNo2bTm6ne2Dio1MKmNZx7LrOoSpivVt2RzUhz9t5/jQ/k2je8jvw+pFtzs6nON/MgzXkXzmg3ef/PPH73//9edPv7z/NVQ++XrTrnlwqZ1ywX9m1pgYbvoXngmLOQ==