logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

MODBUS Tester - prosty program do testowania transmisji MODBUS

bonkie 24 Lip 2011 18:50 28959 15
REKLAMA
  • 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? Ranking DIY
    O autorze
    bonkie
    Poziom 11  
    Offline 
    Specjalizuje się w: programista, elektronik
    bonkie napisał 6 postów o ocenie 8. Mieszka w mieście Łódź. Jest z nami od 2007 roku.
  • REKLAMA
  • #2 9756660
    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:
  • REKLAMA
  • #3 9756853
    bonkie
    Poziom 11  
    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 9783808
    bonkie
    Poziom 11  
    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 9783928
    bonkie
    Poziom 11  
    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
  • REKLAMA
  • #6 11420825
    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 11422086
    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 15933645
    Seba319
    Poziom 24  
    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
    [01][03][00][00][00][01][84][0A]

    , a u ciebie ma ona postać
    [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 16016071
    ziomal156
    Poziom 11  
    Witam
    Przecież autor napisał że jest opcja z programu zmiany bytów CRC :-)


    Pozdrawiam
  • #10 16016420
    Seba319
    Poziom 24  
    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
    Jako że zaproponowany program cieszy się sporą popularnością, to wrzucam najnowszą wersje aplikacji
    qModMaster....5.2-2.zip Download (12.31 MB)Punkty: 1 dla użytkownika
  • REKLAMA
  • #11 16190493
    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 16190850
    bonkie
    Poziom 11  
    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
  • #13 17133242
    ebonk
    Poziom 11  
    witaj.
    JESTEM W TRAKCIE POSZUKIWAŃ I WGŁĘBIAM SIĘ DOPIERO W TEMAT MODBUS , ,
    Zainstalowałem program u siebie (Win 7 64 bity), na sucho - TZN BEZ PODŁĄCZONEGO COMA, I POLE WYBORU com JEST wyszarzane (wybrany na stałe com 1) a ja mam np taki, który instaluje się na com 3. Nie wiem czy to się nie zmieni po podłączeniu .
    To taka drobna uwaga .

    Gienek
  • #14 17133267
    bonkie
    Poziom 11  
    ebonk napisał:
    I POLE WYBORU com JEST wyszarzane (wybrany na stałe com 1) a ja mam np taki, który instaluje się na com 3. Nie wiem czy to się nie zmieni po podłączeniu .

    Cześć
    Czy port COM jest na USB?
    Jeżeli tak, pojawi się dopiero po podłączeniu.
    Już nie pamiętam, ale chyba też trzeba będzie zrestartować MODBUS Testera, ale co do tego nie mam pewności - już parę lat nie zaglądałem do tego projektu.
    Jeżeli nie, proszę sprawdź ustawienia COMa w twoim systemie Win7 i przydziel zasób z widocznego dla MODBUS Testera zakresu portów.
    Pozdro
    Piotrek
  • #15 17135419
    ebonk
    Poziom 11  
    dzięki za reakcję .
    Będę próbować.

    pozdr.
  • #16 17804045
    arkady_pl
    Poziom 24  
    @bonkie
    Dodaj odświeżanie pierwszej zakładki z konfiguracją portów - każdorazowo po kliknięciu w zakładkę albo klawiszem. Bo jak się uruchomi apkę a jakiś port jest zajęty i wolni się go już po uruchomieniu testera to trzeba apkę zamknąć i ponownie uruchomić.

    Przy okazji pod WIN7 się wysypała.
REKLAMA