Powolny odczyt z OPC serwera

Wszelkie sprawy związane z LabVIEW i komunikacją ze sprzętem. Problemy i ciekawe rozwiązania.
kapitan7
Posty: 114
Rejestracja: 31 paź 2005 00:00
Wersja środowiska: LabVIEW 8.2
Lokalizacja: Cz-wa / Wa-wa

Powolny odczyt z OPC serwera

Post autor: kapitan7 »

Witam!

Próbuję wykonać odczyt danych z OPC serwera innej firmy (nie NI). Podobno ma być tak że ustawiam prędkość odczytu w OPC serwerze a LabView jako klient ma jedynie odczytywać to co przyjdzie. Jednak ->
Ustawilem w kliencie (innym niż LV odczyt co 2.5s) a w LabView - korzystając z bloczku Demo OPC zapiąłem pętle odczytową i otrzymywałem dane co 300 ms no i wszystko super ale do czasu. Gdy Do odczytu zmiennych używam tablicy z różnymi zmiennymi to
1. Zmienne ktorych wartość się nie zmienia dają timeout(są odczytywane tylko raz na początku.
2. Zmienne których wartość się zmienia które przy pojedynczej pętli odczytywałem co 300 ms timeoutują przy 10 s a czasem są odczytywane)????? Czy ktoś wie DLACZEGO tak się dzieje i co należy zrobić??
3. Gdy wyłącze klienta innej firmy komunikacja (odczyt z serwera) jest wolniejsza niż ręczny telegraf.

Proszę o pomoc
kapitan7
Awatar użytkownika
rumcajs
Posty: 209
Rejestracja: 17 paź 2004 00:00
Lokalizacja: Aktualnie TRW

Re: Powolny odczyt z OPC serwera

Post autor: rumcajs »

Domyslam się, że używasz Demo OPC z Datasocked. Bardzo kiepska wydajnościowo technologia.
Wyłącz "Wait for updated value" w Datasocked Read aby nie czekać na zaktualizowaną wartość itemu w OPC Serwerze.
Dla zwiększenia wydajności polecam używać Active X, które to już przeważnie są instalowane z większością OPC Serverów i zawierają automation Wrappery do tworzenia prostych kklientów OPC.
Napisz coś więcej o OPC Serwerze który używasz i z jakich PLC odczytujesz dane oraz w jakich formatach a możę coś więcej pomogę + oczywiście diagram lub sample.
Rumcajs.
kapitan7
Posty: 114
Rejestracja: 31 paź 2005 00:00
Wersja środowiska: LabVIEW 8.2
Lokalizacja: Cz-wa / Wa-wa

Re: Powolny odczyt z OPC serwera

Post autor: kapitan7 »

Witam!
Bardzo przepraszam za długi czas nieobecności. (URLOP :D )

Wyłączyłem "wait for update value" i coś drgnęło (nie pojawia się pewien błąd. Polegał on na tym że po kilkudziesięciu godzinach działania programu klient odczytywał wartości sprzed kilku godzin??!!??!!??!! - wogóle tego nie rozumiem. Teraz odczytuje aktualne)
Używam serwera dostarczonego od firmy Eurotherm (do programu iTools)
W wymienionym wyżej programie szybkość odczytu ustawiana jest w kliencie (jest to tak skonstruowane że uruchomienie klienta automatyczne włącz serwer. Dla operatora obsługa -w tym czas 'update' nowych wartości- kończy się na kliencie). Stąd powinna być możliwość obserwowana przeze mnie na Demo OPC w LabView - sterowania szybkością z klienta.
O co chodzi z Active X (nie spotkałem sie z tym jeszcze?)
W centrum NI dostałem odpowiedź że oczywiście problem jest banalny do rozwiązania (wystarczy zakupić odpowiednie oprogramowanie 20 tyś PLN -na co niestety nie mogę sobie pozwolić i nie chcę). Wiem że na pewno da się to zrobić na wersji na której obecnie pracuję (LabView Base 8.2)

Prosze o pomoc.
kapitan7
Awatar użytkownika
rumcajs
Posty: 209
Rejestracja: 17 paź 2004 00:00
Lokalizacja: Aktualnie TRW

Re: Powolny odczyt z OPC serwera

Post autor: rumcajs »

sorry, że tak długo.
Dołączam przykłady komunikacji z OPC serverem z wykorzystaniem ActiveX.
1 przykład - wykorzystanie ActiveX Datasocketowych.
2 przykład - wykorzystanie Eurotherm OPC Data Access Automation Server
3 - jak powinien być skonfigurowany OPC server dla przykładów.
Rumcajs
kapitan7
Posty: 114
Rejestracja: 31 paź 2005 00:00
Wersja środowiska: LabVIEW 8.2
Lokalizacja: Cz-wa / Wa-wa

Re: Powolny odczyt z OPC serwera

Post autor: kapitan7 »

Witam!

Bardzo dziękuję za przykłady.
Dzięki min udało mi się skonstruować odbiór danych przy użyciu Active X jednak nie rozwiązało to wszystkich problemów.
1. Zauważyłem że dane nie są odbierane tak często jak przychodzą do serwera (szybkość docierających danych widzę na kliencie OPC scope dostarczonego przez Eurotherm)
2. Jeśli już można mówić o jakiejś poprawie to zachodzi ona tylko w przypdaku pierwszej zmiennej z tablicy. Kilka razy zauważyłem że jest ona odczytywana z prędkością zauważaną w OPC scope
3. Jest jedna ważna rzecz. Udało mi się przy użyciu mojego programu i zaproponowanych przez Pana rozwiązań odczytać wszystkie zmienne bez włączania iToolsa lub OPC scope. Po resecie komputera uruchomiłem mój program i po 250 sekundach skończył on uzupełniać tablicę zmiennych (mimo wszytko troszkę wolno to trwa)

Może problem wynika z nieustawionego czasu update. Może z poziomu ActiveX można ustawić częstość odbierania danych ??
Użycie zaproponowanego przez Pana bloczka do odczytu pojedynczej zmiennej dało możliwość odczytywania z prędkością taką jak w OPC scope

Troszkę się w tym zagubiłem jednak co dla mnie ważne w tym rozwiązaniu mogę odbierać dane bez użycia programów iTools i OPC scope. W związku z tym planuję dalszy rozwój aplikacji w oparciu o ActiveX jednak nie czuje sie w tym mocny.
Proszę o pomoc, szczególnie w temacie "jak przyspieszyć odbiór danych w momencie nie używania innych klientów"

Pozdrawiam
kapitan7
Awatar użytkownika
rumcajs
Posty: 209
Rejestracja: 17 paź 2004 00:00
Lokalizacja: Aktualnie TRW

Re: Powolny odczyt z OPC serwera

Post autor: rumcajs »

Trochę dziwne dla mnie te problemy z czasem odczytu danych z OPC Servera.
OPC Server odpytuje urządzenie z czasem UpdateInterval ustawionym domyślnie w konfiguracji OPC Servera globalnie lub dla Grupy/Itemu jeżeli tylko OPC klient (LV) nie zmieni go (jedna z własności udostępnianych w Active X).
Problem może tkwić na każdym poziomie od problemów z połączeniem (zbyt dużo błędów w komunikacji), poprzez konfigurację OPC Servera do aplikacji napisanej w LV.
Aby pomóc w znalezieniu problemu z prędkością odczytu danych musiałbym znać konfigurację połączenia z urządzeniem, konfigurację OPC Servera i oczywiście obejrzeć program w LV.
Im więcej będę wiedział tym bardziej będę mógł pomóc.
Rumcajs.
kapitan7
Posty: 114
Rejestracja: 31 paź 2005 00:00
Wersja środowiska: LabVIEW 8.2
Lokalizacja: Cz-wa / Wa-wa

Re: Powolny odczyt z OPC serwera

Post autor: kapitan7 »

Witam,
Przepraszam za długi czas odpowiedzi
Obecnie nie jestem w stanie przesłać programu. Z tego co obserwuje w kliencie (OPC scope, lub iTools) problem nie leży w obszarze błędów połączenia ( konfiguracja komputer PC - Moxa HUB - regulatory Eurotherm 2500M ). Możliwe jest zatem że problem leży albo w nieprawidłowej komunikacji LV - OPC serwer, albo jest spowodowane moim błędem w obszarze programowania.
Moim zdaniem należy prawidłowo skonfigurować czas UpdateInterwal jednak jak dotąd nie udało mi się tego zrobić. Wciąż dziwne jest że pierwsza zmienna z tablicy jest czasami odczytywana z żądaną prędkością a pozostałe nie.
Może problem rozwiązało by ustawienie równoległego odczytu wszystkich zmiennych z serwera OPC (jednak bloki odczytu byłyby bardzo....egzotyczne i wydaje mi się że z programistycznego puntu widzenia jest to niepoprawne).
Jest jeszcze jeden problem który wcześniej zauważyłem. Jeden z przykładowych bloczków przesłanych przez Rumcajsa nie działa w moim środowisku ( LV 8.5 Base) - niektóre połączenia pomiędzy bloczkami są "błędne" (przerywana linia - zauważyłem ten problem przy innych przykładach z forum związanych z ActiveX zmieszczone pliki też nie dzialaly w moim systemie, ->może jest to spowodowane tym że nie używam pakietu Office tylko Open Office) - może moje problemy wynikają z tego że jest to wersja Base??
Proszę o pomoc z UpdateInterwal a może ktoś z Państwa posiada jakieś przykładowe bloki do komunikacji z OPC serwerem. Szczególnie zależy mi na przykładach aplikacji obsługujących duże ilości zmiennych.
Ponieważ aplikacja służąca do komunikacji jest nieco rozbudowana postaram się ją zmodyfikować i podesłać na forum.

Dziękuję za dotychczasową pomoc.
Pozdrawiam.
kapitan7
Awatar użytkownika
tomusd
Posty: 6
Rejestracja: 18 lis 2007 11:26
Kontakt:

Re: Powolny odczyt z OPC serwera

Post autor: tomusd »

witam

mam ten sam problem. tzn bardzo wolno chodzi mi odczyt i zapis z przerobionego przykładu.
gdzie znajde ten parametr który trzeba wyłaczyć??
kapitan7
Posty: 114
Rejestracja: 31 paź 2005 00:00
Wersja środowiska: LabVIEW 8.2
Lokalizacja: Cz-wa / Wa-wa

Re: Powolny odczyt z OPC serwera

Post autor: kapitan7 »

Witam,
Znów dużo czasu upłynęło. W załącznikach są moje próby rozwiązania problemu 1. OPC_Data - podstawowa komunikacja za pomocą Data Socket. W tym przypadku odczyt danych z OPC serwera jest bardzo powolny (niektóre dane co kilka minut inne co kilkadziesiąt sekund) tempo spada gdy wyłączę "fabrycznego" klienta OPC. 2. OPC_ActivX - próby stworzenia komunikacji za pomocą ActiveX - działają szybciej (update niemal wszystkich zmiennych nie dłużej niż minuta) jedynie po wyłączeniu "fabrycznego" klienta następuje niemal że zatrzymanie komunikacji :(
Podjąłem też próby zastosowania podejścia Rumcajsa (mowa o pliku opc_automation_activex.vi ) jednak nie do końca rozumiem w jaki sposób ustawić parametry poszczególnych bloków a co najważniejsze jaką bibliotekę wybrać. Co dla mnie ważne w tym przykładzie istnieje możliwość ustawiania prędkości odczytu z OPC serwera która jest dla mnie bardzo potrzebna. Głównym problemem jest moja niewiedza. W jaki sposób można zaadoptować ten przykład do moich potrzeb.
Proszę o wszelką pomoc związaną zarówno z odnalezieniem błędów w moich plikach jak również w odpowiedzi na pytanie jak za pomocą przykładu Rumcajsa opc_automation_activex.vi odczytać zmienna o addresie URL np...COM2/ID001-01/Control1/Loop1/PV
Pozdrawiam i dziekuję za dotychczasowa pomoc.
Ostatnio zmieniony 02 wrz 2008 12:45 przez kapitan7, łącznie zmieniany 2 razy.
kapitan7
kapitan7
Posty: 114
Rejestracja: 31 paź 2005 00:00
Wersja środowiska: LabVIEW 8.2
Lokalizacja: Cz-wa / Wa-wa

Re: Powolny odczyt z OPC serwera

Post autor: kapitan7 »

Obawiam się że mój problem ze zrozumieniem działania pliku opc_automation_activex.vi jest związany z niezainstalowaniem pewnych składników tylko nie wiem jakich (poprostu nie działają mi poszczególne bloki). Proszę o ile to możliwe o pomoc w odpowiedzi na pytanie co dodatkowo powinienem zainstalować aby bloki z przykładu Rumcajsa działały.
kapitan7
kapitan7
Posty: 114
Rejestracja: 31 paź 2005 00:00
Wersja środowiska: LabVIEW 8.2
Lokalizacja: Cz-wa / Wa-wa

Powolny odczyt z OPC serwera

Post autor: kapitan7 »

A może jakoś inaczej rozwiązać ten problem???
kapitan7
Awatar użytkownika
rumcajs
Posty: 209
Rejestracja: 17 paź 2004 00:00
Lokalizacja: Aktualnie TRW

Re: Powolny odczyt z OPC serwera

Post autor: rumcajs »

Witam,
znalazłem wreszcie chwilkę aby odpowiedzieć na pytania.
1. W załączniku przykład programu do odczytu z OPC servera za pomocą OPC automation w LV oraz freewareowy OPC automation wrapper (dll'ka) którą należy najpierw zarejestrować w systemie jako komponent Active X - patrz plik readme.txt + manual do OPC Automation wrappera.
Nie powinno już być problemów z błędami w LV - identyczny wrapper.
Program nie został jednak przetestowany z powodu braku Eurotherm OPC serwera na moim PC, tak więc nazwa OPC serwera, OPC grupy i OPC Itemu jest domyślna. Aby sprawdzić jakie powinny być odczytaj je sobie z OPC Scope (pisałeś w poście, że je tam deklarowałeś) ponieważ OPC Scope jest klientem OPC który właśnie tak jak przykład w LV tworzy w OPC serwerze grupy i itemy określające podłączenie do danej zmiennej w urządzeniu Eurotherm 2500M.
2. Jeżeli zdefiniowałeś w OPC Scope wszystkie monitorowane zmienne w Eurothermie i są one bez problemów czasowych odczytywane/zapisywane/odświeżane z urządzenia, tzn że połączenie (kabel, moxa, itp.) jest OK a program napisany w LV powinien za pomocą OPC automation wrappera również być niewiele mniej wydajny.
Pisz o problemach.
Romek.
kapitan7
Posty: 114
Rejestracja: 31 paź 2005 00:00
Wersja środowiska: LabVIEW 8.2
Lokalizacja: Cz-wa / Wa-wa

Re: Powolny odczyt z OPC serwera

Post autor: kapitan7 »

Witam,

W końcu znalazłem czas by ruszyć ten problem i pojawił sie następny.
Po zarejestrowaniu Dll -ki (zgodnie z plikiem readme.txt) i uruchomieniu przykładowego pliku LV pojawił sie następujący błąd.
Możliwe że jest on spowodowany tym że nie wiem w jaki sposób zarejestrować dll jako komponent ActiveX.
Poza tym nie nie widzę powodu dla którego pojawia się ten błąd :/
Bardzo proszę o podpowiedź co dalej robić :)

Mam też dodatkowe pytanie: skoro musimy zainstalować Automation Wrapper to czy jego funkcji nie może pełnić OPC Scope - taki jeden duży zawierający wszystkie potrzebne nam zmienne??

Inna sprawa to to że zauważyłem że sama prędkość odczytu danych z serwera za pomocą OPC Scope nie jest za szybka. Nawet przy najmniejszym czasie "update rate"(2ms) w OPC Scope odświeżanie zmiennych zajmuje około 2 sekund (jest ich około 500 ale czy to jest powód aby tak powoli wykonywać update??).

Pozdrawiam i czekam na odpowiedź.
kapitan7
Awatar użytkownika
rumcajs
Posty: 209
Rejestracja: 17 paź 2004 00:00
Lokalizacja: Aktualnie TRW

Re: Powolny odczyt z OPC serwera

Post autor: rumcajs »

Jak napisałem wcześniej:
Program nie został jednak przetestowany z powodu braku Eurotherm OPC serwera na moim PC, tak więc nazwa OPC serwera, OPC grupy i OPC Itemu jest domyślna. Aby sprawdzić jakie powinny być odczytaj je sobie z OPC Scope (pisałeś w poście, że je tam deklarowałeś) ponieważ OPC Scope jest klientem OPC który właśnie tak jak przykład w LV tworzy w OPC serwerze grupy i itemy określające podłączenie do danej zmiennej w urządzeniu Eurotherm 2500M.
- Active X jest dobrze zarejestrowany (gdyby nie VI byłby niewykonywalny - błedy), - nazwa OPC Serwera jest poprawnie zadeklarowana - nazwa OPC Grupy jest niepoprawna (błąd na wyjściu metody Add -
IOPCGroups) - nazwa OPC Itemu jest niepoprawna (błąd na wyjściu metody Add Item - OPCItems) Jeżeli nie wiesz jakie to nazwy Grupy i Itemu wrzuć screenshot'y z OPC Scouta, zobaczę co jest grane.
Mam też dodatkowe pytanie: skoro musimy zainstalować Automation Wrapper to czy jego funkcji nie może pełnić OPC Scope - taki jeden duży zawierający wszystkie potrzebne nam zmienne??
To zależy od producenta OPC Scope, jeżeli udostępnia on swoje Metody i Właściwości za pomocą Active X to oczywiście można je użyć, z tym że i tak czeka nas taka sama "ścieżka zdrowia", czyli połaczenie z OPC Serverem, deklaracja Grup, Itemów, odczyt i/lub zapis zmiennych itd. (czyli to samo co robi się w OPC Scope tylko w sposób interaktywny (klik,klik) a nie programistyczny.
Inna sprawa to to że zauważyłem że sama prędkość odczytu danych z serwera za pomocą OPC Scope nie jest za szybka. Nawet przy najmniejszym czasie "update rate"(2ms) w OPC Scope odświeżanie zmiennych zajmuje około 2 sekund (jest ich około 500 ale czy to jest powód aby tak powoli wykonywać update??).
Trudno mi to ocenić nie znając konfiguracji połączenia do Eurotherma i konfiguracji OPC Servera i OPC Scouta (OPC Clienta). Z moich doświadczeń wynika, że problem z czasem odczytu/zapisu nie pojawia się na styku Aplikacja - Aplikacja (OPC Server - OPC Client), szczególnie jeżeli pracują na tym samym PC czasy te można pominąć. Problem przeważnie jest na styku OPC Server - urządzenie. Przyczyn może być wiele: - kiepskie fizyczne połączenie do urządzenia, szczególnie jak po drodze są jakieś konwertery protokołów czy medium, np. Ethernet-RS232 - kiepskie samo medium - RS232 jest bardzo słabe szczególnie przy małych prędkościach, np. 9600baud. - słabo wydajny driver w OPC Serverze komunikujący się z urządzeniem - lub nawet problem z obsługą komunikacji po stronie urządzenia (wszak musi ono dzielić czas pracy swojego procesora pomiędzy obsługę komunikacji a wykonywanie programu sterowania). Jednym słowem nie da się tak zdalnie znaleźć przyczyny - trzeba zrobić testy. Pozdrawiam. Rumcajs.
Ostatnio zmieniony 10 gru 2008 08:10 przez rumcajs, łącznie zmieniany 1 raz.
kapitan7
Posty: 114
Rejestracja: 31 paź 2005 00:00
Wersja środowiska: LabVIEW 8.2
Lokalizacja: Cz-wa / Wa-wa

Re: Powolny odczyt z OPC serwera

Post autor: kapitan7 »

Witam,

Wrzucam screenshot'a z iTools OPC Scope z ścieżką do zmiennej
Próbowałem podłączyć się do rzeczywistej zmiennej z urządzenia ale wyrzuca ten sam błąd.
Troszkę mnie dziwi fakt niepoprawnej nazwy grupy i itemu. We wcześniejszych moich próbach (nie korzystałem wtedy z automation wrapper) jakąś metodą prób i błędów udało mi się przy tym samym urządzeniu i zmiennej jednorazowo odczytać żądaną zmienną.
Jednak zapewne tym razem zjadłem jakiś szczegół...

Co do powolnego update danych to nie widzę powodów dla których sprzęt byłby niewystarczający. Wieloportowy HUB MOXA nie jest za bardzo obciążony (w sumie wnioskuje to po sekundowych odstępach w pulsacji diod kontrolnych), użycie procesora 20% (z włączonym moim programem w LV) Co prawda Baud rate 9600 ale nie używam rs232 tylko 422 lub 485.
A ze wszystkich manuali iTools które widziałem dowiedziałem sie że update rate można ustawić tylko w OPC Scope (może gdyby dało się ustawić je w eurombus - w OPC serwerze - to problem by zniknął)

Dzięki za dotychczasową pomoc.
Czekam na odpowiedź :)
kapitan7
ODPOWIEDZ