rs 232, modbus

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
Gość
Posty: 656
Rejestracja: 10 lis 2003 00:00

rs 232, modbus

Post 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
bogdani
Administrator
Posty: 1315
Rejestracja: 30 lip 2003 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Ruda Śląska
Kontakt:

Re: rs 232, modbus

Post 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
Ktoś ci pomógł na forum? Podziękuj dając pochwałę.

Obrazek Obrazek Obrazek
Awatar użytkownika
Ender
Posty: 137
Rejestracja: 02 cze 2005 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Cieszyn

Re: rs 232, modbus

Post 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.
-Czy orał pan już kiedyś morskie fale?
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
Awatar użytkownika
Ender
Posty: 137
Rejestracja: 02 cze 2005 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Cieszyn

Re: rs 232, modbus

Post 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.
kamilkov
Posty: 3
Rejestracja: 02 kwie 2006 00:00

Re: rs 232, modbus

Post 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.
Awatar użytkownika
Ender
Posty: 137
Rejestracja: 02 cze 2005 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Cieszyn

Re: rs 232, modbus

Post 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.
Awatar użytkownika
wino
Posty: 549
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

Re: rs 232, modbus

Post 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!
kamilkov
Posty: 3
Rejestracja: 02 kwie 2006 00:00

Re: rs 232, modbus

Post 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
Awatar użytkownika
wino
Posty: 549
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

Re: rs 232, modbus

Post 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.
kamilkov
Posty: 3
Rejestracja: 02 kwie 2006 00:00

Re: rs 232, modbus

Post 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.
Awatar użytkownika
wino
Posty: 549
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

Re: rs 232, modbus

Post 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...
ODPOWIEDZ