Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

System wbudowanego sterowania oparty na Linux.

avatar 05 Sep 2009 21:11 12097 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:
    Quote:
    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
    Attachments:

    Cool? Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    avatar
    Level 36  
    Offline 
    Has specialization in: serwonapędy, oswietlenie
    avatar wrote 4039 posts with rating 351, helped 157 times. Live in city NYC. Been with us since 2003 year.
  • #2
    avatar
    Level 36  
    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
    skynet_2
    Level 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
    avatar
    Level 36  
    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
  • #6
    Mje3sław
    Level 14  
    Mnie interesuje ten "- bardzo niski pobór prądu "... czyli ile?
  • #7
    kiler129
    Level 27  
    Mje3sław wrote:
    Mnie interesuje ten "- bardzo niski pobór prądu "... czyli ile?


    Typowy terminal z AMD Geode pobiera w idle ok. 5W. Szczytowo 10W.
  • #8
    skynet_2
    Level 26  
    avatar wrote:
    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
    ks_fenix
    Level 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
    eros81
    Level 14  
    A sterowniczek który ja podałem pobiera 1,5W w stresie
  • #11
    ks_fenix
    Level 23  
    Zastosowałeś tutaj przejściówkę USB->Com czy wykorzystałeś port wbudowany w płytę?
  • #12
    User removed account
    User removed account  
  • #13
    skynet_2
    Level 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
    User removed account
    User removed account  
  • #15
    rasbas
    Level 14  
    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
    Urgon
    Editor
    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
    Bojleros
    Level 16  
    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
    Pietro54
    Level 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
    avatar
    Level 36  
    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