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

Uniwersalny programowalny sterownik v1

mario88 13 Maj 2012 23:08 24831 29
  • Uniwersalny programowalny sterownik v1

    Witam, chciałbym przedstawić projekt jaki miałem jakiś czas temu okazję wykonywać a mianowicie uniwersalny programowalny sterownik logiczny. Projekt składa się z trzech części - sterownika, układu odpowiedzialnego za programowanie sterownika/komunikację układu z komputerem. Ostatnim elementem jest aplikacja wspomagająca tworzenie programów dla sterownika.

    Co do "układu komunikacyjno-programujacego" to zastosowałem tutaj programator USBasp oraz FT232RL, czyli standard więc pominę dokładniejszy opis tej części projektu.

    Dane sterownika:
    Posiada on osiem wejść i osiem wyjść cyfrowych (logika dodatnia, 24VDC). Połowa wyjść jest oparta na tranzystorach NTD20P06L natomiast reszta na przekaźnikach AZ6991. Obciążalność wyjść tranzystorowych 500mA (oczywiście można ciut więcej). W sterowniku istnieją dwa osobne tory zasilania - jeden dotyczy zasilania wyjść (24VDC) drugi całej reszty (24VDC).
    Dodatkowo w sterowniku znajduje się RTC (DS1307), LCD 2x16 (w standardzie HD44780), buzzer. Całość jest zamknięta w obudowie z-109.
    Głównym układem jest ATmega16, dla którego oprogramowanie wykonywane jest przy pomocy aplikacji, którą postaram się przedstawić poniżej.

    Aplikacja została napisana przy pomocy Pythona z użyciem Qt, pozwala ona na tworzenie programów w języku FBD. Zaprogramowanie sterownika rozpoczyna się od konwersji FBD na ASM a następnie wywoływany jest kolejno gavrasm oraz avrdude i wsio :).
    W programie zaimplementowałem wstępnie 32 instrukcje: logiczne, timery, liczniki, przerzutniki, porównania i parę innych (np. konfiguracja wyświetlacza). Program działa pod systemami z rodziny GNU/Linux oraz Windows.

    Uniwersalny programowalny sterownik v1 Uniwersalny programowalny sterownik v1 Uniwersalny programowalny sterownik v1 Uniwersalny programowalny sterownik v1 Uniwersalny programowalny sterownik v1 Uniwersalny programowalny sterownik v1 Uniwersalny programowalny sterownik v1 Uniwersalny programowalny sterownik v1




    Małe wyjaśnienie do zdjęć: te plamy na płytkach to pasta lutownicza, za długo czekałem z jej usunięciem i trochę kurzu się nałapało. Próbowałem je usunąć izopropanolem, jednak im "mocniej" tarłem tym więcej soldermaski zaczynało schodzić więc postanowiłem zostawić jak jest.


    Link


    Link


    Link

    Uwaga - jakość filmów nie jest najlepsza, szczególnie trzeciego.

    Obecnie pracuję nad drugą wersją sterownika i tak pokrótce:
    Stabilizator 7805 zastąpiłem przetwornicą A8498, spowodowane jest to zbytnim nagrzewaniem się stabilizatora.
    Zredukowałem ilość kabli łączących obie płytki sterownika.
    Dodałem dwie pamięci, 24C256 - zapis/odczyt hasła oraz nazwy sterownika, AT45DB041B - zapis/odczyt programu (tutaj zastosuję dodatkowo ATmega32u2; w wersji pierwszej sterownika nie ma takiej możliwości).
    Sterowanie wyjściami cyfrowymi chcę przerzucić na MCP23008 co wymusi zastosowanie cyklu odczyt wejść -> wykonanie programu -> ustawienie wyjść.
    Do sterownika planuję dodać dwa wejścia oraz jedno wyjście analogowe.
    I jeszcze parę innych pomysłów/poprawek zamierzam wprowadzić w życie w wersji drugiej. Poniżej zamieszczam zdjęcie wstępnej płytki drugiej wersji sterownika.
    Uniwersalny programowalny sterownik v1


    Koszt: około 200-250zł, chociaż z tego co widzę to część części znacznie staniała więc dałoby się taniej to wykonać.
    I to chyba tyle :). Pozdrawiam.


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz pendrive 32GB.
  • #2 14 Maj 2012 02:32
    McMonster
    Poziom 32  

    Bardzo interesująca konstrukcja. Sam jestem w trakcie konstruowania czegoś podobnego. Ja uznałem, że oprę to o mikrokontroler STM32 z obsługą USB, na którym będzie pracowała maszyna wirtualna, też chcę napisać własne środowisko do programowania, ale w języku drabinkowym. Chcę też dorzucić kartę SD, złącze z szyną do podłączania własnej konstrukcji modułów i być może jakąś standardową szynę przemysłową. Całość dla radości budowania i do zabawy w jakąś prostą automatykę domową, zawodowo elektroniką się nie zajmuję (poza tym, że przypadkiem w pracy spadła na mnie opieka nad kilkoma sterownikami przemysłowymi i powiązanym sprzętem :P).

    Twoja konstrukcja to projekt szkolny/uczelniany, zawodowy, czy własny? I czy istnieje szansa na podzielenie się jakimiś materiałami lub kodem oprogramowania? Szczególnie mnie tu ciekawi działanie kompilatora.

  • #3 14 Maj 2012 06:35
    mixsnow
    Poziom 9  

    Dobrze by było gdyby kolega nam pokazał jeszcze schemat ideowy sterownika.

  • #4 14 Maj 2012 08:18
    tehaceole

    Poziom 28  

    Co do części sprzętowej - wygląda sympatycznie. Nie będę się tu rozwodził ponieważ sam stworzyłem podobne urządzenie i zwyczajnie mogę mieć inną wizję od Ciebie. Chętnie jednak podglądnąłbym schemat - z chęcią zaczerpnę jakieś ciekawe rozwiązanie.

    Natomiast chylę czoło za stworzenie środowiska przyjaznego dla użytkownika. Język FBD jest bardzo prosty do opanowania przez przeciętnego "Kowalskiego" więc Twoje urządzenie ma szanse przebić się na rynek.

  • #5 14 Maj 2012 10:29
    al555
    Poziom 20  

    Gratulacje !

    Możesz opisać dokładniej w jaki sposób przeprowadzana jest konwersja z FBD na instrukcje dla Atmegi, czy robi to program który napisałeś, czy za każdym razem jest wymieniany cały wsad do procesora czy tylko przesyłane instrukcje ( parametry).
    Dlaczego pisanie programu w Pythonie + Qt ułatwia implementacje FBD ?
    Czy jest jakoś ograniczona ilość komponentów w schemacie blokowym ?

  • #6 14 Maj 2012 14:47
    djoy
    Poziom 15  

    Dobry pomysł na biznes, kolega mario88 może chce uzupełnić lukę w rynku sterowników ? Czy taki był cel wykonania tego sterownika ? Jeśli tak to nie liczyłbym, na udostępnienie schematu lub innych szczegółów budowy urządzenia.

  • #7 14 Maj 2012 18:50
    Darektbg
    Poziom 21  

    al555 napisał:
    (...)prowadzana jest konwersja z FBD na instrukcje dla Atmegi, czy robi to program który napisałeś, czy za każdym razem jest wymieniany cały wsad do procesora czy tylko przesyłane instrukcje ( parametry).(...)


    Cytat:
    Zaprogramowanie sterownika rozpoczyna się od konwersji FBD na ASM a następnie wywoływany jest kolejno gavrasm oraz avrdude i wsio

  • #8 14 Maj 2012 19:59
    spirol
    Poziom 11  

    Bardzo fajny projekt, warto byłoby dorobić do niego moduły poszerzające ilość wejść i wyjść. Na marginesie chciałem zapytać, czy nie ma ktoś schematu kabla do S7?

  • #9 14 Maj 2012 20:33
    dgajew
    Poziom 18  

    Przed komercyjnym wdrożeniem urządzenia dobrze jest przeprowadzić testy w realnych warunkach pracy (szafa ze stycznikami, duże prądy w sąsiedztwie sterownika, falownik, niestabilne zasilanie, odporność na ESD), może się okazać, że Atmega 16 nie jest wystarczająco odporna do pracy w przemyśle, ważny jest też projekt płytek - ekranowanie, prowadzenie sygnałów, rozmieszczenie elementów zabezpieczających

  • #10 14 Maj 2012 22:46
    mario88
    Poziom 11  

    Witam, postaram się odpowiedzieć na wszystkie pytania.

    Cytat:
    Twoja konstrukcja to projekt szkolny/uczelniany, zawodowy, czy własny?

    Sterownik powstał w ramach projektu inżynierskiego, obecnie jest rozwijany w wolnym czasie.

    Cytat:
    Przecierz na rynku jest masa przekaźników programowalnych, mikro sterowników logicznych w bardzo atrakcyjnych cenach.

    Sterownik nie jest i nie przewiduję iż kiedykolwiek będzie na sprzedaż, po ukończeniu drugiej wersji (myślę iż do końca roku się wyrobię) całość będzie udostępniona na darmowej licencji.

    Cytat:

    Może o czymś nie wiem ale proszę mi wyjaśnić w czym ten sterownik jest lepszy od innych? A może kolega postawił sobie za zadanie zbudowanie sterownika samemu celem udowodnienia "Ja tez potrafię".

    Pod żadnym względem nie jest lepszy (oczywiście w zależności do czego porównujemy) ma być dobrą alternatywą. W ostatecznej wersji ma zawierać to co "najlepsze" z różnych sterowników oraz dodatkowo być tani. Co do "Ja tez potrafię" - no oczywiście ;), inaczej nie wybierałbym takiego tematu.

    Cytat:

    Dlaczego pisanie programu w Pythonie + Qt ułatwia implementacje FBD ?
    Czy jest jakoś ograniczona ilość komponentów w schemacie blokowym ?

    Python+Qt w niczym nie pomaga, zapewne w C/C++/JAVA będzie to równie irytujące :), po prostu znam ten język dlatego go wybrałem. Nie, nie ma żadnego ograniczenia.

    Cytat:

    warto byłoby dorobić do niego moduły poszerzające ilość wejść i wyjść
    Cytat:

    złącze z szyną do podłączania własnej konstrukcji modułów

    Rozmyślałem nad dodatkowymi modułami dla sterownika lecz obecnie odłożyłem ten pomysł na" później".

    Cytat:

    też chcę napisać własne środowisko do programowania, ale w języku drabinkowym.

    Ja osobiście jakoś wolę FBD - a dlaczego to nie wiem :).

    Co do zabezpieczeń - ostatnio trochę o tym czytam więc w drugiej wersji sterownika coś się nowego zapewne pojawi.
    Co do schematu - jak tylko go znajdę to udostępnię :).

    Pozdrawiam.

  • #11 14 Maj 2012 23:34
    lukpep
    Poziom 11  

    Robi wrazenie - kawal ciekawej roboty - zwlaszcza warstwa posredniczaca miedzy userem a przerzuceniem jego dziela na cos zrozumialego dla uC.

  • #12 15 Maj 2012 08:15
    adamusx
    Poziom 27  

    Witam,
    Świetny projekt! Coś godnego uwagi - szczególnie oprogramowanie:)

    Cytat:
    Zaprogramowanie sterownika rozpoczyna się od konwersji FBD na ASM a następnie wywoływany jest kolejno gavrasm oraz avrdude i wsio
    [/quote]

    Zastanawia mnie jak wygląda proces kompilacji z języka FBD na ASM. Wstawiając np bloczek timera, rozumiem że w Atmedze wykorzystywany jest jakiś timer. Timerów pewnie mozna wstawić więcej niz Timerów w ATmedze, więc rozumiem, że realizuje to jakiś algorytm, który automatycznie tworzy kod w assemblerze na podstawie wstawianych bloków ?

    Realizowałem kiedyś coś podobnego, ale w procesorze siedział kod, który interpretował wgrywane do niego listy instrukcji.

  • #13 15 Maj 2012 08:50
    tehaceole

    Poziom 28  

    dgajew napisał:
    może się okazać, że Atmega 16 nie jest wystarczająco odporna do pracy w przemyśle
    W takim razie Socomec chyba nie stosowałby AVR'ów np. w analizatorach parametrów sieci serii Diris...

  • #14 15 Maj 2012 10:18
    Ernest S.
    Poziom 13  

    Chylę czoło przed autorem projektu a zwłaszcza za napisanie własnego środowiska. Naprawdę szacun! Samo wykonanie na 5+, aczkolwiek przydałyby się jeszcze ze 2 AI i 2 AO i mamy sterownik, na którym mógłby kolega zarobić "parę groszy" :]
    Pozdrawiam

  • #15 15 Maj 2012 18:12
    pcservicebt
    Poziom 2  

    Hello can you make it in English

  • #16 15 Maj 2012 19:27
    dobry001
    Poziom 12  

    Całkiem niezły projekt .W sam raz do rozpoczęcia "zabawy" ze sterownikami.

    ATmegi "siedzą" w sterownikach Relpol-a i całkiem dobrze sobie radzą.
    Zazwyczaj w sterownikach potrzebnych jest więcej wejść niż wyjść (np w stosunku 2:1)

    Pasowało by też dorzucić bootloadera - uprościło by to programowanie sterownika i umożliwiło przejście na RS485

  • #17 16 Maj 2012 00:09
    mario88
    Poziom 11  

    Cytat:
    Pasowało by też dorzucić bootloadera - uprościło by to programowanie sterownika i umożliwiło przejście na RS485

    Staram się poprawiać kod programu/softu dla ATmegi więc z czasem pewnie coś w tej kwestii wykonam.

    Cytat:
    Wstawiając np bloczek timera, rozumiem że w Atmedze wykorzystywany jest jakiś timer. Timerów pewnie mozna wstawić więcej niz Timerów w ATmedze

    Tak, timerów może być dowolna ilość, wszystkimi zarządza timer2 (skonfigurowany na 1s).

    Cytat:
    więc rozumiem, że realizuje to jakiś algorytm, który automatycznie tworzy kod w assemblerze na podstawie wstawianych bloków ?

    Tak.

  • #18 16 Maj 2012 14:13
    seba_x
    Poziom 31  

    dgajew napisał:
    Przed komercyjnym wdrożeniem urządzenia dobrze jest przeprowadzić testy w realnych warunkach pracy (szafa ze stycznikami, duże prądy w sąsiedztwie sterownika, falownik, niestabilne zasilanie, odporność na ESD), może się okazać, że Atmega 16 nie jest wystarczająco odporna do pracy w przemyśle, ważny jest też projekt płytek - ekranowanie, prowadzenie sygnałów, rozmieszczenie elementów zabezpieczających


    No właśnie, testowałeś ten sprzęt w docelowym środowisku ?

  • #19 16 Maj 2012 17:52
    HUGO
    Poziom 15  

    Witam

    Co do testowania sprzętu w bojowych warunkach czyli zakłóceniach przemysłowych to koledzy mają racje, co do tego że Atmega nie jest odporna to wiadomo jedno że rodzina AVR-ów na pewno nadaje się do przemysłu przykładem tego jest sprzęt firmy LUMEL gdzie jest wiele różnych komponentów automatyki wykonanych w oparciu o te mikrokontrolery. Co jest ważne a no to aby wszystko było zaprojektowane zgodnie ze sztuką i wtedy taki sprzęt będzie sobie radził z pracą w ciężkich warunkach. To by było na tyle

    pozdrawiam

    Andrzej

  • #20 17 Maj 2012 23:40
    mario88
    Poziom 11  

    Cytat:
    No właśnie, testowałeś ten sprzęt w docelowym środowisku ?

    Nie.

  • #21 19 Maj 2012 23:37
    Mateusz-me-1990
    Poziom 15  

    Ciężko wymagać by w ramach takiego projektu autor wykonał wszelkie wymagane pomiary i testy tymbardziej, iż jest to urządzenie przemysłowe posiadające bardziej restrykcyjne wymagania oraz że takie testy do najtańszych nie należą. Cel został osiągnięty i wszystko pracuje jak należy i to jest najważniejsze na takim etapie na jakim znajduje się ten projekt.

    Mam ze swojej strony pytanie do autora. Jak mniej więcej zrealizowałeś realizację stworzonego algorytmu? Czy dobrze kombinuje, że dla każdego połączenia definiujesz zmienną i potem w zależności od zastosowanych funkcji umieszczasz masę instrukcji warunkowych, które są w stanie zmieniać wartości tych zmiennych i ostatecznie sterować wyjściami Twojego urządzenia. Ciekawi mnie też bardzo jak zrealizowałeś te fajne bloczki konkretnych funkcji.

    Naprawdę dobry kawał roboty. Powodzenia :D

  • #22 21 Maj 2012 18:53
    mario88
    Poziom 11  

    Cytat:
    Czy dobrze kombinuje, że dla każdego połączenia definiujesz zmienną i potem w zależności od zastosowanych funkcji umieszczasz masę instrukcji warunkowych, które są w stanie zmieniać wartości tych zmiennych i ostatecznie sterować wyjściami Twojego urządzenia.

    Jest prawie jak piszesz - zmienna jest definiowana dla obiektu nie połączenia (dlatego podczas kompilacji programu pomijane są niepołączone bloki), z tym iż nie dla każdego bloku jest definiowana zmienna.

    Cytat:
    Ciekawi mnie też bardzo jak zrealizowałeś te fajne bloczki konkretnych funkcji.

    Początkowo były to grafiki wczytywane z pliku *.svg, jednak ze względu na tragiczną jakość zdecydowałem się na dynamiczne rysowanie (czyli na obiekcie bazowym rysuję ikonkę reprezentującą dany obiekt). Jedynie grafiki w lewym menu są nadal wczytywane z pliku *.svg.
    Od strony technicznej są to klasy zawierające "pakiet" podstawowych zmiennych składowych (np. ilość we/wy, rodzaj we/wy, limit połączeń do danego we/wy, typ bloku, nazwa itp.), zmienne zależne od typu bloku oraz odpowiednie funkcje.

  • #23 29 Maj 2012 14:46
    wd40
    Poziom 21  

    Gratuluję świetnej roboty.
    A co do zakłóceń to mogę dodać, że podobne urządzenie a'la LOGO! (programowanie bez użycia komputera) zrobiłem 20lat temu i działa do dzisiaj.
    Wystarczy rozebrać dowolny sterownik "renomowanej" firmy, a okaże się jak trywialnie jest zrobiony. Jedyna trudność to upakowanie wszystkiego w małej obudowie.

  • #24 29 Maj 2012 17:37
    tob53
    Poziom 18  

    Porównuję amatorskim okiem Twoje dzieło z moim zakupionym sterownikiem i to naprawdę kawał porządnej roboty, podziwiam i gratuluję. Teraz będzie trochę prywaty, szkoda że nie tworzysz w oparciu o mikrokontroler uPSD 3354D, taki jest w moim urządzeniu, a czy da się przetworzyć Twoją aplikacje wykorzystywaną do programowania, na ten ww. typ mikrokontrolera, czy też ze względu na różnicę w budowie mikrokontrolerów to praca od nowa.
    Producent mojego sterownika oferuje darmową DOS-ową wersję do programowania w FBD, ale wg mnie można by poszerzyć troszkę możliwości sterownika(o np. dodatkowy własny moduł wejść lub wyjść analogowych), tylko trzeba umieć napisać takie "cóś" jak Twój program.
    Pytanie z gatunku absurdalnych, ponieważ nie wiem kto zacz, ten Python, jestem tym przysłowiowym "Kowalskim" który na własne potrzeby opanowuje język FBD, przy okazji potwierdzam spostrzeżenie, że można go dosyć szybko przyswoić, czy wg Twojej oceny, totalny laik przed emeryturą, ignorant w tej dziedzinie, przy pomocy kogoś doświadczonego, mógłby w rozsądnym czasie ( żeby zdążył przed ostatecznym zejściem ), popełnić dzieło podobne do Twojej aplikacji, czy to jest jednak taki poziom wiedzy i ogrom umiejętności, że szkoda czasu. Czy przewidujesz zaimplementować w urządzeniu i programie coś podobnego w działaniu do np. Modbus RTU.

    Pozdrawiam

  • #25 31 Maj 2012 19:24
    rdt
    Poziom 24  

    Witam
    Czy w programie można przeprowadzić symulacje? Pisał kolega ze bedzie calość udostępniona - mniej więcej kiedy?

  • #26 31 Maj 2012 23:08
    mario88
    Poziom 11  

    Witam

    Cytat:
    uPSD 3354D, taki jest w moim urządzeniu, a czy da się przetworzyć Twoją aplikacje wykorzystywaną do programowania, na ten ww. typ mikrokontrolera, czy też ze względu na różnicę w budowie mikrokontrolerów to praca od nowa
    Zależy w jakim sensie przerobić. Jeżeli chodzi np. o zamianę w moim projekcie ATmegi na uPSD3354D i obsługę z poziomu programu to wystarczyłoby zapewne pozmieniać na odpowiednie instrukcje. Natomiast jeżeli chodzi o przerobienie tej aplikacji do pracy z firmowym sterownikiem to już nieco inna bajka.
    Cytat:
    Pytanie z gatunku absurdalnych, ponieważ nie wiem kto zacz, ten Python, jestem tym przysłowiowym "Kowalskim" który na własne potrzeby opanowuje język FBD, przy okazji potwierdzam spostrzeżenie, że można go dosyć szybko przyswoić, czy wg Twojej oceny, totalny laik przed emeryturą, ignorant w tej dziedzinie, przy pomocy kogoś doświadczonego, mógłby w rozsądnym czasie ( żeby zdążył przed ostatecznym zejściem ), popełnić dzieło podobne do Twojej aplikacji, czy to jest jednak taki poziom wiedzy i ogrom umiejętności, że szkoda czasu.
    Niewątpliwie wiedzę trzeba jakąś posiadać i umiejętności ale niekoniecznie na poziomie zaawansowanym. Co do czasu poświęconego na napisanie takiej aplikacji to ciężko powiedzieć - spróbować zawsze warto.
    Cytat:
    Czy w programie można przeprowadzić symulacje?
    Nie i obecnie nie przewiduję takiej możliwości (może kiedy osiągnę "pewien poziom rozwoju" projektu to dodam taką opcję).
    Cytat:
    Pisał kolega ze bedzie calość udostępniona - mniej więcej kiedy?
    Ciężko powiedzieć, na chwilę obecną druga wersja to jedynie niedokończony projekt płytki PCB - na więcej obecnie nie mam czasu. W planach mam wykonanie drugiej wersji do końca roku.

  • #28 12 Cze 2012 14:29
    mikro_elektro
    Poziom 10  

    mam pytanie do autora projektu czy napisałby takie srodowisko pod platforme ARM7 rodzina LPC philipsa konkretny miktrokontroler wraz z kodem źródłowym za kilkaset zł . Prawa autorskie przejmuje w 100% i kody źródłowe.

  • #30 14 Paź 2012 14:59
    MotoMan
    Poziom 13  

    Witam.
    Świetny projekt, również myślę o podobny sterowniku własnej roboty i nurtuje mnie tutaj jedno rzecz. Czy dało by się programować taki sterownik za pomocą istniejącego już środowiska?
    Mój sterownik chciał bym oprzeć na mikrokontrolerze firmy ARM. Z tego co znalazłem w sieci to środowisko CoDeSys obsługuje sterowniki właśnie miedzy innymi na mikrokontrolerach ARM i tu mam pytanie. Czy dało by się w taki sposób zaprogramować mikrokontroler aby móc poźniej programować gotowy sterownik w wyżej wymienionym środowisku, gdzie mamy mozliwość programowania w LD jak i w FBD?
    Słabo się czuje w programowaniu wC/C++ stad moje pytanie ;)