Komunikacja z liniałem przez RS-232

Wszelkie sprawy związane z LabVIEW i komunikacją ze sprzętem. Problemy i ciekawe rozwiązania.
hucul
Posty: 8
Rejestracja: 07 lip 2013 13:52
Wersja środowiska: LabVIEW 2010

Komunikacja z liniałem przez RS-232

Post autor: hucul »

Witam

Dysponuję dwoma liniałami podłączanymi do komputera przez port RS-232. Do liniałów zostało dodane oprogramowanie producenta i działa ono dobrze, jednak potrzebuję uruchomić je w Labview.
Z racji tego, że producenci nie kwapią się z odpowiedzią co trzeba wysłac na port aby zainicjować komunikację postanowiłem użyć monitora pory RS-232.
Program producenta wysyła na port RS-232 ciąg znaków w postaci "10 00 11 00 12 00 13 00" i tak w kółko. Wiem, że liczby od 10 do 13 to numery oznaczające adres liniału. Krótko mówiąc 10 00 jest zapytaniem do pierwszego liniału.

Teraz pozostaje kwestia jak mam takie zapytanie wysłać za pomocą Labview. Do komunikacji postanowiłem użyć programu z przykładów Labview: Basic Serial Write and Read.vi
Jednak wpisanie tam "10 00" nie oznacza dotarcia takiej wiadomości na port. Na port dociera "20 31 30 20 30 30".
Czy któś mógłby mi pomóc w komunikacji z liniałem ?
milten
Posty: 77
Rejestracja: 25 paź 2011 20:49
Wersja środowiska: LabVIEW 2012

Komunikacja z liniałem przez RS-232

Post autor: milten »

Kliknij prawym na ramkę kontrolki do wpisywania i zmień na Hex Display. Od teraz wpisujesz dane w hexach.
Obrazek
hucul
Posty: 8
Rejestracja: 07 lip 2013 13:52
Wersja środowiska: LabVIEW 2010

Komunikacja z liniałem przez RS-232

Post autor: hucul »

Dziękuje.
darekc
Posty: 77
Rejestracja: 29 mar 2007 00:00
Lokalizacja: Gliwice

Komunikacja z liniałem przez RS-232

Post autor: darekc »

Jakiego typu to liniał?
hucul
Posty: 8
Rejestracja: 07 lip 2013 13:52
Wersja środowiska: LabVIEW 2010

Komunikacja z liniałem przez RS-232

Post autor: hucul »

@darekc Liniał optyczny firmy Atek

Pojawił się kolejny problem. Po tym jak wysłałem zapytanie na port dostałem odpowiedź w postaci stringu Hex. Teraz chciałbym go przerobić na liczbę. W Labview znajduje się bloczek "Hexadecimal String To Number". Problem polega na tym, że po przepuszczeniu odpowiedzi z liniału przez ten bloczek otrzymuję wartość zero zamiast konkretnej liczby. Część schematu odpowiedzialnego za konwersję zamieszczam poniżej.

http://ifotos.pl/zobacz/exJPG_nnxpsas.JPG/
milten
Posty: 77
Rejestracja: 25 paź 2011 20:49
Wersja środowiska: LabVIEW 2012

Komunikacja z liniałem przez RS-232

Post autor: milten »

Sprawdź, czy zwracana jest tylko sama liczba w hexie, czy nie ma tam na przykład przed tą liczbą jakiegoś znaku. Funkcja radzi sobie ze spacjami, lecz jak dostanie np ,A , to zwraca 0. Przełącz sobie wyświetlanie na hex i powinieneś widzieć dokładnie co jest zwracane.
Obrazek
hucul
Posty: 8
Rejestracja: 07 lip 2013 13:52
Wersja środowiska: LabVIEW 2010

Komunikacja z liniałem przez RS-232

Post autor: hucul »

Wartość jest zwracana w hexie i dlatego chce ją przekształcić na numeric. W tym rzecz, że jak próbowałem tego bloczka z do przekształcania hexów to ze spacją nie działał.
Boczek mi ten działał jeśli jeśli wartość w hexach była wprowadzana jako normalny string, jeśli pole string było ustawione na Hex Display to bloczek do zmiany wartości zawsze zwracał 0. Odczyt z enkodera przychodzi w postaci jak z pola Hex Display więc nie jestem w stanie otrzymać wartości decymalnej.
milten
Posty: 77
Rejestracja: 25 paź 2011 20:49
Wersja środowiska: LabVIEW 2012

Komunikacja z liniałem przez RS-232

Post autor: milten »

aaa
to to jeszcze prostsze :P Myślałem, że wartości są zapisane w stringu jako literki.
Jeżeli wiesz, że liczba zwracana będzie zawsze z zakresu 0-255, to użyj Type Cast i podepnij to niego liczbę U8. Analogicznie dla liczb 16 i 32 bitowych.
Jeżeli ktoś kto pisał oprogramowanie do tego liniału nie wiedział co robi, i na przykład zwraca Ci on wartość z przedziału np. 0-1024 i dla liczb 0-255 zwraca 1 bajt a dla reszty 2 bajty, to musisz najlepiej użyć Case i konwertować dla każdego z przypadków
Obrazek
ODPOWIEDZ