Strona 1 z 1

Komunikacja z liniałem przez RS-232

: 07 lip 2013 14:12
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 ?

Komunikacja z liniałem przez RS-232

: 07 lip 2013 15:33
autor: milten
Kliknij prawym na ramkę kontrolki do wpisywania i zmień na Hex Display. Od teraz wpisujesz dane w hexach.

Komunikacja z liniałem przez RS-232

: 07 lip 2013 17:28
autor: hucul
Dziękuje.

Komunikacja z liniałem przez RS-232

: 08 lip 2013 10:00
autor: darekc
Jakiego typu to liniał?

Komunikacja z liniałem przez RS-232

: 08 lip 2013 11:59
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/

Komunikacja z liniałem przez RS-232

: 08 lip 2013 16:20
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.

Komunikacja z liniałem przez RS-232

: 09 lip 2013 09:46
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.

Komunikacja z liniałem przez RS-232

: 10 lip 2013 01:42
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