Factorio
65 beoordelingen
Sieć sterownicza cookbook
Door Skamlo
Ten poradnik prezentuje kilka wybranych zastosowań sieci sterowniczych.
3
   
Prijs
Toevoegen aan favorieten
Toegevoegd aan favorieten
Verwijderen uit favorieten
Wstęp
Zacznę od tego, że ten poradnik omawia praktyczne zastosowania sieci sterowniczych i jest czymś w rodzaju kontynuacji mojego poprzedniego poradnika. Mój poprzedni poradnik omawiał najważniejsze podstawy, które wypada znać podczas korzystania z sieci sterowniczych, więc jeśli jesteś laikiem w tych sprawach to zachęcam się z nim zapoznać na początku, a dopiero później wrócić do tego poradnika. Natomiast jeśli rozumiesz działanie sieci sterowniczych to i tak zachęcam choćby do zobaczenia spisu treści. Może znajdziesz coś o czym działaniu nie miałeś pojęcia.

https://steamcommunity.com/sharedfiles/filedetails/?id=2476599412
Przechodząc do tego co prezentuje poradnik to w jego skład wchodzi omówienie budowy oraz zastosowania kilku urządzeń takich jak wyświetlacze, liczniki, timery itd.
1.1. Wyświetlacz siedmiosegmentowy jednocyfrowy cz.1
Wyświetlacz siedmiosegmentowy jest to jeden z najprostszych sposobów wyświetlenia cyfr oraz kilku liter takich jak np. A, L, albo H. Można go wykorzystać np. do wyświetlania zapełnienia magazynu, wydajności jakichś sektorów produkcyjnych, albo do wyświetlenia poziomu naładowania akumulatorów itp.

Pierwszym krokiem będzie zbudowanie samego wyświetlacza o odpowiednim układzie lamp. Wyświetlacz siedmiosegmentowy jak można się domyśleć składa się z siedmiu segmentów ponazywanych literami od A do G, wszystkie lampy są połączone do jednej sieci sterowniczej oraz w każdej lampie znajduje się warunek brzmiący: Jeżeli zmienna o nazwie odpowiadającej segmentowi, w którym się znajduje jest prawdą, czyli jest równa 1 to się zapali.



























Drugim krokiem będzie wybudowanie dziesięciu kolumn sterowników decyzyjnych, gdzie każda kolumna będzie obsługiwać wyświetlenie jednej z cyfr. Do wyświetlenia każdej cyfry będzie potrzeba tylu sterowniku, ile do jej wyświetlenia jest potrzebnych segmentów (tabela w cz.2). Po ustawieniu sterowników podpinamy wszystkie ich wyjścia do tej samej sieci sterowniczej jaką są połączone lampy oraz wszystkie wejścia sterowników łączymy ze sobą już do innej sieci sterowniczej, do której następnie łączymy źródło zmiennej, gdzie na podstawie jej wartości będziemy wyświetlać cyfry na wyświetlaczu (w moim przypadku jest to sterownik stałych, ale źródłem może być cokolwiek).













Trzecim i zarówno ostatnim krokiem będzie skonfigurowanie sterowników. We wszystkich sterownikach dajemy warunki w taki sposób, że warunek będzie brzmiał: Jeżeli zmienna na podstawie, której będzie wyświetlana liczba na wyświetlaczu (w przypadku obok jest to zmienna 0) jest równa liczbie, za którą jest odpowiedzialna kolumna, w której znajduje się sterownik to sterownik zwraca prawdę. Taki warunek będzie w każdym sterowniku z danej kolumny np. w kolumnie, która ma za zadanie wyświetlać liczbę 5 warunek będzie brzmiał: Jeżeli zmienna [...] jest równa 5 to sterownik zwraca prawdę. Natomiast na wyjściu sterownik zwraca zmienną o nazwie odpowiedniego segmentu równą 1. Tak jak było wspomniane wcześniej w każdej kolumnie jest tyle sterowników ile jest potrzebnych segmentów do zapalenia, więc na przykładzie kolumny wyświetlającej liczbę 2 możemy wywnioskować, że żeby wyświetlić taką liczbę to musimy zapalić segmenty A, B, D, E i G, czyli jest nam potrzebne 5 sterowników. W każdym sterowniku na wyjściu wprowadzamy te pięć zmiennych odpowiedzialnych za zapalanie tych segmentów w taki sposób, że pierwszy sterownik z kolumny zwraca zmienną A, drugi B itd.













To tyle, mamy wyświetlacz siedmiosegmentowy oraz możemy się teraz napawać ładnie wyświetlanymi danymi. Na poniższym obrazku w sterowniku stałych utworzyłem zmienną 0 równą 7 i jak widać liczba wyświetliła się prawidłowo.
1.2. Wyświetlacz siedmiosegmentowy jednocyfrowy cz.2
Tabela informująca jakie segmenty są potrzebne do wyświetlenia poszczególnych cyfr:

Wyświetlana liczba
Potrzebne segmenty
Liczba potrzebnych sterowników
Wynik
0
A, B, C, D, E, F
6
1
B, C
2
2
A, B, D, E, G
5
3
A, B, C, D, G
5
4
B, C, F, G
4
5
A, C, D, F, G
5
6
A, C, D, E, F, G
6
7
A, B, C
3
8
A, B, C, D, E, F, G
7
9
A, B, C, D, F, G
6


Kod:Jeśli chcesz możesz skorzystać z mojego wyświetlacza. Skopiuj ten kod na dole i użyj funkcji Zaimportuj kod na pasku zadań.



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
2.1. Wyświetlacz siedmiosegmentowy wielocyfrowy cz.1
Wyświetlacz wielocyfrowy jest zbudowany z wyświetlaczy jednocyfrowych z poprzedniego punktu, z czego same wyświetlacze zostały oznaczone jako 1.1, 1.2 i 1.3 (roboczo określiłem je modułami) oraz z modułów 2.1, 2.2 i 2.3, które podejmóją decyzję jaka cyfra zostanie wyświetlona na podstawie dostarczonej zmiennej. Wyświetlacz wielocyfrowy jest jeszcze zbudowany z czegoś za pomocą czego zmienna doprowadzona do wyświetlacza zostanie podzielona na cyfry jedności, dziesiątek, setek itd. tak, aby do każdego z wyświetlaczy jednocyfrowych doprowadzić zmienną, która ma jedną cyfrę, ten element nazwałem modułem 3.

Moduły 1 zostały połączone z modułami 2 w taki sposób, że sieć sterownicza np. modułu 1.1 jest połączona z siecią sterowniczą 2.1, która jest połączona ze wszystkimi wyjściami sterowników z tego modułu, dokładnie tak samo jak to było w punkcie 1. Natomiast moduły 2 zostały połączone z modułem 3 w taki sposób, że sieci sterownicze z modułów 2, które są podpięte do wejść sterowników są połączone z wyjściami odpowiednich sterowników z modułu 3 (wytłumaczenie które są to sterowniki jest w następnej części poradnika).


























































Do obliczania cyfr, które są na pozycji jedności, dziesiątek, setek itd. z liczby składającej się wielu cyfr wykorzystujemy tu to, że sterowniki wykorzystują zmienne całkowitoliczbowe. Polega to na tym, że dzielimy liczbę przez 10, 100 albo 1000 w zależności na jakiej pozycji się znajduje (jeśli chcemy obliczyć cyfrę na pozycji dziesiątek dzielimy przez 10 a jeśli cyfrę na pozycji setek przez 100 itd.). Np. chcemy obliczyć cyfrę na pozycji setek w liczbie 653. Dzielimy taką liczbę przez 100 i wychodzi nam 6,53, ale przez to, że sterownik korzysta z liczb całkowitoliczbowych to liczba po przecinku zostanie urywana i wychodzi nam 6.
Takich obliczeń można dokonać jedynie na pierwszej cyfrze liczby. Jeżeli chcielibyśmy obliczyć cyfrę na pozycji dziesiątek w liczbie 482 to na początku musimy obliczyć liczbę na pozycji setek (482 / 100 = 4) następnie pomnożyć wynik przez 100 (4 * 100 = 400) oraz następnie otrzymany wynik odjąć od początkowej liczby (482 - 400 = 82). Dzięki temu uzyskaliśmy liczbę 82, z której już bez problemu można wytyczyć cyfrę na pozycji dziesiątek (82 / 10 = 8).

Zapis za pomocą schematów blokowych modułu 3 będzie wyglądał następująco:
  • - rozpoczęcie i zakończenie obliczania cyfr
  • - wczytanie zmiennej (w module 3 będzie to odpowiednik sterownika stałych)
  • - dokonywanie obliczeń (w module 3 będzie to odpowiednik sterownika arytmetycznego)
  • - cyfra na pozycji jedności
  • - cyfra na pozycji dziesiątek
  • - cyfra na pozycji setek

A tutaj to jak wygląda kabelkologia w module 3:
2.2. Wyświetlacz siedmiosegmentowy wielocyfrowy cz.2
Tak samo jak poprzednio możesz skorzystać z mojego wyświetlacza:
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
3. Komórki pamięci, liczniki i przepustnica
Zarówno liczniki jak i przepustnica wykorzystują do działania komórki pamięci zbudowane ze sterownika arytmetycznego, w którym wejście i wyjście jest połączone ze sobą przewodem. Na wejściu jest dokonywana operacja Dla każdego sygnału + 0 a na wyjściu jest zwracany Dla każdego sygnału.
Komórki pamięci działają w taki sposób, że do wejścia komórki jest wprowadzana jakaś zmienna, sterownik dodaje do niej 0, czyli nic się z nią nie dzieje i na wyjściu zwraca tą zmienną, z która nic nie zrobił, ale dzięki temu, że wyjście jest połączone z wejściem to ta zmienna jest znowu wprowadzana do wejścia, znowu nic się z nią nie dzieje i znowu jest zwracana na wyjściu i tak w kółko. Dzięki takiej komórce pamięci można zapisywać proste dane.
Działanie bardziej się to rozjaśni na poniższych przykładach.
















Licznik 1:
Mamy taką sytuację, że wyżej wspomniana komórka pamięci jest podłączona z taśmociągiem, w którym jest włączona opcja Odczytywania zawartości taśmociągu oraz jest zaznaczony Tryb odczytu zawartości na Pulsujący.
Możemy zauważyć w prawym górnym rogu, każdy przejeżdżający przedmiot na taśmociągi jest dodawany do zmiennej (w tym przypadku jest to żelazna płytka). Polega to na tym, że komórka pamięci przetrzymuje informacje o tym ile jest równa zmienna a każdy przedmiot odczytany z taśmociągu jest to tej zmiennej dodawany.





























Licznik 2:
Mamy taką sytuację, że do taśmociągu jest podłączona komórka pamięci tak samo jak w poprzednim liczniku (to ten lewy sterownik) oraz trochę dalej taśmociąg z takimi samymi ustawieniami jak ten poprzedni jest podłączony do wejścia sterownik arytmetycznego, który na wejściu dokonuje operację Dla każdego sygnału * -1 a na wyjściu zwraca Dla każdego sygnału. Wyjście tego sterownika jest połączone z wejściem komórki pamięci.










































Możemy zauważyć, że to narzędzie, które zbudowaliśmy liczy ile jest przedmiotów pomiędzy dwoma taśmociągami połączonymi do sterowników. Pomiędzy przednią częścią pierwszego taśmociągu (bo to w tym punkcie taśmociąg wykrywa przedmiot) a przednią częścią drugiego taśmociągu są 4 taśmociągi. Na jednym taśmociągu może maksymalnie się zmieścić 8 przedmiotów, więc liczba przedmiotów na tych 4 taśmociągach powinna wynosić 32 i tak właśnie jest.
Ten licznik działa w taki sposób, że sterownik po lewej stronie jest komórką pamięci i zapamiętuje wartość zmiennej. Pierwszy taśmociąg (ten po lewej) dodaje do zmiennej każdy przelatujący przedmiot a następnie ten sam przedmiot przelatuje przez drugi taśmociąg którego impuls jest mnożony przez -1, czyli jest odejmowany od zmiennej.













Przepustnica:
Jest to narzędzie, które służy do ograniczania przepuszczanych przedmiotów. Jest zbudowana z tego samego licznika, który był poprzednio, tylko z jedną mała zmianą - w pierwszym taśmociągu jest dodatkowo wprowadzony warunek wyłączenia. Warunek brzmi Jeżeli którykolwiek sygnał będzie większy od liczby przedmiotów, które chcę, żeby były na danej linii taśmociągów +8, to zatrzymaj taśmociag. Oznacza to mniej więcej tyle, że jeśli chcemy aby na danej linii były tylko 2 przedmioty to dodajemy do tej liczby 8 i ustawiamy warunek taki jak poniżej.
4. Timery
Timery tak ogólnie mówiąc służą do opóźniania sygnałów. Mogą one działać przez to, że gra odświeża się z częstotliwością 60 razy na sekundę (przy założeniu, że nie masz lagów) a sterownik może wykonać tylko jedno obliczenie na jedną klatkę. Oznacza to, że jeśli chcielibyśmy opóźnić sygnał o 1 sekundę to timer musi wykonać 60 obliczeń.

Timer 1:
Mamy taką sytuację, że chcemy aby po wykryciu jakiegoś przedmiotu na taśmociągu sygnał został opóźniony o 1 sekundę oraz chcemy aby po tej 1 sekundzie opóźniony sygnał zapalił lampę (tak jak jest to zaprezentowane na poniższym gifie).
Na samym początku wykonujemy coś co wykryje przedmiot na taśmociągu i przekaże stały sygnał równy 1 (równy 1 dlatego, ponieważ chcemy aby w ciągu 1 tiku do zmiennej w komórce pamięci została dodawana wartość 1). W skład tego będzie wchodzić taśmociąg z włączonym odczytem zawartości taśmociągu i stałym trybem odczytu, który jest połączony do wejścia sterownika decyzyjnego, w którym na wejściu jest warunek jeśli Którykolwiek sygnał jest większy od 0, a na wyjściu jest zwracana wartość Którykolwiek sygnał równa 1 (ten sterownik decyzyjny jest potrzebny, ponieważ taśmociąg zwraca sygnał, który jest różny od 1 - czego nie chcemy, więc musimy zamienić ten sygnał na inny równy 1).
Następnie musimy zbudować komórkę pamięci, która będzie zapisywać zmienną oraz do której będzie dodawana 1 po wykryciu przez taśmociąg przedmiotu. Więc budujemy taką samą komórkę pamięci jaką budowaliśmy wcześniej i łączymy jej wejście (lub wyjście - i tak są one połączone) z wyjściem sterownika decyzyjnego.
Ostatnim krokiem będzie zbudowanie lamy i połączenie jej ze sterownikiem stałych. W lampie musimy włączyć tryb pracy Włącz/wyłącz z warunkiem Którykolwiek sygnał większy od 60 (większy od 60 dlatego, ponieważ chcemy aby sygnał został opóźniony o 1 sekundę, jeźli chcielibyśmy opóźnić sygnał o np. 5 sekund to musimy dać warunek Którykolwiek sygnał większy od 300).

Tak więc podsumujmy to co się wydarzy po wykryciu przedmiotu przez taśmociąg:
  1. Taśmociąg wykrywa przedmiot
  2. Sterownik decyzyjny zamienia sygnał taśmociągu na inny stały sygnał równy 1
  3. Do zmiennej w komórce pamięci co 1 tki jest dodawane 1
  4. Po 60 klatkach czyli po 1 sekundzie zmienna jest równa 60, więc lampa się zapala





























Timer 2:
Mamy taką sytuację, że chcemy stworzyć jakiś mechanizm, który będzie zapalał lampę co 1 sekundę na 1 klatkę. Poprzedni timer się nie nada, ponieważ jest "jednorazowy", tz. poprzedni timer działał tak, że po wykryciu jakiegoś przedmiotu na taśmociągu co klatkę do zmiennej w komórce pamięci zostawało dodawane 1, więc po przekroczeniu progu, po którym lampa się zapaliła do zmiennej dalej było dodawane 1, co skutkowało tym, że po zapaleniu lampy ona świeciłaby się już cały czas.
Ten timer zapobiega temu i ma w sobie wbudowany ogranicznik, który po przekroczeniu progu zapalenia lampy (czyli zmiennej równej 60) odejmie od zmiennej właśnie 60, dzięki temu powstanie nam coś w rodzaju metronomu, który z określoną częstotliwością będzie na chwilę zapalał lampę.














Na początku budujemy dokładnie to samo co poprzednio, czyli budujemy coś co wykryje sygnał z zewnątrz, czyli w tym przypadku ze sterownika stałych i przekaże stały sygnał równy 1 do komórki pamięci (na obrazku tym czymś co przekaże stały sygnał będzie prawy górny sterownik, a komórką pamięci jest lewy górny sterownik).
Następnie musimy wybudować coś co po przekroczeniu ustalonego progu (zmienna równa 60) od zmiennej w komórce pamięci odejmie 60. W tym celu budujemy sterownik decyzyjny (na obrazku prawy dolny sterownik), którego wejście łączymy z komórką pamięci. Na wejściu wstawiamy warunek Którykolwiek sygnał większy od 58, a na wyjściu Którykolwiek sygnał równy 1. Ten sterownik decyzyjny będzie wykrywał czy próg został przekroczony.
Kolejny krokiem będzie zbudowanie sterownika arytmetycznego (na obrazku lewy dolny sterownik), którego wejście łączymy z poprzednio wspomnianym sterownikiem decyzyjnym, a wyjście z komórką pamięci. Na wejściu wstawimy operację Dla każdego sygnału * -30, a na wyjściu Dla każdego sygnału. Ten sterownik będzie odejmował od zmiennej w komórce pamięci 60.
Na samym końcu budujemy lampę z warunkiem Którykolwiek sygnał równy czemuś z przedziału od 2 do 60.

Pewnie się zastanawiasz dlaczego w tej części timera odpowiedzialnej za odejmowanie 60 od zmiennej w sterownikach na wejściach jest akurat warunek > 58 oraz operacja * -30. Jest to spowodowane tym, że sterownik może wykonać tylko 1 obliczenie na klatkę i zanim sterownik arytmetyczny zacznie odejmować od zmiennej to minie 1 klatka podczas, której sterownik decyzyjny wykryje przekroczenie progu.
Poniżej jest zaprezentowane to jak zmienne zmieniają się z każdą kolejną klatką:

- Zmienna w komórce pamięci
- Zmienna na wyjściu prawego dolnego sterownika decyzyjnego






























Sterowniki górne:















Sterowniki dolne:















Jeżeli chcesz możesz skorzystać z tego timera:
0eNrNlt2OmzAQhd9lLluzCv9ZpFbqc1QRcmCSjAQG2SYqinj32rAlmyzZLEHa7g3CGJ8Zf0c+8gm2RYO1JKEhOQFllVCQ/D6Bor3ghf2m2xohAdJYAgPBSzvikvShRE2Zk1XllgTXlYSOAYkc/0DiduyuRo4Z5SinBbxuwwCFJk04dNQP2lQ05RalqTDqqJIXhVPwsjbadaXMkkrYqkbGcePnp5BBa16j+Ck0BcwWtayKdIsHfiRT1PyZkcwa0qmZy8flO5JKp282cSSpG/PlXL//w+Gi1QcSexhqKM0tU9cOyprLfn8J/IBumBeY2ULKKrv2sZeI4vVOKTcY2NhbP+w2XWfRXsHw7hgzxSW+oJKTHBqCJJpmdFY+Y1IPcEKeHSwjhVYmPaNaMahqNKD6LuC7WVk1um5may8jzC6m/fenw7f+MPA+Wsy9UnNv2Ou/d2amvA1mevsiu8zY6QOwujoAPx+w9VK5bk2fjdDpTlZlSsJIQbLjhcJZxgfLvIqup6etC8a9/ENyzzv3Kq/uu7ejQqO8kdu3mP4aYDYvITXm9mYOQ/9jEMIF8RR+lXhyfPcyoL59TkBFCyNm2pLo0UgJ/3+khOuvmin+PK/CKa/Mvae/JyWvrmYMjuaA97i9tRvEz14crPzYC9Zd9xcID1og
Zakończenie
Dziękuję, że zechciałeś przeczytać mój poradnik oraz mam nadzieję, że zaprezentowane przykłady zastosowania sieci sterowniczych okazały się przydatne w rozwoju twojej fabryki, albo może zostałeś zainspirowany do zrobienia czegoś jeszcze ambitniejszego. Jeśli znalazłeś jakieś błędy w poradniku (broń boże ortograficzne), masz uwagi co do treści, chcesz zaproponować dodanie czegoś do poradnika, albo po prostu chcesz o coś zapytać to napisz komentarz.

Źródła informacji oraz inne wartościowe treści:
Factorio Circuit SR Latch, Counter and Edge Detection
Factorio - Tutorial - Combinator Clock with Display
Factorio wiki: Time[wiki.factorio.com]

Pozdrawiam Skamlo
14 opmerkingen
Gabriel 26 dec 2022 om 16:17 
Alternatywny step 1: pobierz sobie santas nixie tube display i ciesz się życiem :FrogPepe:
Mugis 3 sep 2022 om 15:43 
@Saki z rozdziału 3. weź komórkę pamięci lub licznik, ale zbuduj go na Sterowniku decyzyjnym, a jako warunek wypróbuj coś w stylu >0 lub >=1 lub <0 (jeżeli wolisz przechowywać ujemne). Potem postaw Sterownik arytmetyczny tam gdzie chcesz aby było wejście R, i zrób aby wysyłał sygnał który sprawi Fałszywe rozstrzygnięcie warunku. Wtedy bramka się wyzeruje.
Czyli spraw aby wysyłało się np. -15.

A aby ustawić bramkę wysłać możesz do niej sygnał o wartości <>0, zależnie od tego czy wybrałeś aby trzymała numery pozytywne czy negatywne.

Ewentualnie, jeśli nadal nie będziesz mógł rozkminić, to polecam stronę Circuit network cookbook na wiki.factorio.com a dokładniej punkt 9.1. :gmgear: :headcrab: Powodzenia! :medicon:
Saki_PL 3 sep 2022 om 12:33 
Fajny poradnik a masz może jakiś fajny sposób by za pomocą sterowników zrobić bramkę RS?
Bo mi jedyne co przychodzi do głowy to 2 skrzynki i podajniki które będą wyjmować z jednej skrzynki do drugiej.
Mugis 11 mrt 2022 om 13:21 
super poradnik! :steamthumbsup: ale jakoś tak sterowniki w factorio są zrobione że coś na nich stworzyć jest ciężko. w minecrafcie redstone był dużo bardziej elastyczny przydatny i jaśniejszy dla mnie. :steamfacepalm:
Mirage 9 jan 2022 om 10:12 
I tak tego nie ogarniam, ale podoba mi się :]
Skamlo  [auteur] 8 jan 2022 om 1:11 
@Iampycat This is Polish language...
LampyCat 7 jan 2022 om 17:00 
Ради этого я выучил чешский
Charlie Maxwell 26 dec 2021 om 9:30 
Nixi tubes
Charlie Maxwell 26 dec 2021 om 9:30 
spoko, ale jest mod ;)
Gabriel 22 dec 2021 om 14:15 
Cudo