Elektroda.pl
Elektroda.pl
X
Mierniki instalacji Metrel
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

System wbudowanego sterowania oparty na Linux.

avatar 05 Wrz 2009 21:11 11779 18
  • System wbudowanego sterowania oparty na Linux.

    System wbudowanego sterowania oparty na Linux.

    Postawiłem sobie za cel stworzenie sprawnego bezawaryjnego systemu sterowania dowolnym urządzeniem elektrycznym.
    Sterowanie ma się odbywać przez stronę internetową , wykorzystywać ma tylko to co daje system operacyjny bez żadnych specjalnych sterowników programowych czy sprzętowych.
    Do komunikacji z zewnętrznym urządzeniem wykonawczym wykorzystam port COM1 komputera.
    Częścią wykonawczą będzie sterownik oparty na mikrokontrolerze AVR.
    Za załączanie i wyłączanie urządzeń będą odpowiedzialne przekaźniki. (..)

    Tak więc poniżej zamieszczam pełen opis jak to wszystko wykonać.
    Opis tej części jest w pełni poświecony stronie softwarowej projektu i nie ma w nie znajdziemy w nim opisu jak napisać oprogramowanie do procesora avr czy też schemat części wykonawczej.
    Tak więc LINUX DLA ELEKTRONIKOW !!.:



    Oprogramowanie

    Projekt wymaga do działania odpowiedniego oprogramowania, a dla oszczędności i waloru naukowego został zaprzęgnięty do pracy system linux.
    Linux będzie miał za zadanie –
    - udostępniać usługi php i http
    - współpracować stabilnie z dużą ilością różnych konfiguracji sprzętowych na jakich zostanie zainstalowany
    - sterowanie urządzeniem wykonawczym ma być wykonane bez żadnych specjalnych sterowników
    - sterowanie ma być wygodne i proste w obsłudze.
    Aby spełnić wszystkie te wymogi trzeba było wybrać odpowiednią dystrybucję linuxa.
    Dla zapewnienia stabilności i długiego bezawaryjnego działania system musi być całkowicie uruchamiany w ramie.
    System nie może dokonywać żadnych zapisów na dysku twardym.
    Dla tego konkretnego przypadku dodatkowymi wymaganiami były :
    -małe rozmiary całego urządzenia
    -zasilanie ze zwykłego akumulatora 12V
    - bardzo niski pobór prądu
    Aby je spełnić zakupiłem płytę mini ITX, specjalny zasilacz ATX <> 12V , przejściówkę IDE <> CF oraz kartę pamięci CF.
    Wybór padł na PuppyLinux – dystrybucje dedykowaną dla komputerów z niewielką ilością pamięci ram i przystosowana do pracy z pamięciami flash – co jest bardzo istotne dla długiej i bezawaryjnej pracy obecnie dyski SSD są drogie a wszystkie dostępne karty pamięci na rynku mają ograniczona liczbę zapisów gwarantowanych do około 200 tyś.
    Ograniczenie o którym jest mowa wyżej należy traktować bardzo poważnie – w normalnej pracy różnego rodzaju karty pamięci nie są wykorzystywane tak intensywnie i liczba 200 tyś zapisów jest nie do osiągnięcia w realnym czasie użytkowania danej karty, ale system operacyjny jest w stanie bardzo szybko zużyć tą liczbę zapisów przez np. buforowanie na dysku czynności wykonywanych w ramie.




    System linux w swoich założeniach posiada specjalna partycje wymiany o nazwie SWAP.
    Partycja ta jednak nie może powstać w systemie z elektronicznym dyskiem.
    Trzeba tu nadmienić iż nawet dyski SSD sprzedawane obecnie również posiadają gwarantowaną liczbę zapisów ale wewnętrzne oprogramowanie dysku rozkłada równomiernie zapisy w kościach pamięci tak że producent nie czuje się w obowiązku wspomnieć że przy intensywnym używaniu dysku przez system – dysk zostanie uszkodzony.
    Wgranie systemu przeprowadza się zgodnie z zaleceniami instalatora.
    Po instalacji na naszym dysku elektronicznym należy dograć niezbędne oprogramowanie serwer php i SQL. Serwer stron internetowych jest już w standardzie w puppylinux dlatego nie musimy martwić się o niego.
    Wgranie serwera SQL i php odbywa się przez ściągnięcie z Internetu pliku o nazwie mysql-5.0.67_php-5.2.6-1.1-i486.pet

    Wykonywanie skryptów php.
    Strona internetowa steruje urządzeniem wykonawczym dzięki funkcji php exec().
    Pierwszą rzeczą jaką trzeba było ustalić przy realizacji tego projektu był sposób w jaki ta komenda działa w systemie linux.
    Przykładowy kod z podręcznika php który opisuje tą funkcję:

    Code:
    <?php
    
    Echo exec(‘whoami’);
    ?>

    Funkcja ta wywołana w systemie linux określa z jakiego użytkownika jest uruchomiony serwer www ,zwracając nazwę użytkownika na stronę.
    Robi to tak samo jak zwykły użytkownik wpisujący komendy w konsoli.
    W naszym wypadku funkcja ta zwraca nazwę _nobody_ - co jest zgodne z trendem bezpieczeństwa w systemie linux.
    W większości wypadków wyżej wymieniony użytkownik nie ma praw do wykonywania jakichkolwiek czynności na plikach systemu i podstawowych komend konsoli co stwarza niewielki problem - wszystkie komendy które kod php musi wykonać w systemie są nie dostępne dla użytkownika uruchomionego kodu.
    _Kod php 101_
    Code:
    <?php
    
    Echo exec(‘whoami’);
    Echo exec(‘stty –F /dev/ttyS0 9600 –ixoff icrnl ixon opost isig icanon iexten echo echoe echok echoctl echoke’);
    Echo exec(‘ echo ‘’##’’ > /dev/ttyS0’);
    ?>

    Tak więc powyższy kod nie zostanie wykonany bo :
    - nie mamy możliwości skorzystania z stty
    - nie możemy zapisać nic do urządzenia /dev/ttyS0
    - nie możemy skorzystać z echo
    Jeżeli sprawdzimy w konsoli kto może korzystać z np. stty przy pomocy
    ls –l /bin/stty
    uzyskamy informację że właścicielem pliku i jedyna osobą która może wykonać ten plik jest root. Z resztą poleceń będzie tak samo dlatego należy:
    - przypisać wyżej wymienione pliki użytkownikowi _nobody_
    - umożliwić wszystkim wykonywanie tych plików
    Tych dwóch czynności dokonamy przy pomocy chmod i chgrp:
    Code:
    Chgrp _nobody_ /bin/echo –h

    ( znacznik –h dopisujemy do funkcji echo ze względu na to że jest to symlink do busybox , można się o tym przekonać wykonując ls –l /bin/echo okazuje się jak zwykle ze standard _posix_ nie opisuje jak ma działać funkcja echo)
    Code:
    Chgrp _nobody_ /bin/stty –h
    
    Chgrp _nobody_ /bin/busybox
    Chgrp _nobody_ /dev/ttyS0

    Teraz sprawa wykonywalności:
    Cytat:
    Chmod 777 /bin/echo
    Chmod 777 /bin/stty
    Chmod 777 /bin/busybox
    Chmod 777 /dev/ttyS0

    Tak wiec dla poprawnej współpracy php z systemem należy dodać te komendy do skryptu który jest wykonywany przy każdym starcie systemu – plik rc.local w katalogu /etc/rc.d jest takim skryptem.

    Konfiguracja systemu
    Reszta w pliku PDF

    Załączniki:

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • Mierniki instalacji Metrel
  • #2 06 Wrz 2009 07:52
    avatar
    Poziom 35  

    System wbudowanego sterowania oparty na Linux.
    cześć 2
    złączam też pliki php z przykładem .
    Przyklad w PHP zostal tak napisany ze umozliwia wstawienie dowolnej grafiki np zdjecia pokoju lub obrys pomieszen a na nim umiejscowienie w dowolnym miejscu linku/ ktory aktywoje dany przekaznik
    Zachecam do pytan i analizy kodu php.
    Co do opisu samej elektroniki jest ona slowa bo nie ma naprawde nad czym tu sie rozwodzic choc jezeli beda chetni moge to opisac (poza tym zostalo mi pare laminatow)

  • #3 06 Wrz 2009 09:11
    skynet_2
    Poziom 26  

    Ciekawy projekt, szczególnie wykorzystanie karty CF no i oczywiście linux'a :D.

    Co do portów rs232 to przydałaby się opto-izolacja.
    Planujesz może podłączenie jakiejś kamery?

    A i nie dałeś trochę za dużo uprawnień? może lepiej:

    Code:
    Chmod 711 /bin/echo 
    
    Chmod 711 /bin/stty
    Chmod 711 /bin/busybox
    Chmod 666 /dev/ttyS0

    Bo rwx dla każdego razem z exec() jest trochę ryzykowne.

  • #4 06 Wrz 2009 09:16
    avatar
    Poziom 35  

    tak nie jest to zgodne z "poprawnoscia" polityczna no ale zakladam ze ten konkretny komputer bedzie pracowac w sieci wewnetrznej bez wyjscia do internetu - a raczej domownicy nie beda saobie samo hakowac swiatla :).

    Nie zamierzam podlaczac kamery - raczej bede chcial opsiac jak wyciagnac w prosty sposob dane z portu rs232 na strone internetowa bo jak teraz mozna zobaczyc przeplyw informacji jest tylko jednostronny

  • Mierniki instalacji Metrel
  • #6 06 Wrz 2009 11:22
    Mje3sław
    Poziom 14  

    Mnie interesuje ten "- bardzo niski pobór prądu "... czyli ile?

  • #7 06 Wrz 2009 11:59
    kiler129
    Poziom 27  

    Mje3sław napisał:
    Mnie interesuje ten "- bardzo niski pobór prądu "... czyli ile?


    Typowy terminal z AMD Geode pobiera w idle ok. 5W. Szczytowo 10W.

  • #8 06 Wrz 2009 12:41
    skynet_2
    Poziom 26  

    avatar napisał:
    raczej bede chcial opsiac jak wyciagnac w prosty sposob dane z portu rs232 na strone internetowa

    tworzysz plik port.sh o zawartości
    Code:
    #!/bin/sh
    
    cat /dev/ttyS0 & `echo 'hej AVR weź odeślij mi zmienne x,y,z' > /dev/ttyS0; sleep 1; killall cat`;

    w php
    Code:
    echo exec("sh port.sh");


    Mam nadzieję że ci się przyda ;)

  • #9 06 Wrz 2009 14:00
    ks_fenix
    Poziom 23  

    Tutaj nie ma procesora AMD Geode tylko C3 VIA. Mam identyczna płytę w domu. Procesor C3 pobiera do ok 20W w stresie. Cała płyta główna tak do 35W.

  • #10 06 Wrz 2009 14:03
    eros81
    Poziom 14  

    A sterowniczek który ja podałem pobiera 1,5W w stresie

  • #11 06 Wrz 2009 14:03
    ks_fenix
    Poziom 23  

    Zastosowałeś tutaj przejściówkę USB->Com czy wykorzystałeś port wbudowany w płytę?

  • #12 06 Wrz 2009 14:27
    69696
    Użytkownik usunął konto  
  • #13 06 Wrz 2009 14:37
    skynet_2
    Poziom 26  

    maxi128 więc "to", to jest head, a ja kombinowałem z tail i w końcu postanowiłem kilować cat'a, heh dawno nic w bash'u nie pisałem ;)

  • #14 06 Wrz 2009 18:16
    69696
    Użytkownik usunął konto  
  • #15 07 Wrz 2009 13:15
    rasbas
    Poziom 13  

    Fajny pomysł. Ja zrobiłem kiedyś coś podobnego, ale działającego w drugą stronę. Ze sterownika pieca C.O. leciały co 1s dane o temperaturach itd. RS232 do kompa. Prosty program w C na podstawie odebranych danych generował plik html ze stronką. Jest to chyba najprostrzy sposób prezentacji danych na stronce, bez wgłębiania się w php. Projekt avatar'a bardzo mi się podoba i warto chyba odkurzyć projekt i wejśc w php.

  • #16 07 Wrz 2009 15:55
    Urgon
    Poziom 36  

    AVE...

    Mogłeś kupić notebooka z 486. Niby koszt podobny, ale nie musiałbyś się martwić o odpalanie systemu w RAMie, bo miałbyś dostępny dysk twardy. Do tego zużycie energii raczej podobne, a możliwości ciut większe, bo i system może być większy i bardziej rozbudowany...
    I mam takie jeszcze zapytanie: czy to musi być PHP? Jakoś za tym nie przepadam.

    No i czy nie prościej zrobić moduł wykonawczy z interfejsem LAN? Wtedy można by nim sterować bezpośrednio używając przykładowo telnetu albo serwera umieszczonego gdziekolwiek w sieci lokalnej...

  • #17 07 Wrz 2009 19:22
    Bojleros
    Poziom 15  

    avatar czy orientujesz się może na ile przydatna byłaby opcja "async" przy montowaniu systemu plików ? Może da się jeszcze pogłębić proces keszowania zapisu poprzez machinacje w sysctl , jeżeli ma się podtrzymanie akumulatorowe to nie trzeba się bać padów zasilania. Swoją drogą myślę że nie byłoby problemem zastosowanie jakiejś płyty uruchomieniowej przykładowo ANTGW100 i masz od razu domowy router :)

  • #18 09 Wrz 2009 23:14
    Pietro54
    Poziom 13  

    Hej, moim zdaniem projekt jest bardzo, ale to bardzo fajny, chętnie bym go jakoś rozwinął nawet.
    Chociaż ihmo przydało by się zrobić instrukcję taką step by step. By każdy zjadacz chleba mógł sobie coś takiego w domu sprawić.
    ps. nie jestem zwolennikiem kart sd i tu też mi nie pasują one, tylko utrudniają życie.
    Ps. taki komputer to nie lada Gradka dla miłośników elektrowni wiatrowej:)
    12v na zasilaczu.. jak znalazł:)

  • #19 10 Wrz 2009 08:29
    avatar
    Poziom 35  

    Witam niestety nie jestem mistrzem w programowaniu linuxa :)
    Pietro54 dodam jeszcze tutaj material odnosnie elektroniki - tj poraz nty jak podlaczyc atmege do max232 i jak sterowac przekaznikiem z amtegi wiec wydaje mi sie ze to bedzie pelne doplenienie step by step co do innych propozycji - musze sprawdzic czy np te programy jak proces keszowania zapisu jest w mojej dystrybucji - bo staram sie unikac doinstalowywania nowych bibliotek i programow tak aby na wiekszosci linuxow dzialalo to ad hoc