rs 232, modbus
rs 232, modbus
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
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
-
- Administrator
- Posty: 1315
- Rejestracja: 30 lip 2003 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Ruda Śląska
- Kontakt:
Re: rs 232, modbus
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
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
- Ender
- Posty: 137
- Rejestracja: 02 cze 2005 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Cieszyn
Re: rs 232, modbus
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 ....
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 ....
- Ender
- Posty: 137
- Rejestracja: 02 cze 2005 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Cieszyn
Re: rs 232, modbus
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.
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
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.
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.
- Ender
- Posty: 137
- Rejestracja: 02 cze 2005 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Cieszyn
Re: rs 232, modbus
Odczytac musisz wszystkie ramki - dopiero potem, programowo, mozna sprawdzic, czy odczytana ramka jest ta, ktora nas interesuje. W zalaczniku troche zmodyfikowany VI odczytu ramki.
- wino
- Posty: 549
- Rejestracja: 23 gru 2005 00:00
- Wersja środowiska: Nie mam LabVIEW
- Lokalizacja: Kraków
Re: rs 232, modbus
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!
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
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
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
- wino
- Posty: 549
- Rejestracja: 23 gru 2005 00:00
- Wersja środowiska: Nie mam LabVIEW
- Lokalizacja: Kraków
Re: rs 232, modbus
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.
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
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.
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.
- wino
- Posty: 549
- Rejestracja: 23 gru 2005 00:00
- Wersja środowiska: Nie mam LabVIEW
- Lokalizacja: Kraków
Re: rs 232, modbus
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...
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...