Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Wyświetlacz LCD jako master MODBUS

Bieli 24 Jul 2015 20:07 6699 12
SterControl
  • Witam,

    Wyświetlacz LCD jako master MODBUS

    Pomyślałem, że warto byłoby pokazać dodatkową funkcjonalność wyświetlaczy DWIN ze sterownikiem DGUS a mianowicie OS. Do demonstracji został wybrany wyświetlacz DMT80480T070_18WT. Jest to model panelowy o IP65 matrycy 7", rozdzielczości 800x480 i interfejsie RS232/485 (zamiennie).
    Określenie Operating System jest pewną przesadą ale producent stosuje takie nazewnictwo. W rzeczywistości jest to kod napisany w asemblerze, który umieszczany jest pod adresem 23 w pamięci wyświetlacza. Asembler jest podobny do 51 więc sporo osób które wcześniej zaczynały przygodę z elektroniką liznęło mniej lub bardziej. No chyba, że ktoś miał wykładowcę z "ambicjami" to jeszcze obecnie może praktykować tę wiedzę na niektórych uczelniach.
    Cykl pracy wyświetlacza DGUS można podzielić na kilka etapów:
    1. Przetwarzanie zmiennych
    2. Wizualizacja
    3. Przetwarzanie panelu dotykowego
    4. Uruchomienie OS
    Czas jednego cyklu można ustawić na 200,160,120 lub 80ms. Po zakończeniu etapów 1-3 wyświetlacz rozpoczyna realizację programu aż do jego zakończenia lub do końca nastawionego cyklu. Jeśli program zostanie przerwany w następnym cyklu uruchomi się od początku. "Okienko czasowe" jakie mamy do dyspozycji zależy od rozdzielczości wyświetlacza i złożoności projektu. Np dla wyświetlaczy HD nie zaleca się stosowania cyklu 80ms.

    To tyle teorii. Projekt ma za zadanie stworzenie prostego układu Master-Slave w systemie MODBUS. Jako interface został zastosowany moduł ADAM 4051 który dysponuje szesnastoma wejściami binarnymi. Komunikacja ustawiona na 38400 8N1 z adresem 9.
    Podstawowa ramka komunikacyjna wyświetlaczy DGUS nie jest kompatybilna z MODBUS dlatego trzeba posłużyć się wspomnianym OS. Program jest dość zwięzły:
    Code:

       LDBR      R0,1,1       ;
       LDWR      R0,0005H ; Adres przechowywany w VP =0x0005
       MOVXR      R127,1,1   ;odczytaj ADR
       IJNE      R128,0,ADROK ; Sprawdzenie czy ADR<>0
       LDBR      R128,9,1   ;Jeśli adr=0 zmień na 9
       MOVXR      R127,0,1   ;wyślij zmienioną wartośc do DGUS
    ADROK:
       LDWR      R129,0102H    ; Spodziewana odpowiedz komenda i ilosc danych
       RMODBUS      R128,R131,R130 ;Odbierz dane MODBUS
       IJNE      R130,0FFH,RCVNUL;Sprawdzenie czy odebrane dane są poprawne
       LDWR      R0,09H ;Odebrane dane zapisz pod VP=0x0009
       MOV       R131,R101,1 ;Zamiana bajtów w slowie
       MOV       R132,R100,1 ;
       MOVXR      R100,0,1   ;Wyslij odebrane dane MODBUS do DGUS
    RCVNUL:
       LDWR      R130,0000H ; Zapytanie od rejestru 0
       LDWR      R132,0010H ; do rejestro 0x10
       LDBR      R8,6,1 ; CRC bedzie liczone z 6 bajtow
       CRCA      R128,R134,R8  ; Obliczyc  CRC
       COMTXI      0,R128,8 ; Wyslac ramke MODBUS
       END   


    Jak widać kod wcale nie jest długi.
    Teraz wizualizacja danych. Całość tworzymy w SDK.
    Wyświetlacz LCD jako master MODBUS

    Wyświetlacz LCD jako master MODBUS

    Ponieważ dane z modułu ADAM otrzymamy w formie szesnastu bitów do wizualizacji poszczególnych stanów posłużymy się obiektem "Bit Variable Icon". W którym określamy dla danego bitu jaka ma być ikona w stanie 0 a jaka w stanie 1. Jeśli byśmy mieli wejścia analogowe można je prezentować obiektem "Data Variable" jako liczbę albo "Icon rotation" jako wychylenie wskazówki.
    Oczywiście nie jesteśmy ograniczeni do wizualizacji wejść. Równie dobrze można odczytać status panelu dotykowego, a tak naprawdę skojarzonych z nim obiektów i wysłać dane do odpowiedniego modułu systemu MODBUS.

    Działający układ można zobaczyć tu:


    Jak widać wyświetlacze DGUS w wielu przypadkach mogą pełnić funkcję paneli HMI współpracując ze standardowymi urządzeniami wejść/wyjść, czy też sterownikami PLC.

    Koszt tego konkretnego wyświetlacza to ok 640zł ale jak wspomniałem można zastosować inne tańsze w zależności od potrzeb z panelem rezystancyjnym, pojemnościowym lub zupełnie bez dotyku.

    Załączam projekt w SDK całej wizualizacji wraz z kodem ASM.

    Cool? Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    Bieli
    Level 12  
    Offline 
    Has specialization in: maszyny cnc/teletransmisyja i telezabezpieczenia
    Bieli wrote 81 posts with rating 94, helped 0 times. Live in city Bydgoszcz. Been with us since 2003 year.
  • SterControl
  • #2
    Popak
    Moderator on vacation ...
    Witam
    Osobiście wole kupić panel firmy weintek, tańsze rozwiązanie i dodatkowo mam komunikacje po ethernet. koszt to niecałe 1000zł
    W przypadku twoim wychodzi nieco drożej. Panel 640zł + moduł ADAM 4051 kolejne ok 600zł.
  • SterControl
  • #3
    Bieli
    Level 12  
    Witam,

    Dyskusja na temat ceny zawsze powoduje "emocje" zwłaszcza na forum. Nowy 7" Weintek detalicznie <1000zł to bardzo dobra cena. Do tego też potrzebny jest jakiś moduł I/O.
    Moduł ADAM 4051 został nabyty na portalu aukcyjnym za 150zł, ale oczywiście nie nowy.
    Na pewno jest to pewna alternatywa dla Weinteka czy Yamo. A czy lepsza, czy gorsza? To już można długo dyskutować, a wynik będzie zależał od konkretnego zastosowania.
  • #4
    tehaceole

    Level 28  
    Bieli gdy kiedyś rozmawialiśmy o Modbus na DGUS to spodziewałem się kilku tysięcy linii kodu. One mają natywnie zaszytą obsługę Modbus w OS?
    Patrząc na zapis "RMODBUS" i te zaledwie paręnaście linii kodu w ASM jestem pod wrażeniem :)
  • #5
    Bieli
    Level 12  
    Cześć,

    No wychodzi, że jakieś wsparcie mają.
    RMODBUS to funkcja która sprawdza, czy w buforze UARTA jest prawidłowa ramka MODBUS.
    RMODBUS R#A, R#T, R#C,
    R#A - rejestr który przechowuje, adres, komendę i długość danych,
    R#C - przyjmuje 0 dla braku poprawnych danych, FF dla poprawnych danych MODBUS
    R#T - Odebrane dane

    Po stronie nadawczej mamy funkcję CRCA która oblicza sumę kontrolną dla konkretnych danych.
    Okazuje się, że ASM nie jest taki groźny we współczesnych procesorach.
  • #6
    tplewa
    Level 39  
    Bieli wrote:

    Asembler jest podobny do 51 więc sporo osób które wcześniej zaczynały przygodę z elektroniką liznęło mniej lub bardziej.


    Oj do 51 to mu daleko ;) nie ma kaumulatora itd. Blizej mu do ARM ;) czy nawer AVR lub innego RISC-a ;)

    Tak z ciekawosci dostepna jest lista rozkazow i jakis opis co mozna wykorzystywac z hardware/software wyswietlacza piszac sobie w tym ?
  • #9
    przemi01
    Level 9  
    Witam,
    Napisałem swój program na moduł DGUS, który chciałbym zastosować jako zadajnik/wyświetlacz do sterownika PLC, komunikującego się po modbusie. W jaki najprostszy sposób mógłbym wykorzystać Pański kod aby umożliwić komunikację ze sterownikiem. W pliku config zaznaczyłem opcję 'enable OS', przerzuciłem też pliki '23_modbus adam rmodbus.bin' i 'modbus adam rmodbus.asm' do odpowiednich folderów. Niestety na linii dalej cisza.
    Druga sprawa, to sposób w jaki ustawiany jest adres urządzenia DGUS, aby było ono widoczne w sieci. Z tego co widzę, to istnieje jedynie możliwość ustawienia adresu urządzenia, z którego pobierane są dane, natomiast nie samego wyświetlacza. Z góry dziękuję za odpowiedź.
    Pozdrawiam.
  • #10
    Bieli
    Level 12  
    Witam,

    Od czasu opublikowania tego wątku sprawa pracy w trybie MODBUS się zdecydowanie ułatwiła. Poprzez wgranie odpowiedniego FW decydujemy czy panel ma pracować jako MODBUS Master, Modbus Slave, czy w trybie DGUS.
    W przypadku trybu Modbus Slave cała przestrzeń pamięci wyświetlacza jest odpowiednim rejestrem Modbusa. W pliku Config.txt defniujemy adres wyświetlacza i parametry transmisji.

    W trybie Modbus Master generujemy plik 22 xxxx.bin który stanowi listę zapytań urządzeń Slave.
    Generator wygląda następująco.
    Wyświetlacz LCD jako master MODBUS

    Proszę określić czy panel ma być masterem czy slavem.
  • #11
    przemi01
    Level 9  
    Bardzo dziękuję za szybką odpowiedź, takie rozwiązanie zdecydowanie przybliża mnie do przebrnięcia problemu. Jednak przeglądnąłem stronę white electronics w celu znalezienia generatora, o którym Pan napisał, ale nie mogę go nigdzie znaleźć. Również firmware'u do wyświetlacza brak. Mój model to DMT32240M035_17WTZ6. Czy w takim wypadku jest możliwość pozyskania powyższych z innego źródła?
    Pozdrawiam.
  • #12
    Bieli
    Level 12  
    Panem DMT32240M035_17WTZ6 posiada sterownik miniDGUS, na dzień dzisiejszy może pracować jako MODBUS Master albo DGUS. Wybór trybu odbywa się poprzez zapis do adresu 0x07F8 wartości:
    1. Modbus master mode, 0x7F8 = 0x5AA5.
    2. Dwin serial CMD mode. 0x7F8 = 0.

    Generator podeślę na maila. Ewentualnie podeślę najnowszy FW bo nie wiem jaką masz u siebie wersję.
  • #13
    przemi01
    Level 9  
    Bardzo bym prosił o podesłanie obu rzeczy. Przekopałem całą stronę producenta, niestety nie znajduję na niej firmware'u do panelu miniDGUS. Rozumiem, że ten zapis adresu do startu MODBUSa również robię poprzez ten generator?
    Moja wersja FW wg tego co pokazuje SSCOM, to 19.
    Pozdrawiam