Witam
mam następujacy problem : Posiadam układ pomiarowy z czujnikiem ciśnienia -razem z konverterem , łaczem rs232(rs485) oraz oprogramowanie do akwizycji (komunikacji) (firmy KELLER) , ale niestety zbierane dane są zaszumione i wymagaja obróbki - jednakze oprogramowanie (interface zbudowany w Labview) dostarczone przez producenta nie opcji filtrowania danych . Chciałbym wykorzystrać biblioteke dll do tego aby samemu zbudowac interface spełniający moje wymagania - problem w tym iż w internecie , książkach ktore posiadam nie ma takiego przykladu ktory obrazowałby wykorzystanie biblioteki zewnętrznej to komunikacji .
Jedyne informacje jakie znajduje to tworzenie dll w labview,itp. ale nic co by było przykladem o ktorym wspomniałem wyżej.
Czy ktoś z forumowiczów robił już cos kiedyc podobnego, lub ma informacje ktore pozoliły by mi przynajmniej na zbliczenie się do rozwiązania ? Za 'co kolwiek' z góry dziękuję .
Zewnętrzna biblioteka dll do komunikacjii
-
- Posty: 110
- Rejestracja: 18 sty 2006 00:00
- Wersja środowiska: LabVIEW 2010
- Lokalizacja: Bydgoszcz
Re: Zewnętrzna biblioteka dll do komunikacjii
Chodzi Ci o możliwość skorzystania z funkcji .dll-ki stworzonej w innym środowisku w LabVIEW? Jeśli znasz prototypy funkcji użytych w dll to można to zrobić.
http://zone.ni.com/devzone/cda/epd/p/id/4489
http://www2.fz-juelich.de/zel/datapool/ ... abView.pdf
http://zone.ni.com/devzone/cda/epd/p/id/4489
http://www2.fz-juelich.de/zel/datapool/ ... abView.pdf
smiglo
Re: Zewnętrzna biblioteka dll do komunikacjii
Witam
Czy mógłbym prosić o pomoc/ podpowiedz?
Problem dotyczy wywołania funkcji odczytu (zdefiniowanej w DLL )z wykorzystaniem bloczku Call Library Function Node .
A mianowicie nie wiem jak odczytać to co zwraca funkcja – wszelkie moje próby zakończyły się nie powodzeniem .
Opis mojego problemu
Chcąc odczytać dane z czujnika wywołuje funkcję z biblioteki o strukturze :
Function F73 ( arg1 , arg2 , var arg 3 , arg 4 ) : Smallint ;stdcall;export
Gdzie:
Arg1 jest adresem urządzenia typu byte (8-bit , no sign)
Arg2 jest numerem kanału urządzenia typu byte (8-bit , no sign)
Var Arg3 typu single przekazywane jako pointer
Var Arg4 - słowo statusowe typu single byte przekazywane jako pointer
Wszystkie te argumenty sa przekazywane do urządzenia w postaci ramki:
[ adres | numer funkcji| numer kanału| CRC16_H |CRC16_L]
To co po wywołaniu powinienem otrzymać to owczyt wartości z kanału (floating point) o strukturze ramki:
[( adres urzadzenia) |(numer funkcji)|B3 |B2 | B1 | B0 | STAT |CRC16_H |CRC_16_L]
Jest to ramka zawierająca adres, numer funkcji , dane 32 bitów (4x8bit => (B0..B4)) , 8 bitowe słowo statusowe oraz CRC 16 (CRC jest obliczane w funkcji )
Jednakże ze specyfikacji i opisu biblioteki i protokołu wynika ,że każda funkcja zwraca tylko wartość która informuje użytkownika czy wywołanie funkcji zakończyło się powodzeniem czy nie . oraz wszystkie dane są przekazywane i odbierane z wykorzystaniem stosu .
Nie wiem czy dobrze interpretuję – ale wynika z tego ze ja tylko wywołuję funkcję otrzymuję info czy wywołanie się powiodło i nic wiecej .
Czy to oznacza ze Dane (ramkę ) powinienem odczytać z rejestru portu RS232?
W dokumentacji protokołu komunikacyjnego czujnika (Keller bus functions) jest tylko przykład jak jest zbudowana ramka wychodządza , oraz ramka przychodząca .. oraz dobitnie napisane że każda funkcja w bibliotece zwraca jedynie info czy została z powodzeniem wywołana ale nie ma nic nt gdzie te dane są przechowywane.
Czu ktors z forumowiczów spotkał się lub rozwiązywał podobne problemy?
Czy mógłbym prosić o pomoc/ podpowiedz?
Problem dotyczy wywołania funkcji odczytu (zdefiniowanej w DLL )z wykorzystaniem bloczku Call Library Function Node .
A mianowicie nie wiem jak odczytać to co zwraca funkcja – wszelkie moje próby zakończyły się nie powodzeniem .
Opis mojego problemu
Chcąc odczytać dane z czujnika wywołuje funkcję z biblioteki o strukturze :
Function F73 ( arg1 , arg2 , var arg 3 , arg 4 ) : Smallint ;stdcall;export
Gdzie:
Arg1 jest adresem urządzenia typu byte (8-bit , no sign)
Arg2 jest numerem kanału urządzenia typu byte (8-bit , no sign)
Var Arg3 typu single przekazywane jako pointer
Var Arg4 - słowo statusowe typu single byte przekazywane jako pointer
Wszystkie te argumenty sa przekazywane do urządzenia w postaci ramki:
[ adres | numer funkcji| numer kanału| CRC16_H |CRC16_L]
To co po wywołaniu powinienem otrzymać to owczyt wartości z kanału (floating point) o strukturze ramki:
[( adres urzadzenia) |(numer funkcji)|B3 |B2 | B1 | B0 | STAT |CRC16_H |CRC_16_L]
Jest to ramka zawierająca adres, numer funkcji , dane 32 bitów (4x8bit => (B0..B4)) , 8 bitowe słowo statusowe oraz CRC 16 (CRC jest obliczane w funkcji )
Jednakże ze specyfikacji i opisu biblioteki i protokołu wynika ,że każda funkcja zwraca tylko wartość która informuje użytkownika czy wywołanie funkcji zakończyło się powodzeniem czy nie . oraz wszystkie dane są przekazywane i odbierane z wykorzystaniem stosu .
Nie wiem czy dobrze interpretuję – ale wynika z tego ze ja tylko wywołuję funkcję otrzymuję info czy wywołanie się powiodło i nic wiecej .
Czy to oznacza ze Dane (ramkę ) powinienem odczytać z rejestru portu RS232?
W dokumentacji protokołu komunikacyjnego czujnika (Keller bus functions) jest tylko przykład jak jest zbudowana ramka wychodządza , oraz ramka przychodząca .. oraz dobitnie napisane że każda funkcja w bibliotece zwraca jedynie info czy została z powodzeniem wywołana ale nie ma nic nt gdzie te dane są przechowywane.
Czu ktors z forumowiczów spotkał się lub rozwiązywał podobne problemy?