Witam,
Tworzę projekt, który na celu ma odbieranie informacji np. o temperaturze silnika, ze złącza diagnostycznego OBD poprzez RS232. Do tego celu chciałbym użyć środowiska LabView. Czy są dostępne pakiety LabView umożliwiające łatwiejsze napisanie programu? Proszę o wskazówki.
LabView & OBD2
- Pitol
- Moderator
- Posty: 984
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
LabView & OBD2
A to co wujek google oferuje nie pomoże? Nie mam czasu się zagłębiać w każdy link ale próba wyszukania "OBD+LabVIEW" daje trochę rezultatów...
Re: LabView & OBD2
Oczywiście google pomaga
Mam jeszcze jedno pytanie, czy gotowy interfejs diagnostyczny OBDII ELM327 pod USB będzie miał możliwość komunikacji pod LabView, czyli wysyłanie poleceń oraz odbieranie informacji od sterownika np. o temperaturze silnika, temp. z zewnętrzne z czujnika itp.?
wiadomo, nie ma rzeczy niemożliwych, ale wolę zapytać czy nie ma problemów z komunikacją.
Pozdrawiam.
Mam jeszcze jedno pytanie, czy gotowy interfejs diagnostyczny OBDII ELM327 pod USB będzie miał możliwość komunikacji pod LabView, czyli wysyłanie poleceń oraz odbieranie informacji od sterownika np. o temperaturze silnika, temp. z zewnętrzne z czujnika itp.?
wiadomo, nie ma rzeczy niemożliwych, ale wolę zapytać czy nie ma problemów z komunikacją.
Pozdrawiam.
LabView & OBD2
Jeżeli jest widziany jako port COM w systemie, to bez problemu możesz się komunikować przez VISA
Jeżeli nie ma, to jedynie przez gotową bibliotekę, jeżeli takową dostarcza producent.
Po szybkim przeczesaniu internetu znalazłem informacje, że powinien być widziany jako port COM w systemie. Jeżeli tak jest w rzeczywistości, to pozostaje Ci tylko znaleźć polecenia jakie wysyłać, aby odczytać dane.
Jeżeli nie ma, to jedynie przez gotową bibliotekę, jeżeli takową dostarcza producent.
Po szybkim przeczesaniu internetu znalazłem informacje, że powinien być widziany jako port COM w systemie. Jeżeli tak jest w rzeczywistości, to pozostaje Ci tylko znaleźć polecenia jakie wysyłać, aby odczytać dane.
Ostatnio zmieniony 23 paź 2013 23:30 przez milten, łącznie zmieniany 2 razy.
Re: LabView & OBD2
Witam,
Powracam z pytaniem. Stworzyłem VI gdzie bez problemu komunikuję się z OBD. Wysłanie komend np. 010D (prędkość) powoduje otrzymanie odpowiedzi "Searching... 41 0D XX XX". Otrzymanie odpowiedzi trwa jednak na tyle długo, że program nie nadąża nad zmianami np. obrotów silnika. Do z czytania temperatury jest w porządku, ale do szybkich zmian niestety nie. Czy jest jakiś szybszy sposób na to?
Powracam z pytaniem. Stworzyłem VI gdzie bez problemu komunikuję się z OBD. Wysłanie komend np. 010D (prędkość) powoduje otrzymanie odpowiedzi "Searching... 41 0D XX XX". Otrzymanie odpowiedzi trwa jednak na tyle długo, że program nie nadąża nad zmianami np. obrotów silnika. Do z czytania temperatury jest w porządku, ale do szybkich zmian niestety nie. Czy jest jakiś szybszy sposób na to?
LabView & OBD2
Są 2 prawdopodobne przyczyny takiego stanu rzeczy:
- interfejs OBD w twoim samochodzie nie jest przystosowany, aby rejestrować wszystkie zmiany (opis niżej)
- interfejs OBDII ELM327 jest za wolny w komunikacji i przetwarzaniu (mniej prawdopodobne)
Z tego co czytałem, to OBD w założeniach miał służyć do diagnostyki ogólnej, czyli podpinasz się do niego i wiesz z czym masz problem (na przykład masz jakieś problemy z pompą paliwa, to dostajesz kod błędu, że coś nie tak z pompą paliwa itp.).
https://en.wikipedia.org/wiki/OBD-II_PIDs
Tutaj masz opis jak działa odczyt PID-a (domyślam się, że z niego korzystasz).
Prawdopodobnie ramka CAN która jest wysyłana przez interfejs OBD ma niski priorytet (priorytetowanie ramek w sieci CAN; chyba, że Twój samochód używa czegoś innego, choć wątpię) i długo musi czekać na wolną magistralę, przez co czas odczytu tej informacji jest tak długi.
Sprawdź szybkość działania w już gotowym programie a najlepiej w kilku. Wtedy będziesz miał pewność, czy to wina interfejsu, czy może odpytujesz interfejs w nieoptymalny sposób.
Możesz spróbować się podpiąć bezpośrednio do magistrali komunikacyjnej swojego samochodu, a wtedy będziesz miał na bieżąco podgląd co jest wysyłane przez każde z urządzeń. Minusem takiego rozwiązania jest posiadanie wiedzy co czym jest w samochodzie, bo bez tego to możesz rok spędzić na rozkodowywaniu poszczególnych ramek.
To co napisałem oparte jest na wiedzy głównie z wikipedii i nie musi mieć odzwierciedlenia w rzeczywistości, tak więc głowy za to nie dam.
- interfejs OBD w twoim samochodzie nie jest przystosowany, aby rejestrować wszystkie zmiany (opis niżej)
- interfejs OBDII ELM327 jest za wolny w komunikacji i przetwarzaniu (mniej prawdopodobne)
Z tego co czytałem, to OBD w założeniach miał służyć do diagnostyki ogólnej, czyli podpinasz się do niego i wiesz z czym masz problem (na przykład masz jakieś problemy z pompą paliwa, to dostajesz kod błędu, że coś nie tak z pompą paliwa itp.).
https://en.wikipedia.org/wiki/OBD-II_PIDs
Tutaj masz opis jak działa odczyt PID-a (domyślam się, że z niego korzystasz).
Prawdopodobnie ramka CAN która jest wysyłana przez interfejs OBD ma niski priorytet (priorytetowanie ramek w sieci CAN; chyba, że Twój samochód używa czegoś innego, choć wątpię) i długo musi czekać na wolną magistralę, przez co czas odczytu tej informacji jest tak długi.
Sprawdź szybkość działania w już gotowym programie a najlepiej w kilku. Wtedy będziesz miał pewność, czy to wina interfejsu, czy może odpytujesz interfejs w nieoptymalny sposób.
Możesz spróbować się podpiąć bezpośrednio do magistrali komunikacyjnej swojego samochodu, a wtedy będziesz miał na bieżąco podgląd co jest wysyłane przez każde z urządzeń. Minusem takiego rozwiązania jest posiadanie wiedzy co czym jest w samochodzie, bo bez tego to możesz rok spędzić na rozkodowywaniu poszczególnych ramek.
To co napisałem oparte jest na wiedzy głównie z wikipedii i nie musi mieć odzwierciedlenia w rzeczywistości, tak więc głowy za to nie dam.
Ostatnio zmieniony 10 lis 2013 10:40 przez milten, łącznie zmieniany 3 razy.
Re: LabView & OBD2
Dziękuję za odpowiedź.
Mój program oparty jest na maszynie stanów. W każdym ze stanów przez VISA write wysyłam do sterownika komunikaty. Następnie w pętli while Visa read odczytuje to co przychodzi ze sterownika i sprawdza czy wystąpił znak ">" 0x3E, jeśli tak kończy pętlę i przechodzi do następnego stanu, np. odczytu obrotów silnika. Pętla musi odczekiwać 25ms za każdym razem, bez tego czasu pokazuje błędne odczyty.
Przykład:
Od sterownika dostaję:
" " (puste)
010C
" "
" "
41 0C 0D 00
" "
>
Czyli jeden odczyt obrotów silnika trwa 25ms*(liczba komunikatów)= 150ms.
Można to jakoś przyspieszyć?
Mój program oparty jest na maszynie stanów. W każdym ze stanów przez VISA write wysyłam do sterownika komunikaty. Następnie w pętli while Visa read odczytuje to co przychodzi ze sterownika i sprawdza czy wystąpił znak ">" 0x3E, jeśli tak kończy pętlę i przechodzi do następnego stanu, np. odczytu obrotów silnika. Pętla musi odczekiwać 25ms za każdym razem, bez tego czasu pokazuje błędne odczyty.
Przykład:
Od sterownika dostaję:
" " (puste)
010C
" "
" "
41 0C 0D 00
" "
>
Czyli jeden odczyt obrotów silnika trwa 25ms*(liczba komunikatów)= 150ms.
Można to jakoś przyspieszyć?
LabView & OBD2
Puste znaki, to po prostu brak jakichkolwiek danych na porcie. Dodatkowo powinien być jeszcze zwracany error, że osiągnąłeś timeout.
Co do samego przyśpieszenia, to nie wiem. Wygląda na to, że po prostu odczyt danych tyle trwa.
https://www.youtube.com/watch?v=vQSsUPrGLHs
Około 10 minuty widać opóźnienie jakie ma obrotomierz w samochodzie a ten używający OBD.
Najlepiej podeślij program, bo tak na sucho to ciężko powiedzieć.
Co do samego przyśpieszenia, to nie wiem. Wygląda na to, że po prostu odczyt danych tyle trwa.
https://www.youtube.com/watch?v=vQSsUPrGLHs
Około 10 minuty widać opóźnienie jakie ma obrotomierz w samochodzie a ten używający OBD.
Najlepiej podeślij program, bo tak na sucho to ciężko powiedzieć.