Pomoc w pisaniu programu z wykorzystaniem MODBUS

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
studentfizyki
Posty: 9
Rejestracja: 04 mar 2015 14:30
Wersja środowiska: LabVIEW 2013

Pomoc w pisaniu programu z wykorzystaniem MODBUS

Post autor: studentfizyki »

Dzień dobry!
Jestem raczkujący z Labview a muszę napisać program wykorzystujący go. Program łączący dwa termoregulatory http://www.apar.pl/regulator-uniwersalny-ar600.html wykorzystujące PT100 z sterownikiem http://www.apar.pl/konwerter-usb-na-rs- ... 0-1-2.html. Chodzi o odczyt temperatury początkowej (np. 25 stopni), zadanie nowej (np. 50 stopni) i zlecenie grzania urządzenia. Jedyne co udało się mi zrobić to odczyt temperatury z urządzeń. Niestety nie do końca rozumiem MODBUS i nie mam pojęcia co mam zrobić dalej. Niby mam jeszcze 3 tygodnie na napisanie tego, ale promotor dziwi się czemu mi tyle to zajmuje... Mógłbym wysłać program i jakby ktoś zechciał na niego spojrzeć i mi doradzić byłbym bardzo wdzięczny.
darekc
Posty: 77
Rejestracja: 29 mar 2007 00:00
Lokalizacja: Gliwice

Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS

Post autor: darekc »

Wynik pomiaru temperatury jest przechowywany pewnie w rejestrze o adresie 0 (tabela 17.6 w dokumentacji http://www.apar.pl/images/oldprodukt/inst_ar6x0.pdf). W którym rejestrze masz "zadać nową"? Zlecenie grzania ma zapewne polegać na włączeniu któregoś z przekaźników, który z kolei sterują grzałką.
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

Pomoc w pisaniu programu z wykorzystaniem MODBUS

Post autor: Jamal79 »

Witaj

Wrzuc vi'a tutaj, napisz dokladnie gdzie lezy problem. Napewno znajdzie sie ktos kto ci cos doradzi.

PS. zapisz do 12, spora wiekszosc pominela 13 w updatach...
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS

Post autor: Jamal79 »

darekc pisze:Wynik pomiaru temperatury jest przechowywany pewnie w rejestrze o adresie 0 (tabela 17.6 w dokumentacji http://www.apar.pl/images/oldprodukt/inst_ar6x0.pdf). W którym rejestrze masz "zadać nową"? Zlecenie grzania ma zapewne polegać na włączeniu któregoś z przekaźników, który z kolei sterują grzałką.
Z tego co widze ma 2 wyjscia, 1 ma nawet PID, pewnie tam jest podpieta grzalka...
studentfizyki
Posty: 9
Rejestracja: 04 mar 2015 14:30
Wersja środowiska: LabVIEW 2013

Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS

Post autor: studentfizyki »

W załączniku vi. Jak na moje po sprawdzeniu czy temperatura jest mniejsza od zadanej urządzenie powinno dostać komendę "grzej". Problem w tym, że nie wiem jak sformułować taką komendę a biblioteka MODBUS jakoś nie za bardzo mi pomogła. Bardzo dziękuje za zainteresowanie moim problemem ;)
Załączniki
Bez tytułu.png
odczyt temperatura.vi
(35.38 KiB) Pobrany 402 razy
darekc
Posty: 77
Rejestracja: 29 mar 2007 00:00
Lokalizacja: Gliwice

Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS

Post autor: darekc »

Prawdopodobnie trzeba za pomocą polecenia o kodzie 6 (w terminologii Modbusowej to polecenie Write Single Register) zapisać do rejestru o adresie 25:

- wartość 2 - jeśli chcesz grzać,
- wartość 3 - jeśli chcesz chłodzić.
darekc
Posty: 77
Rejestracja: 29 mar 2007 00:00
Lokalizacja: Gliwice

Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS

Post autor: darekc »

Przepraszam, pomyliłem się, polecenie o kodzie 6 to w terminologii Modbusowej nie Write Single Register, ale Preset Single Register (http://web.eecs.umich.edu/~modbus/docum ... US_300.pdf, strona 34).
studentfizyki
Posty: 9
Rejestracja: 04 mar 2015 14:30
Wersja środowiska: LabVIEW 2013

Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS

Post autor: studentfizyki »

Mogę do tego wykorzystać Vi z biblioteki o nazwie MB Register Manager czy muszę pisać polecenie Preset Single Register od podstaw?
darekc
Posty: 77
Rejestracja: 29 mar 2007 00:00
Lokalizacja: Gliwice

Pomoc w pisaniu programu z wykorzystaniem MODBUS

Post autor: darekc »

Nie mam w tej chwili dostępu do LabVIEW, ale wydaje mi się, że ta biblioteka powinna umożliwiać wykonanie takiego polecenia.
Jamal79
Posty: 289
Rejestracja: 01 maja 2012 14:14
Wersja środowiska: LabVIEW 2012
Lokalizacja: Farum

Pomoc w pisaniu programu z wykorzystaniem MODBUS

Post autor: Jamal79 »

Mniemam ze masz NIModBus.llb, uruchom z niego tego viaja: MB Serial Example Master.vi
Tu masz zrobiona calkiem przyjemna aplikacje do komunikacji. Przerob ja do swoich potrzeb badz uzyj jej w takiej postaci jak jest.

Ale tak krok po kroku.
1. loop inicjujacy Port i komunikacje MB
2. Maszyna stanow do obslugi UI
W podanym przykladzie uzyte zostaly Eventy. Pamietaj aby pomiedzy odczytem/zapisem wstawic opoznienie. U ciebie pewnie wystarczy 250ms.
Ktory Register i co on oznacza masz w dokumentacji regulatora... numer Registra podajesz w wartosci DEC, czyli 1,30 itd. W podanym przykladzie to do "Starting adress" wpisujesz rejestr do odczytania, odczytuje wskazany oraz 4 po nim nastepujace. Mozesz to przerobic i podac mu swojego arraya/matrixa/licznik. Co ci sie tam podoba.
3. Uwolnienie Portu po skonczonej pracy

U ciebie zadanie jest bardzo proste masz tylko 2/3 Registry do obskoczenia, ja w moim programie mam ponad 3k. Na odczyt musze czekac nawet do 5 min...
studentfizyki
Posty: 9
Rejestracja: 04 mar 2015 14:30
Wersja środowiska: LabVIEW 2013

Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS

Post autor: studentfizyki »

Próbowałem zrobić jak mi radziliście: przerobić i następnie w rejestrze 25 zapisać wartość 2, jednak ciągle wyświetla mi się błąd 6002 ( na zdjęciu 1). Moglibyście mi powiedzieć co robię nie tak? W załącznikach również program.
z góry wielkie dzięki
Załączniki
1.png
3.png
odczyt temperatura wersja III.vi
(46.63 KiB) Pobrany 371 razy
2.png
darekc
Posty: 77
Rejestracja: 29 mar 2007 00:00
Lokalizacja: Gliwice

Pomoc w pisaniu programu z wykorzystaniem MODBUS

Post autor: darekc »

Zlecasz wykonanie polecenia Read Discrete Inputs (Read Input Status w terminologii Modbusowej, kod 2), tymczasem regulator nie wykonuje tego polecenia (http://www.apar.pl/images/oldprodukt/inst_ar6x0.pdf, strona 20). Błąd o numerze 6002 to prawdopodobnie informacja o tym fakcie.
Ostatnio zmieniony 09 mar 2015 13:48 przez darekc, łącznie zmieniany 2 razy.
studentfizyki
Posty: 9
Rejestracja: 04 mar 2015 14:30
Wersja środowiska: LabVIEW 2013

Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS

Post autor: studentfizyki »

Dzięki za zwrócenie mojej uwagi na ten fakt. Zastąpiłem to Read Input Register i błąd znikł, ale nadal nie grzeje ;( Ale będę próbował dalej.
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Pomoc w pisaniu programu z wykorzystaniem MODBUS

Post autor: Pitol »

Błąd 6002 to błąd Illegal Address czyli albo pytasz o zły rejestr albo o za mało rejestrów.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
studentfizyki
Posty: 9
Rejestracja: 04 mar 2015 14:30
Wersja środowiska: LabVIEW 2013

Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS

Post autor: studentfizyki »

Po pewnych przeróbkach wyświetla mi błąd pokazany na obrazku. Pewnie wynika to z ustawienia drążków "coils to write". Żeby zapisać 2 ustawiłem: wszystkie oprócz niego w dół/ tylko drugi drążek w dół oraz zupełnie przypadkowych ustawień. Efekt jest taki sam. Co mogę jeszcze zrobić?
Załączniki
2.png
2.png (4.61 KiB) Przejrzano 16315 razy
1.png
ODPOWIEDZ