Pomoc w pisaniu programu z wykorzystaniem MODBUS
-
- Posty: 9
- Rejestracja: 04 mar 2015 14:30
- Wersja środowiska: LabVIEW 2013
Pomoc w pisaniu programu z wykorzystaniem MODBUS
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.
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.
Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS
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ą.
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
Pomoc w pisaniu programu z wykorzystaniem MODBUS
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...
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...
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS
Z tego co widze ma 2 wyjscia, 1 ma nawet PID, pewnie tam jest podpieta grzalka...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ą.
-
- Posty: 9
- Rejestracja: 04 mar 2015 14:30
- Wersja środowiska: LabVIEW 2013
Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS
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
-
- odczyt temperatura.vi
- (35.38 KiB) Pobrany 471 razy
Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS
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ć.
- wartość 2 - jeśli chcesz grzać,
- wartość 3 - jeśli chcesz chłodzić.
Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS
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).
-
- Posty: 9
- Rejestracja: 04 mar 2015 14:30
- Wersja środowiska: LabVIEW 2013
Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS
Mogę do tego wykorzystać Vi z biblioteki o nazwie MB Register Manager czy muszę pisać polecenie Preset Single Register od podstaw?
Pomoc w pisaniu programu z wykorzystaniem MODBUS
Nie mam w tej chwili dostępu do LabVIEW, ale wydaje mi się, że ta biblioteka powinna umożliwiać wykonanie takiego polecenia.
-
- Posty: 289
- Rejestracja: 01 maja 2012 14:14
- Wersja środowiska: LabVIEW 2012
- Lokalizacja: Farum
Pomoc w pisaniu programu z wykorzystaniem MODBUS
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...
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...
-
- Posty: 9
- Rejestracja: 04 mar 2015 14:30
- Wersja środowiska: LabVIEW 2013
Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS
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
z góry wielkie dzięki
- Załączniki
-
- odczyt temperatura wersja III.vi
- (46.63 KiB) Pobrany 431 razy
Pomoc w pisaniu programu z wykorzystaniem MODBUS
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.
-
- Posty: 9
- Rejestracja: 04 mar 2015 14:30
- Wersja środowiska: LabVIEW 2013
Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS
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.
- Pitol
- Moderator
- Posty: 986
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Pomoc w pisaniu programu z wykorzystaniem MODBUS
Błąd 6002 to błąd Illegal Address czyli albo pytasz o zły rejestr albo o za mało rejestrów.
-
- Posty: 9
- Rejestracja: 04 mar 2015 14:30
- Wersja środowiska: LabVIEW 2013
Re: Pomoc w pisaniu programu z wykorzystaniem MODBUS
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ć?