Przeszukaj forum
Pokazywanie wyników dla tagów 'Modbus'.
Znaleziono 6 wyników
-
Cześć. Mam za zadanie odczytanie parametrów licznika DRS - 100 - 3P -MOD lub jego inna nazwa LUMEL NMID30-1 oto instrukcja tego licznika https://www.lumel.com.pl/resources/Pliki do pobrania/NMID30-1/NMID30-1_instrukcja_obslugi_Modbus.pdf Do tego celu postanowiłem skorzystać z przykładu modbus od espressif: https://docs.espressif.com/projects/esp-modbus/en/latest/esp32/master_api_overview.html#modbus-api-master-overview Problem polega na tym że różne próby wypełnienia tablicy deskryptorów nie przynoszą oczekiwanych parametrów. Chcę na początek odczytać rejestr przechowujący napięcie pomiędzy L1 i N wypełniam tablicę jak poniżej: const mb_parameter_descriptor_t device_parameters[] = { // { CID, Param Name, Units, Modbus Slave Addr, Modbus Reg Type, Reg Start, Reg Size, Instance Offset, Data Type, Data Size, Parameter Options, Access Mode} // { CID_INP_DATA_0, STR("Data_channel_0"), STR("Volts"), MB_DEVICE_ADDR1, MB_PARAM_HOLDING, 30000, 2, // INPUT_OFFSET(input_data0), PARAM_TYPE_FLOAT, 4, OPTS(0,0,0), PAR_PERMS_READ }, { CID_INP_DATA_0, //CID STR("Data_channel_1"), //Par Name STR("Volts"), //Unit MB_DEVICE_ADDR1, //DEV ADDR '1' // MB_PARAM_HOLDING, MB_PARAM_INPUT, // Modbus Reg Type 0, // Reg Start 2, // Reg Size INPUT_OFFSET(input_data0), // Instance Offset PARAM_TYPE_FLOAT, // data type 'float' // PARAM_TYPE_FLOAT_BADC, // PARAM_TYPE_FLOAT_DCBA, // PARAM_TYPE_U32, 4, // Data Size OPTS( 0,0,0), // nd PAR_PERMS_READ_WRITE_TRIGGER },// nd Kod z którego korzystałem pochodzi z przykładów espressif https://github.com/espressif/esp-idf/tree/master/examples/protocols/modbus/serial/mb_master I (498) MASTER_TEST: Start modbus test... I (518) MASTER_TEST: Characteristic #0 Data_channel_1 (Volts) value = -4266057265024839188480.000000 (0xe3674370) read successful. I (1018) MASTER_TEST: Alarm triggered by cid #0. I (1018) MASTER_TEST: Destroy master... I (1018) main_task: Returned from app_main() Elektrycznie komunikacja jest sprawna gdyż podczas łączenia licznik wskazuje ikonę słuchawki oraz podłączenie "śledziem" modbus - usb również wskazuje na prawidłową komunikację, mam to przetestowane. Niestety dalsze działania, skomunikowania tego z esp nie dają efektów. W programach na PC często jest zaznaczenie "float swapped" co to oznacza?
-
Cześć. Jest możliwość podłączenia zewnętrznego włącznika do przekaźnika albo do wejść IN1, IN2, IN3 itd. w tym module z przekaźnikami którego można sterować poprzez RS485 (MODBUS)? Sterowanie odbywało by się poprzez smartfon przez aplikacje Home Assistant, ale chce tez włączać/wyłączać światło poprzez zewnętrzny włącznik. Jest taka możliwość w tym module? Jeśli nie to co będę musiał zastosować? https://pl.aliexpress.com/item/1005001800582338.html?spm=a2g0o.productlist.0.0.24693d1aYr2Nhr&algo_pvid=b7fec00c-debf-45d8-8cf3-d26caad0ac02&algo_expid=b7fec00c-debf-45d8-8cf3-d26caad0ac02-2&btsid=2100bdf116220333409527986e40c4&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_ Chce osiągnąć cos takiego, tylko nie wiem co zastosowali w SwitchBox BleBox, aby można było wyłączać/włączać przez zewnętrzny włącznik :
- 18 odpowiedzi
-
- przekaźnik
- Modbus
-
(i 1 więcej)
Tagi:
-
Opis konstrukcji Projekt powstał z myślą udostępnienia danych ze sterownika PLC przez internet. Wymieniony sterownik posiada port komunikacyjny RS232 oraz wykorzystuje protokół komunikacyjny Modbus RTU. Podczas wykonywania prac uznałem, iż miłym dodatkiem będzie możliwość zdalnego załączania urządzeń. Całość oparłem o uniwersalną płytkę stworzoną jakiś czas temu dla ESP8266. Schemat płytki uniwersalnej ESP8266: Oczywiście można skorzystać z płytki zamieszczonej w moim projekcie o stacji pogodowej. Jest ona niejako kolejną wersją powyższej (ale brak na niej dzielnika napięcia dla A0). A poniżej wygląd PCB z programu EAGLE: Oczywiście pliki Eagle i wszystko co niezbędne do powielenia projektu w załącznikach. Nie będę wymieniał wszystkich elementów, ponieważ od tego jest schemat. Nadmienię tylko, iż na płytce znajduje się stabilizator AMS1117 3.3V, z tego względu max napięcie zasilania to 12V (najlepiej niższe ze względu na grzanie się wspomnianego stabilizatora). Esp jest wpinane na PCB na adapterze (by zapewnić modułową konstrukcję).Uzupełnieniem konstrukcji jest konwerter RS232-TTL. Konwerter RS232-TTL jest zasilony z płytki ESP8266 napięciem 3,3V, natomiast RX i TX zostały wprowadzone na IN1 i IN2 ze schematu. Całość zaprogramowałem z wykorzystaniem Arduino IDE. Dla własnych potrzeb wprowadziłem odczyt wartości temperatur, potwierdzenia pracy urządzeń oraz rozkazy załączenia dla PLC: Modbus RTU: Rejestr 40001 - Temperatura kominka Rejestr 40001 - Temperatura w zbiorniku CWU Rejestr 40001 - Temperatura w kolektorze próżniowym Rejestr 40001 - Temperatura wody podłogówka Rejestr 40001 - Napięcie baterii akumulatorów (od paneli fotowoltaicznych) Rejestr 00005 - Potwierdzenie pracy pieca gazowego Rejestr 00007 - Potwierdzenie pracy schładzania instalacji kolektorów próżniowych Rejestr 40020 - Rozkaz na załączenie pieca gazowego Rejestr 40021 - Rozkaz na załączenie instalacji schładzającej Oczywiście całość oprogramowania sterującego instalacją domową działa autonomicznie na PLC. Przytoczone tutaj zmienne to tylko przykład możliwości wykorzystania wykonanego urządzenia oraz adaptacji zamieszczonych kodów do ESP8266. Jako interface webowy wykorzystuję gotową aplikację Cayenne IoT: https://cayenne.mydevices.com/ Konstrukcja nie jest pozbawiona wad: nie jestem programistą, więc kod nie jest optymalny, działanie Cayenne My Devices na PC pozostawia wiele do życzenia (o wiele lepiej działa aplikacja na Android). W załączniku zamieszczam: Schemat w EAGLE wraz z rysunkiem ścieżek (wersja oryginalna, pierwotna oraz zmodyfikowana ze stacji meteo). Skompilowane pliki źródłowe oprogramowania (oraz wersja edytowalna). Dokładniejszy opis konstrukcji oraz konfiguracji całości. Bramka Modbus.zip ESP8266 - Robert - RTUMaster.zip esp8266_STACJA_METEO (2).zip esp8266_rs232.zip
-
Witam. Muszę wykonać projekt robota pomiarowego. Ostatnim elementem, jaki mi został jest przesyłanie danych z kontrolera MIC488 do Arduino. Chciałbym to wykonać wykorzystując MODBUS-a RTU. Zaopatrzyłem się w układ MAX485. Potrzebuję pomocy z użyciem bibliotek MODBUS(jaka wybrać do mojego projektu oraz jak jej używać). Przykłady w Internecie sa dla mnie niejasne. Z początku myślałem nad stworzeniem zmiennej o strukturze takiej samej jak ramka danych z MIC488 i do niej odczytywać wszystkie bajty. Pojawił się problem z informacją zwrotną do sterownika MIC488, dlatego wolałbym wykorzystać jakaś istniejąca bibliotekę. Liczę na Waszą pomoc.
-
Witam, moj pierwszy post na tym forum wiec pozdrawiam wszystkich 🙂 Przy okazji instalacji fotowoltaniki w gospodarstwie domowym stwierdziłem, ze fajnie by było monitorować bilans energetyczny. W tym celu zakupiłem licznik, po pierwszych nieudanych próbach połączenia z NodeMcu stwierdziłem ze wygodniej będzie postawić tam jakieś Raspberry - licznik jest w trudno dostępnym miejscu, Arduino OTA się nie sprawdziło, wiec postawiłem na wygodę czyli SSH. Zakupiłem Raspberry Pi Zero oraz nakładkę z interfejsem RS485 https://botland.com.pl/pl/raspberry-pi-hat-komunikacja/11722-rs485-pi-sn65hvd72-interfejs-rs485-dla-raspberry-pi-7426787870163.html?search_query=RS485+hat&results=3. Przygotowałem raspberry tak jak jest napisane tutaj http://minimalmodbus.readthedocs.io/en/master/installation.html i napisalem spkrypt: import minimalmodbus SLAVE_ADDRESS = 1 REGISTER_ADDRES = 0 # przykladowo minimalmodbus.BAUDRATE = 9600 minimalmodbus.PARITY = 'E' ins = minimalmodbus.Instrument('/dev/ttyAMA0' SLAVE_ADDRESS) print(ins.read_register(REGISTER_ADDRESS)) Problem w tym, ze skrypt zachowuje się losowo, czasem zadziała czasem wyrzuci IOError (No connection with module), kiedy np dla rejestru 32 bitowego używam read_long() lub dla floata read_float() wyrzuca albo IOError lub ValueError. Czy ktoś ma doświadczenie w tej materi i wie co posprawdzać, co może byc nie tak? Jak będę w domu wrzucę pełne opisy błędów. z gory dzięki 🙂
- 2 odpowiedzi
-
Cześć! Realizuje bezprzewodową komunikacje po protokole Modbus RTU pomiędzy PC, a Robotem i mam pytanie : jeżeli Master generuje ramkę(adres urządzenia + kod funkcji(0x03 odczyt n rejestrów) + adresy n - rejestrów + liczba rejestrów + suma_kontrolna) do SLAVE (STM32f103vct6) to... JAKI podać adres rejestru z mikrokontrolera pod, którym jest jakaś dana np. 2 bajtowa ? Przykład o co chodzi : tworzę tablice przechowującą n dwóbajtowych(np.int16_t) elementów i chciałbym w zapytaniu MASTERA podać adres np. pierwszej komórki, pytanie jaki ???? jak zadeklarować tablice w języku C w programie robota by jej adres tj. adres pierwszej komórki był stały i znany dla MASTERA(zakładam, że utworzę taką tablicę i sprawdzę np. za pomocą terminala adres pierwszej komórki &tab[0] , by potem wykorzystać ją dla informacji dla MASTERA)???? Z góry dzięki, za pomoc i proszę o pytania jeśli coś niejasno opisałem !!!