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.

Arduino uno modbus rtu rs485 -

Sebus504 17 Mar 2015 10:07 3987 11
  • #1 17 Mar 2015 10:07
    Sebus504
    Poziom 11  

    Witam, czy ktoś może wytłumaczyć na przykładzie np ds18b20 jak wystawić go w protokole modbus rtu (slave), ale tak dla laika. Bawię się od dwóch dni arduino i proste układy typu barometr temp, wilgotność w konsoli działa. Nie wiem natomiast jak to powinno wyglądać jakbym chciał przesłać dalej po rs485.

    0 11
  • #2 23 Mar 2015 07:34
    Sebus504
    Poziom 11  

    Witam, czy to o co proszę jest takie trudne (nie do zrobienia) czy to taka "wiedza tajemna" do zrobienia tylko odpłatnie?

    Może być jakiś inny przykład wystawienia konkretnej wartości z arduino na rs485 modbus rtu.

    1
  • #3 26 Mar 2015 14:14
    Jakub
    Poziom 13  

    A masz jakieś swoje przemyślenia, jak to powinno działać? Czy na gotowca czekasz?

    0
  • #4 26 Mar 2015 17:40
    namok
    Poziom 25  

    Sebus504 napisał:
    ...proste układy typu barometr temp, wilgotność w konsoli działa.
    A ta konsola jak jest podpięta do arduino?

    Cytat:
    Nie wiem natomiast jak to powinno wyglądać jakbym chciał przesłać dalej po rs485.
    Taka samo jak po rs232, petla 20mA itp itd. rs485 to tylko fizyczny nośnik informacji.

    0
  • #5 26 Mar 2015 18:09
    Sebus504
    Poziom 11  

    No właśnie, gotowiec mnie nie interesuje, raczej wolałbym coś na przykładzie z wyjaśnieniem. Co za co odpowiada. Chciałbym zrozumieć - wiem kup sobie książkę i poczytaj (pewnie i będzie taki finał) ale narazie próbuję bez.

    0
  • #7 26 Mar 2015 20:03
    Sebus504
    Poziom 11  

    Wiem, byłem na tej stronie i też własnie myślałem żeby tak zrobić - odpalić cokolwiek aby działało a później myśleć jak to przerobić. Tylko ten sketch jest domyślnie dla rs232, a rs485 na układzie max485 potrzebuje dodatkowego pina oprócz rx tx.

    0
  • #8 26 Mar 2015 20:20
    tos18
    Poziom 37  

    Dodatkowy pin przełącza max485 między nadawaniem a odbiorem.Jeśli urządzenia ma być typu slave utrzymujesz maxa na odbiorze czekając na poprawną ramkę z poleceniem modbus i adresem twojego urządzenia od mastera. Po odebraniu polecenia przełączasz maxa na nadawanie i wysyłasz odpowiedź.

    0
  • #9 26 Mar 2015 21:23
    Sebus504
    Poziom 11  

    Ok, czyli bazując na linku wyżej też powinno działać?
    Define ID 3 // adres urządzenia
    a gdzie zmieniamy na komunikację rs232/rs485?

    0
  • #10 26 Mar 2015 21:29
    namok
    Poziom 25  

    Olej na razie rs485. Jak pisałem wcześniej to tylko nośnik informacji. Jeśli będziesz miał prawidłową komunikację po rs232 to reszta to "pikuś". Skup się na zrozumieniu jak to działa, co to jest dany "function code". Najczęstsze problemy w przemyśle z modbusem wynikają właśnie z niezrozumienia co dana funkcja czyta/pisze oraz adresacji.

    0
  • #11 27 Mar 2015 02:54
    tos18
    Poziom 37  

    Jak pisze kolega namok. Najpierw zaimplementuj poprawnie protokół modbus rtu na platformie i uzyskaj poprawną komunikację bazującą na RS232. Do testów użyj jakiegoś programu typu modbus master tool.
    Ważne będą:
    poprawna prędkość transmisji
    poprawne odczytywanie ramki oraz CRC
    poprawna interpretacja komend
    Przemyślany układ rejestrów (rejestru jeśli ma to być tylko odczyt temperatury)

    Czy bawiłeś sie fabrycznymi urządzeniami działającymi na modbusie ?
    Jeśli nie to warto chociażby poczytać ich dokumentację - można trafić na bardzo ładnie opisany protokół, funkcje oraz rejestry.

    0
  • #12 27 Mar 2015 07:51
    Sebus504
    Poziom 11  

    Urządzeniami bawiłem się (weintek, frisko, fatek) komunikacja działa. Co do arduino znalazłem sketch który działa tzn. nawiązuję komunikację programem typu qmodbus czy modbus poll

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    /**
    * Modbus slave example 3:
    * The purpose of this example is to link a data array
    * from the Arduino to an external device through RS485.
    *
    * Recommended Modbus Master: QModbus
    * http://qmodbus.sourceforge.net/
    */

    #include <ModbusRtu.h>

    // assign the Arduino pin that must be connected to RE-DE RS485 transceiver
    #define TXEN 4

    // data array for modbus network sharing
    uint16_t au16data[16] = {
    3, 1415, 9265, 4, 2, 7182, 28182, 8, 0, 0, 0, 0, 0, 0, 1, -1 };

    /**
    * Modbus object declaration
    * u8id : node id = 0 for master, = 1..247 for slave
    * u8serno : serial port (use 0 for Serial)
    * u8txenpin : 0 for RS-232 and USB-FTDI
    * or any pin number > 1 for RS-485
    */
    Modbus slave(1,0,TXEN); // this is slave @1 and RS-485

    void setup() {
    slave.begin( 19200 ); // baud-rate at 19200
    }

    void loop() {
    slave.poll( au16data, 16 );
    }
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Nie bardzo rozumiem o co chodzi z "au16data, 16"

    0