Strona 1 z 1

rs 232, modbus

: 02 kwie 2006 13:19
autor: Gość
W układzie który muszę wykonać, urządzenie master w sieci modbus rtu wysyła cyklicznie dane. Wysyła je pod adres urządzenie slave o adresie 8. W jaki sposób za pomocą labview emulować urządzenie slave ?. Funkcjonalnośc tego urządzenia powinna być taka, że gdy w magistralę zostanie wysłana ramka adresowana do urzadzenia o numerze slave =8, urządzenie powinno odebrać dedykowaną mu ramkę oraz zapisac dane w tabeli. Czy ktoś z Was ma pomysł jak to zrobić? przykładowa ramka wysyłana przez mastera to np.( w postaci hex.)
08 1F 00 08 00 08 02 01 01 01 01 01 02 00 CRC
gdzie pogrubione pola to bajty z danymi które chciałbym zapisać w tabeli 08 - adres urzadzenia slave 1F - kod funkcji modbus (write multiple registers) 00 08 - grupa rejestrow docelowych
00 08 - liczba bajtow danych 02 01 01 01 01 01 02 02 - dane
CRC - dwubajtowe pole zawierajace sume kontrolną
Nie zależy mi na implementacji funkcji modbusowych. Po prostu chciałbym wykonać program, który w momencie wykrycia na łączu rs-232 ramki o określonej budowie(np takiej jak wyżej) zapisze dane w odpowiedniej tabeli. Czy ktoś z Was ma pomysł jak to zrobić?
Za odpowiedzi z gory dziekuje.
Proszę nie tworzyć wielu wątków poświeconych temu samemu tematowi. Rejestracja pozwoli na edytowanie własnych wiadomości na forum tak, że nie trzeba będzie za każdym razem pisać nowego zamiast coś proprawić. bogdani

Re: rs 232, modbus

: 02 kwie 2006 14:24
autor: bogdani
Witaj

W przykładach dostarczonych z LV jest trochę programów, które odczytują dane z portu RS 232. Przykłady takie można znaleźć również w naszym dziale z plikami.

Co do dekodowania ramki to poprostu musisz powyciągać z tekstu odpowiednie bajty i weryfikować czy to jest wymagane przez ciebie funkcja.

Pokaż co masz a powiemy ci co robić dalej.
Napisz również czym dysponujesz.

bogdani

Re: rs 232, modbus

: 03 kwie 2006 04:32
autor: Ender
Do emulowania urzadzenia slave potrzebujesz tylko portu RS. Ustawiasz mu oczywiscie odpowiednie parametry transmisji i odczytujesz dane. Cala sprawe wlasciwie zalatwiasz programowo. Sam chwilowo pracuje z urzadzeniami komunikujacymi sie po modbusie, wiec mam pare gotowych vi ulatwiajacych prace, np zamieniajacy odczytanego stringa na tablice hex'ow - podaj maila, to ci je podesle, moze w czyms pomoga.

Re: rs 232, modbus

: 03 kwie 2006 09:04
autor: Ender
W zalaczniku przesylam kilka VI, ktore mam nadzieje okaza sie pomocne albo przynajmniej rzuca troche swiatla na obrobke danych wysylanych/odbieranych modbusem. Mi ulatwiaja zycie.

I jeszcze praktyczna uwaga - po odczycie kazdej ramki polecam stosowac Flush I/O Buffer.

Bede wdzieczny za wszelka konstruktywna krytyke, uwagi i usprawnienia. W razie pytan pisac na PM.

Re: rs 232, modbus

: 04 kwie 2006 17:37
autor: kamilkov
Witam,
Dziękuję za odpowiedzi. Przeanalizowałem Wasze VI. Wiem już jak odczytać stringa przez rs-232. Jednak mam jeszcze pytanie. Urządzenie, którego pracę chcę monitorować jest urządzeniem master i wysyła cyklicznie pod adres slave nr 08 cyklicznie ramki z obowiązującymi nastawami. Dane wysyłane w ramkach ciągle się zmieniają w zależności od obowiązujących nastaw na masterze. Oprócz tego wysyła na magistralę ramki do innych slave'ów. Jak zrobić bym odczytywał jedynie interesujące mnie stringi? dajmy na to, że chcę odczytać dane zawarte w ramce 08 1F 00 08 00 08 02 01 01 01 01 01 02 00 CRC. Jak zrobić by program znalazł ramkę zaczynającą się od 08 1F 00 08 00 08 i zwrócił mi wartości zawartych w niej danych tzn. w tym przypadku 02 01 01 01 01 01 02 00? Dodam, że posiadam LabView 8.0 a moje urządzenia pracuje w protokole modbus RTU.

Re: rs 232, modbus

: 04 kwie 2006 19:29
autor: Ender
Odczytac musisz wszystkie ramki - dopiero potem, programowo, mozna sprawdzic, czy odczytana ramka jest ta, ktora nas interesuje. W zalaczniku troche zmodyfikowany VI odczytu ramki.

Re: rs 232, modbus

: 04 kwie 2006 20:12
autor: wino
witam

troche się wrtące
mam rozumieć, że to urządzenie działa tak, że na nonstopie wysyła te swoje bajty,tak? i na pewno wiadomo, ile ono ich wysyła na secunde,tak?
takie dwa pytania i trzecie co to oznacza, że modbus cyklicznie wysyła ramki?
Jak ten cykl wygląda?

Bo niewątpliwie mam rozwiązanie tylko potrzebuje paru odpowiedzi!

Re: rs 232, modbus

: 04 kwie 2006 21:05
autor: kamilkov
Witam,
Na wstępie chciałem podziękować wszystkim za życzliwość i pomoc - szczególnie Tobie Ender. Twoje VI'e bardzo mi pomagają.

Co do pytań Wina:
Ad.1 Urządzenie w momencie uaktywnienia pewnej funkcji zaczyna wysyłać non stop dane z obowiązującymi nastawami pod określony adres. Ma to na celu umożliwić sterowanie i monitorowanie pracy układu za pomocą systemu nadrzednego.
Ad.2 Prędkość transmisji 9600 b/s jeśli o to Ci chodzi
Ad.3 Długość cyklu nie jest stała (zalezy od konfiguracji i trybu pracy układu). czas trwania cyklu to od 6 do 9 sekund. W jednym cyklu wysyłane są ramki z wszystkimi aktualnie obowiązującymi nastawami. Oprócz tego w jednym cyklu są wysyłane ramki będące zezwoleniem dla systemu nadrzednego sterowania na zmianę parametrów(urządzenie slave odpowiada na zezwolenie na zmianę parametrów ramką zawierającą zmienione parametry). Po pierwszym cyklu rozpoczyna się następny itd. - aktualizując w urządzeniu slave wszystkie dane. Jeśli chcesz to Ci wyślę specyfikację transmisji. Podaj maila. Jeśli masz jakieś rozwiązanie będę wdzięczny jeśli się nim ze mną podzielisz. Pozdrawiam

Re: rs 232, modbus

: 04 kwie 2006 21:31
autor: wino
ile taka ramka ma bajtów?

jak będe to wiedział to ci podeśle projekt ciekawego rozwiązania, tak mnie sie przynajmnie wydaje:)

jutro się odezwe.

Re: rs 232, modbus

: 05 kwie 2006 07:36
autor: kamilkov
W jednym cyklu wysłyłanych jest wiele ramek o różnych ilościach bajtów. Wysyłane są one pod adres urządzenia slave lecz pod różne numery rejestrów. Najdłuższa ramka liczy sobie 60 bajtów. Przykładowa ramka to 08 1F 00 08 00 08 02 01 01 01 01 01 02 00 CRC gdzie pogrubione pola to bajty z danymi 08 - adres urzadzenia slave 1F - kod funkcji modbus (write multiple registers) 00 08 - grupa rejestrow docelowych
00 08 - liczba bajtow danych 02 01 01 01 01 01 02 02 - dane
CRC - dwubajtowe pole zawierajace sume kontrolną
Tak więc ta ramka zawiera w sumie 16 bajtów, z czego 8 bajtów są to dane.

Re: rs 232, modbus

: 05 kwie 2006 20:19
autor: wino
To jest tylko propozycja, ale jak bym robił coś podobnego, to zrobił bym to w taki sposób. Zastosowanie kolejki gwarantuje ci, że możesz pracować non stop. W jednym czasie pobierać dane i pracować na nich. Myśle , że jest to rozsądne rozwiązanie i chyba o coś podobnego ci chodziło. Jest też propozycja pozyskiwania danych z ramki.

Nie wiem co to są za dane wiec nie zamieniłem ich na normalne dla nas Ludzi cyferki czy literki. Napisz czy ci się podoba i czy trafiłem w twoje gusta. Jak nie to pomyśle jeszcze troche...