Biblioteka DLL z C#
Biblioteka DLL z C#
Jak to w końcu jest z kompatybilnością biblioteki DLL, która została napisana pod VS2010 C# i skompilowana dla .NET Framework 4? Czy trzeba posiadać wersję jakoś specjalnie skompilowaną dla LabView? Jest to biblioteka DLL dla sterowników PLC2011A0 i PLC2011B0 . Czy ktoś z Was używał DLL-i od jakiegoś sprzętu w LabView i może się podzielić sugestiami?
- Pitol
- Moderator
- Posty: 984
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Biblioteka DLL z C#
Witaj,
Wydaje mi się, że wystarczy aby dll'ka miała interfejs zdefinowany (czy jak to tam się nazywa, w C/C# biegły nie jestem), ale to chyba dla każdego języka musi mieć. Jedyne, o czym musisz wiedzieć, to definicja funkcji, ponieważ LabVIEW samo z siebie nie odczyta jakie parametry przyjmuje funkcja oraz co zwraca.
Kiedyś korzystałem z bibliotek dll dla jakiegoś oscyloskopu i nie było problemu z użyciem ich w LabVIEW. Na szczęście producent załączył definicje funkcji więc dalej to już było z górki.
Wydaje mi się, że wystarczy aby dll'ka miała interfejs zdefinowany (czy jak to tam się nazywa, w C/C# biegły nie jestem), ale to chyba dla każdego języka musi mieć. Jedyne, o czym musisz wiedzieć, to definicja funkcji, ponieważ LabVIEW samo z siebie nie odczyta jakie parametry przyjmuje funkcja oraz co zwraca.
Kiedyś korzystałem z bibliotek dll dla jakiegoś oscyloskopu i nie było problemu z użyciem ich w LabVIEW. Na szczęście producent załączył definicje funkcji więc dalej to już było z górki.
-
- Posty: 383
- Rejestracja: 17 lis 2006 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Warszawa
Re: Biblioteka DLL z C#
Odczyta. Jeżeli to jest dla .NET to nie używa się jej poprzez Call Library Function Node, tylko przez Invoke Node, potem RMB->Select Class->NET i wybieramy DLL-kę (która nazywana jest w takich przypadkach ".NET Assembly". Wcześniej trzeba użyć konstruktora odpowiedniej klasy z palety Connectivity->.NETPitol pisze:Wydaje mi się, że wystarczy aby dll'ka miała interfejs zdefinowany (czy jak to tam się nazywa, w C/C# biegły nie jestem), ale to chyba dla każdego języka musi mieć. Jedyne, o czym musisz wiedzieć, to definicja funkcji, ponieważ LabVIEW samo z siebie nie odczyta jakie parametry przyjmuje funkcja oraz co zwraca.
Re: Biblioteka DLL z C#
A spróbujcie, bo ja nie posiadam LabVIEW żeby sprawdzić.
Jeżeli trzeba to przekompiluję na jakąś wcześniejszą wersję Frameworku.
Jeżeli trzeba to przekompiluję na jakąś wcześniejszą wersję Frameworku.
- Załączniki
-
- ELibrary.zip
- (12.08 KiB) Pobrany 637 razy
- Pitol
- Moderator
- Posty: 984
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: Biblioteka DLL z C#
Ja nie mogę, bo mam .NET w wersji 3.5. Jeśli przygotujesz inną wersję dll'ki to sprawdzę.
-
- Posty: 383
- Rejestracja: 17 lis 2006 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Warszawa
Biblioteka DLL z C#
Mi raportuje "Not a .NET assembly", ale ja też mam tylko 3.5
Biblioteka DLL z C#
A u mnie coś takiego:
http://i.imgur.com/qAFCf.png
Ale chyba .NET mam w wersji 4, przynajmniej taka widnieje w spisie programów.
http://i.imgur.com/qAFCf.png
Ale chyba .NET mam w wersji 4, przynajmniej taka widnieje w spisie programów.
Re: Biblioteka DLL z C#
No dobra. Na ślepo przełączyłem Framework na 3.5. Wyczyściłem i zbudowałem od nowa. Jak teraz ?
Aha zrobiłem jak tutaj: http://www.erdosmiller.com/articles/lab ... gration-1/
Za wyjątkiem nazwy namespace, bo niby co sama nazwa miałaby wpływać na kod czy importowalność. Ale jeżeli będzie trzeba to zrobię kolejne pliczki.
Aha zrobiłem jak tutaj: http://www.erdosmiller.com/articles/lab ... gration-1/
Za wyjątkiem nazwy namespace, bo niby co sama nazwa miałaby wpływać na kod czy importowalność. Ale jeżeli będzie trzeba to zrobię kolejne pliczki.
- Załączniki
-
- ELibrary_3_5.zip
- (12.03 KiB) Pobrany 590 razy
- Pitol
- Moderator
- Posty: 984
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Biblioteka DLL z C#
U mnie działa, znaczy się mogę stworzyć konstruktor (ElClass, ElClass+AAA, ElClass+BBB) i jakieś naście funkcji jest dostępnych (w zależności, który konstruktor wybiorę).
Re: Biblioteka DLL z C#
Miło słyszeć W C# DLL i przykładowa aplikacja chodzą jak złoto.Pitol pisze:U mnie działa, znaczy się mogę stworzyć konstruktor (ElClass, ElClass+AAA, ElClass+BBB) i jakieś naście funkcji jest dostępnych (w zależności, który konstruktor wybiorę).
Ten DLL jest do tych 2 urządzeń http://tanieogrzewanie.istore.pl/
Można czytać Dallasy DS18B20, robić regulacje temperatury, obsługiwać cały skomputeryzowany alarm i sterownik, przełączać przekaźniki, wysyłać dane RS-em i odbierać.
W tym DLL są też biblioteki kryptograficzne jest AES256 i SHA256 i znakowanie czasem. czas jest brany z lokalnego NTP np w firmie z serwera.
A z samego urządzenia można wykrzesać takie obwody http://www.elkom.com.tw/m/PLC2011A0_PLC ... rcuits.pdf i je zdalnie sterować lub w czasie rzeczywistym monitorować, nawet i 10x sekundę.
Jakby ktoś chciał sobie coś odpalić z tej biblioteki to powiem jak to działa w 3 słowach.
W DLL siedzi kryptografia do zabezpieczenia komunikacji, funkcje sterowników PLC i obsługa internetu/LAN-u
Żeby nie zwalać na użytkownika zbędnych programistycznych obowiązków cała pamięć współdzielona między DLL i aplikacją użytkownika jest alokowana w DLL.
Użytkownik tylko ma za zadanie GLOBALNIE stworzyć instancję klasy w taki sposób żeby instancjowania nie powtarzać.
Kod: Zaznacz cały
ELClass zdllki = new ELClass(); // możba zrobić nawet volatile ELClass zdllki = new ELClass();
Kod: Zaznacz cały
zdllki .EL_init_memory_and_structure_A(); // tym wypełniamy strukturę urządzenia typu A zerami - inaczej się wywali wyjątkiem niezaalokowanej pamieci
zdllki .EL_init_memory_and_structure_B(); // tym wypełniamy strukturę urządzenia typu B zerami - inaczej się wywali wyjątkiem niezaalokowanej pamieci
Kod: Zaznacz cały
zdllki .EL_process_password("Jakieś hasło"); // po prostu wpisujemy kasło na stałę albo zmienną i gdzieś pole do wpisania
Siedzi on we współdzielonej pamięci z naszą aplikacją więc instancji klasy nie wolno porzucać. Ona ma trwać globalnie. Te czynności robimy tylko raz. Możemy tylko wywoływać czyszczenie zmiennych przy zmianie urządzenia i jego adresu IP lub po każdym wpisaniu hasła od mowa.
Teraz w zdllki .input_key i zdllki.expanded_key mamy i hash i klucz do podpatrzebia. Nie jest to do niczego konieczne ale będzie widać czy pod LabVIEW to zadziała czy nie.
Dalej to tylko proste 3 funkcje na krzyż i dwie struktury z danymi z których czytamy i do których piszemy.
AAA i BBB, są zadeklarowane jako struct AAA STR_A i struct BBB STR_B ale to DLL sam zrobił. Nie dotykajcie się do tego. Instancję tych struktur zrobił DLL i oddał je jako publiczne jako współdzielona pamięć z aplikacją użytkownika.
Dalej tylko posyłamy pytanie w stylu "dawaj dane" musimy odczekać aż pakiet pójdzie i wróci i tylko przeczytać zawartość członków struktury.
Trzeba ślepo odczekać w sieci LAN ze 100ms, a w internecie 500-1000ms. Jest tam pewne ułatwienie ale o tym później. Na razie wysłac to co poniżej, odczekać sekundę i dopiero czytać dane.
Kod: Zaznacz cały
zdllki .EL_pool_command(
(byte)'B', // Device type we send the command to
0x01, // Unique command code for this particuar action
"10.0.5.100", // String IP Address of the relay ex: "10.0.5.100"
27136, // Int UDP port of the relay ex: 27136
1000, // Transmit timeout over the network in miliseconds
1000, // Receive timeout from the network in miliseconds
"Central European Standard Time" // The name of the standard timezone where the relay is located
);
zdllki .STR_B.DS18TEMP - no po "i" odczytujemy kolejne floaty, albo konkretny jeden.
Wszystkie kosztowne operacje są wykonywane w wątkach. DLL sam zakłada wątki i z nich wychodzi po upłynięciu czasu lub jeżeli skończy więc nie powinno być zwały z zablokowaniem się procesora na 100% obciążenia.
Nie wiem czy jest timer w tym LabVIEW ? Jest ? Można na timerze zrobić co 500ms
To jest tak uproszczone żeby nie sprawiało kłopotu nikomu.
Mak ktoś chętkę to sprawdzić pod LabVIEW ? Dam nawet zdalny dostęp do PLC
Re: Biblioteka DLL z C#
Jakieś wieści Panowie ? Ktoś próbował ten drugi DLL uruchomić?