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

Arduino i Modbus - jak prawidłowo odczytywać?

Merki 11 Lut 2013 10:56 1989 0
  • #1 11 Lut 2013 10:56
    Merki
    Poziom 11  

    Od kilku dni próbuję prawidłowo odczytywać i zapisywać rejestry protokołu Modbus za pomocą Arduino oraz oprogramowania Scada o nazwie Promotic (dostępna wersja freeware). Do ściagnięcia wersja freeware.
    W internecie znalazłem kilka różniących się od siebie implementacji Modbus dla Arduino. Przyznam szczerze, że większość jest dla mnie totalnie niezrozumiała w tym chyba najpopularniejsza odmiana jpmzometa :jpmzometa

    Tym niemniej znalazłem dwa dość przyjazne przykłady dla początkującego. Z pomocą jednego z nich udało mi się skomunikować ze SCADA oraz odczytać wartość z wejścia analogowego, drugim niestety tylko się połączyłem i nie mam zielonego pojęcia jak odczytać wartość.

    W załączniku przesyłam pierwszy program dla Arduino (dzięki niemu mogę się połączyć i odczytać wartość analogową).

    Nie miałbym nic przeciwko powyższej implementacji tym niemniej mam kilka pytań i wątpliwości:

    1. Rozumiem, że adresy rejestrów przypisywane są w kolejności wpisania w odpowiedniej sekcji powyższego programu? Problem w tym, że chcąc odczytać wartość jakiegoś wyjścia cyfrowego (dla przykładu pin 13 czyli dioda LED) nie uzyskuje innej wartości niż 0. Próbowałem różnych modyfikacji programu przesłanego mi przez pomoc techniczną PROMOTIC (zamieszczam w załączniku) i nic. Mogę za to bez problemu (prawie) odczytywać wartość wejścia analogowego. Prawie, gdyż na maksymalnym napięciu 5V podanym na wejście analogowe za pomocą diody, wyświetlana wartość waha się między ok. 900 a 1023. Z kolei po odłączeniu diody, wyświetlana wartość przyjmuje zakres od 0 do ok. 200. Nie wiem czy probrlm wynika z samego użycia diody, czy też potrzebny będzie po prostu jakiś filtr programowy, ale to w tej chwili jest mało istotny problem.

    2. W ustawieniach komunikacji pisze, że domyślnie ustawiony jest tryb pracy wykorzystujący RS-485. Ja natomiast używam zwyczajnego kabla USB czyli w sumie coś na wzór RS-232. W związku z tym mam pytanie czy do prawidłowej komunikacji czyli zapisu i odczytu do/z Arduino wystarczy, że wklepię 0 lub 1 w powyższym kodzie przy ustawieniach komunikacji? Czy też 0 to tylko odczyt, a 1 to tylko zapis?

    3. Czy powyższą implementację można tak ustawić, aby korzystała w pełni z możliwości Arduino Mega tzn interesuje mnie pełna obsługa wszystkich dostępnych portów?

    Narazie nie zamieszczam drugiej implementacji, żeby nie zaciemniać całości sprawy. W załączniku przesyłam przykładowy plik Promotic odczytujący wartość wejścia analogowego jaki otrzymałem od pomocy technicznej oraz całość bibliotek do Modbusa.

    Byłbym bardzo wdzięczny za pomoc, bardzo mi zależy na choćby drobnej podpowiedzi ;)

    0 0