Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

MODBUS Tester - prosty program do testowania transmisji MODBUS

bonkie 24 Lip 2011 18:50 13560 11
  • Witam Wszystkich :)
    Udostępniam prosty program pod Windows (testowany na XP i Win7 w wersji 32 i 64 bity) to testowania transmisji MODBUS. Jest tak prosty, że dla osób w temacie nie wymaga żadnej instrukcji !!!

    Ostatnio uruchamiałem urządzenie na ATmega128 gdzie zaimplementowałem transmisję MODBUS. Potrzebne mi były tylko dwie funkcje 3 (0x03 - Read Holding Registers) i 16 (0x10 - Write Multiple Registers). Nie mogłem w internecie odszukać czegoś spełniającego moje wymagania co do testowania, więc poświęciwszy 3 wieczory napisałem pod winzgroze program, który wysyła i odbiera te komunikaty.
    Dodatkowo posiada zakładkę do wizualizacji zegara. Mój układ z ATmegą posiada na płycie chip DS1307, jego dokumentacja jest dostępna, więc nie będę omawiał rozkładu poszczególnych bajtów. W zakładce wystarczy podać adres pamięci, z którego ma być odczytana wartość zegara i automatycznie co sekunda wysyłany jest rozkaz 0x03 MODBUS odczytu 4 rejestrów, a odebrane dane są przystępnie wizualizowane.

    MODBUS Tester - prosty program do testowania transmisji MODBUS MODBUS Tester - prosty program do testowania transmisji MODBUS MODBUS Tester - prosty program do testowania transmisji MODBUS MODBUS Tester - prosty program do testowania transmisji MODBUS MODBUS Tester - prosty program do testowania transmisji MODBUS

    Program posiada prosty terminal śledzący wszystko co wchodzi na wybrany w ustawieniach port COM oraz kalkulatory sum kontrolnych CRC i LRC. Pracuje zarówno w trybie ASCI jak i RTU, umożliwia zmianę pozycji bajtów CRC (LoHi na HiLo), gdyż okazuje się, że nie wszystkie urządzenia spełniają standard MODBUS w tym wzgedzie (np. sterowniki SIMENS), wszelkie ustawienia zapamiętywane są w rejestrze windows pod kluczem: HKEY_CURRENT_USER\Software\MODBUS_Tester, tak, że po zamknięciu programu nie są tracone.

    PROGRAM JEST W PEŁNI MOJEGO AUTORSTWA, UDOSTĘPNIAM GO WSZYSTKIM TYLKO I WYŁĄCZNIE DO ZASTOSOWAŃ NIEKOMERCYJNYCH!!! JAKIEKOLWIEK CZERPANIE KORZYŚCI MATERIALNYCH BEZ MOJEJ ZGODY JEST NIELEGALNE!!!

    Testowałem go sam, wydaje się działać poprawnie, jednak nie wierzę w cuda i pewnie popełniłem wiele baboli!!! Proszę wszystkich o informację o takowych oraz o propozycję rozbudowy tego programu. Może wspólnie coś fajnego zrobimy :) Równocześnie proszę o wyrozumiałość program ma spełniać podstawowe swoje funkcje a nie być arcydziełem, więc graficznie do końca nie jest dopracowany.

    Pozdrawiam
    Piotrek


    Fajne!
  • #2 25 Lip 2011 15:01
    Svavo
    Poziom 23  

    A spotkałeś się z programem z załącznika? Bardzo prosty, spełniający podstawowe wymagania.
    W Twoim programie mógłby się przydać odczyt/zapis zmiennych w formacie float i pojedynczych bitów (funkcja 0x01).
    Pozdro.

    Załączniki:
  • #3 25 Lip 2011 15:47
    bonkie
    Poziom 9  

    Tak, doskonale znam ten program!!!
    Niestety jak dla mnie posiada sporo ograniczeń. Po pierwsze prędkość transmisji tylko do 57600 bodów (potrzebowałem co najmniej 115200), po drugie nie spełnia w 100% standardu MODBUS w kwestii sumy kontrolnej CRC. Wysyła i odbiera ją w kolejności CRC Hi potem CRC Lo, standard opisuje to na odwrót (przykład - strona 39 załącznika).
    Format float to tylko prezentacja danych więc to nie problem z dodaniem. Co do funkcji 0x01 znajdę chwilkę to ją dorzucę :)
    Pozdrawiam serdecznie
    Piotrek

  • #4 01 Sie 2011 22:14
    bonkie
    Poziom 9  

    Witam serdecznie :)
    Wziąłem sobie do serca sugestie Svavo i przygotowałem kolejną wersję (2.02) mojego MODBUS tester'a.

    MODBUS Tester wersja 2.02 ważniejsze zmiany:
    poprawka:
    1) poprawiona liczba bajtów do wysyłki przy zapisie ustawień w trybei RTU w zakładce zegara
    2) poprawione wyświetlanie wskazań w zakładce zegara w trybie RTU
    3) poprawiona szata graficzna

    MODBUS Tester - prosty program do testowania transmisji MODBUS

    dodano:
    1) wyswietlanie wartosci binarnej, decymalnej i zmiennoprzecinkowej przy odczycie rejesrow funkcją 0x03

    W wersji 2.03, którą już przygotowuje, przewiduje wprowadzenie odczytu poszczególnych bitów (coils) funkcją 0x01 i ich zapisu funkcją 0x0F.
    Niestety nie posiadam żadnego urządzenia z zaimplementowanymi tymi funkcjami i nie mam czasu pisać oprogramowania pod jakiś sterownik więc zapraszam chętnych do stania się testerami oprogramowania ;)
    Pozdrawiam
    Piotrek

    Załączniki:
  • #5 01 Sie 2011 22:36
    bonkie
    Poziom 9  

    Widzę, że dużo większym zainteresowaniem cieszy się dokumentacja Modbus, którą tutaj umieściłem więc rozszerzę ją jeszcze o kilka dokumentów :), z których korzystam odnośnie Modbus'a i liczb zmiennoprzecinkowych.
    Piotrek

  • #6 17 Paź 2012 13:57
    toon
    Poziom 28  

    Svavo albo może ktoś inny odpowie czy ten program który zamieściłeś powinien normalnie działać pod windows 2000

  • #7 17 Paź 2012 20:07
    Svavo
    Poziom 23  

    toon napisał:
    Svavo albo może ktoś inny odpowie czy ten program który zamieściłeś powinien normalnie działać pod windows 2000

    Niestety nie wiem, używałem go tylko pod WinXP.

    :arrow: bonkie
    W przemyśle maksymalna szybkość łącza dla Modbus'a RTU to 19200bps, więc więcej w testerze nie trzeba. A suma kontrolna jest zgodna ze standardem (przynajmniej ja nie spotkałem się z urządzeniem które ma zamienione bajty sumy kontrolnej).
    Pozdro.

  • #8 15 Wrz 2016 19:37
    koleszka
    Poziom 23  

    Zgadza się z kolegą Svavo, co więcej twój program błędnie liczy sumę kontrolną, a w dodatku nie sprawdza czy wybrany port nie jest w użyciu. Przelicz sobie CRC dla takiej ramki 0x010300000001 i porównaj z tym co wylicza twój program. Możesz skorzystać np. z tej stronki
    On-line CRC calculation and free library

    Jako wynik otrzymasz 0x0A84, a u ciebie wychodzi 0x840A. Fakt, że do ramki ładujesz najpierw LSB, a później MSB. Ostatecznie powinieneś otrzymać następującą ramkę danych

    Code:
    [01][03][00][00][00][01][84][0A]

    , a u ciebie ma ona postać
    Code:
    [01][03][00][00][00][01][0A][84]

    Przy próbie skomunikowanie się z chociażby czujnikiem pracującym po Modbus RTU otrzymujemy błąd CRC. Więc to twój program "odwraca CRC", a nie ten załączony przez kolegę Svavo. W takiej postaci twoja aplikacja do niczego się nie nadaje, a szkoda...

  • #9 24 Paź 2016 20:35
    ziomal156
    Poziom 10  

    Witam
    Przecież autor napisał że jest opcja z programu zmiany bytów CRC :-)


    Pozdrawiam

  • #10 24 Paź 2016 22:16
    koleszka
    Poziom 23  

    Co nie zmienia faktu, że CRC dla standardu Modbus RTU jest liczona niezgodnie z dokumentacją, którą autor sam zamieścił. I tak większym błędem jest korzystanie z portu otwartego przez inny program, co skutkuje komunikatem o pustym buforze. Jak by ktoś szukał porządnego programu do testów, to polecam qModMaster. Mi się bardzo przydał i działa bez większych zarzutów, a do tego obsługuje wszystkie podstawowe funkcje.
    qModMaster...-0.4.6.zip Download (24.43 MB)Punkty: 1 dla użytkownika

  • #11 11 Sty 2017 10:24
    lecho2506
    Poziom 2  

    Do szanownego kolegi BoNkiE mam nadzieję że nie przejmujesz się wywodami "koleszki".
    Korzystam z twojego programu już od prawie 2 lat jest bardzo dobry bo lekki i przyjazny w obsłudze.
    Uwagi dotyczące CRC świadczą o małym doświadczeniu z MODBUS'em i definicjami protokołu jak
    ktoś zagłebi się w temat będzie wiedział że definicje niestety zawierają różnice, uwagi te świadczą też że"koleszka nie zajrzał
    dokładnie do zakładki "MODBUS Setup". Mam tylko pytanko jeżeli zechce Pan odpowiedzieć w jakim narzędziu Tester jest przez
    Pana pisany ?

  • #12 11 Sty 2017 13:09
    bonkie
    Poziom 9  

    Witam serdecznie.
    Dziękuję za wszelkie uwagi i spostrzeżenia. Program był pisany przez prawie 10 lat, jako ewolucja z prostego (wręcz prymitywnego) programu kontroli do dedykowanego urządzenia w systemie sterowania lokomotyw, który popełniłem. Ale swoją formę przyjął w 3 dni :D
    Podzieliłem się nim publicznie, gdyż używało go wiele osób i nie mieli z nim problemu.
    Nigdy ten projekt nie miał podłoża komercyjnego i nie przeszedł rzeczywistego cyklu produkcyjnego oraz właściwych testów zakładanych przy tego typu oprogramowaniu. Jest to po prostu narządzie, którego w danym momencie potrzebowałem, i które ułatwiło mi pracę przy zupełnie innych projektach dotyczących programowania mikrokontrolerów. Był testowany w konkretnych sytuacjach i konfiguracjach komunikacyjnych, przy których moi znajomi i ja pracowaliśmy.
    Błądzić jest rzeczą ludzką i mogłem popełnić błędy, które dopiero po latach wychodzą, a są nawet niezgodne z dokumentacją na jakiej się opierałem przy jego tworzeniu i załączonej na tej stronie.
    Projektu nie zarzuciłem, ale poszedł w odstawkę niebawem po opublikowaniu, gdyż zajmuje się obecnie zupełnie innymi zagadnieniami i utraciłem łatwy dostęp do wszelkiego rodzaju uczelnianych laboratoriów badawczych i rzeczywistych systemów. Jeżeli są jakieś błędy, które zostały wyłapane, niestety ich naprawa musi poczekać na inne czasy, kiedy temat naturalnie odżyje.
    Nie twierdze, że brak czasu na wprowadzanie poprawek! Natomiast przy braku jakiegokolwiek urządzenia testowego musiałbym takowe sobie pobudować. I podejrzewam, że wykorzystując te same założenia i wiedzę (jak przy pisaniu tego oprogramowania), popełniłbym te same błędy co w końcowym efekcie dałoby stwierdzenie, że oprogramowanie działa prawidłowo.
    Więc jeżeli w sieci można znaleźć oprogramowanie, które spełnia Wasze oczekiwanie, to gorąco zachęcam do jego stosowania!
    A jeżeli wystarcza Wam mój to cieszę się, że w drobny sposób mogłem pomóc.
    Pozdrawiam
    BoNkiE

    Do kolegi lecho2506:
    oprogramowanie jest napisane całkowicie w C++ przy użyciu środowiska VisualStudio

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME