2013-08-06 12 views
5

Nie mogłem znaleźć rozwiązania, które rozwiązuje mój problem, dlatego otwieram nowy temat.Utgard - odmowa dostępu

Utgard (http://openscada.org/projects/utgard) wydaje mi się bardzo przydatnym narzędziem dla mnie. W tej fazie chcę po prostu uzyskać dostęp do serwera TOP OPC lokalnie w systemie Windows 8 przez Eclipse. Jednak próbując uruchomić samouczek, otrzymuję komunikat "Odmowa dostępu". Nie sądzę, że popełniłem błędy przy użyciu nazwy użytkownika, hasła i tak dalej.

Klient testowy Exele OPC DA nie zwraca żadnych błędów. Mogę łączyć, pobierać i przepisywać wartości.

Należy pamiętać, że jestem początkującym, jeśli chodzi o OPC i OpenSCADA. Każda pomoc zostanie bardzo doceniona.

package org.openscada.opc.tutorial; 
import java.util.concurrent.Executors; 
import org.jinterop.dcom.common.JIException; 
import org.openscada.opc.lib.common.ConnectionInformation; 
import org.openscada.opc.lib.da.AccessBase; 
import org.openscada.opc.lib.da.DataCallback; 
import org.openscada.opc.lib.da.Item; 
import org.openscada.opc.lib.da.ItemState; 
import org.openscada.opc.lib.da.Server; 
import org.openscada.opc.lib.da.SyncAccess; 

public class UtgardTutorial1 { 


public static void main(String[] args) throws Exception { 
    // create connection information 
    final ConnectionInformation ci = new ConnectionInformation(); 
    //final ConnectionInformation connectionInformation = new ConnectionInformation(); 
    ci.setHost("127.0.0.1"); 
    //ci.setDomain(""); 
    ci.setUser("Me"); 
    ci.setPassword("Password"); 
    ci.setProgId("SWToolbox.TOPServer.V5"); 
    //ci.setClsid("680DFBF7-C92D-484D-84BE-06DC3DECCD68"); // if ProgId is not working, try it using the Clsid instead 
    // create an id for the tag you want to retrieve 
    final String itemId = "_System._Time_Second"; 
    // create a new server 
    final Server server = new Server(ci, Executors.newSingleThreadScheduledExecutor()); 
    //final Server serverServer = new Server(connectionInformation, Executor.newSingleThreadSchedulesExecutor); 

    try { 
     // connect to server 
     server.connect(); 
     // add sync access, poll every 500 ms 
     final AccessBase access = new SyncAccess(server, 500); 
     access.addItem(itemId, new DataCallback() { 
      @Override 
      public void changed(Item item, ItemState state) { 
       System.out.println(state); 
      } 
     }); 
     // start reading 
     access.bind(); 
     // wait a little bit 
     Thread.sleep(10 * 1000); 
     // stop reading 
     access.unbind(); 
    } catch (final JIException e) { 
     System.out.println(String.format("%08X: %s", e.getErrorCode(), server.getErrorMessage(e.getErrorCode()))); 
    } 
} 

}

Błąd stosu ślad:

INFO org.openscada.opc.lib.da.Server - Failed to connect to server 
org.jinterop.dcom.common.JIException: Access is denied, please check whether the [domain-username-password] are correct. Also, if not already done please check the GETTING STARTED and FAQ sections in readme.htm. They provide information on how to correctly configure the Windows machine for DCOM access, so as to avoid such exceptions. [0x00000005] 
    at org.jinterop.winreg.smb.JIWinRegStub.winreg_OpenKey(Unknown Source) ~[org.openscada.jinterop.core_2.0.8.201303051454.jar:na] 
    at org.jinterop.dcom.core.JIProgId.getIdFromWinReg(Unknown Source) ~[org.openscada.jinterop.core_2.0.8.201303051454.jar:na] 
    at org.jinterop.dcom.core.JIProgId.getCorrespondingCLSID(Unknown Source) ~[org.openscada.jinterop.core_2.0.8.201303051454.jar:na] 
    at org.jinterop.dcom.core.JIComServer.<init>(Unknown Source) ~[org.openscada.jinterop.core_2.0.8.201303051454.jar:na] 
    at org.openscada.opc.lib.da.Server.connect(Server.java:123) ~[org.openscada.opc.lib_1.0.0.201303051455.jar:na] 
    at org.openscada.opc.tutorial.UtgardTutorial1.main(UtgardTutorial1.java:32) [bin/:na] 
Caused by: org.jinterop.dcom.common.JIRuntimeException: Access is denied, please check whether the [domain-username-password] are correct. Also, if not already done please check the GETTING STARTED and FAQ sections in readme.htm. They provide information on how to correctly configure the Windows machine for DCOM access, so as to avoid such exceptions. [0x00000005] 
    at org.jinterop.winreg.IJIWinReg$openKey.read(Unknown Source) ~[org.openscada.jinterop.core_2.0.8.201303051454.jar:na] 
    at ndr.NdrObject.decode(Unknown Source) ~[org.openscada.jinterop.deps_1.0.0.201303051454.jar:na] 
    at rpc.ConnectionOrientedEndpoint.call(Unknown Source) ~[org.openscada.jinterop.deps_1.0.0.201303051454.jar:na] 
    at rpc.Stub.call(Unknown Source) ~[org.openscada.jinterop.deps_1.0.0.201303051454.jar:na] 
+0

czy sprawdzane ustawienia DCOM z serwera OPC? –

+0

Cześć claptrap, dziękuję za odpowiedź! Tak, sprawdziłem ustawienia DCOM więcej niż raz, kierując się wieloma różnymi artykułami w Internecie. Chyba nie stanowią problemu. Tylko w moim IDE dostaję te błędy. – user2656046

+0

ah ok, powodzenia ze znalezieniem problemu. –

Odpowiedz

4

Nie masz dostępu do lokalnego rejestru systemu Windows, więc klient nie konwertować ProgID serwera do CLSID. Upewnij się, że uruchomiłeś aplikację z odpowiednimi uprawnieniami, tj. Jesteś administratorem.

Można również skonfigurować połączenie przy użyciu identyfikatora CLSID serwera, więc rejestr nie będzie potrzebny.

Klient OPC powinien faktycznie używać usługi OpcEnum uruchomionej na komputerze serwera, aby przeprowadzić konwersję ProgID do CLSID. Być może usługa nie jest dostępna lub Utgard próbuje tylko rejestru (sam nie wiem Utgard). Jeśli serwer nie jest zainstalowany na komputerze klienckim, konwersja ProgID na CLSID na podstawie rejestru zakończy się niepowodzeniem, ponieważ informacje te nie są dostępne w lokalnym rejestrze systemu Windows. Najgorszy przypadek polega na tym, że Utgard spróbuje otworzyć zdalny Rejestr systemu Windows, który rzadko się udaje (lub musisz upewnić się, że jest włączony osobno).

Zauważ, że jak nie wiem Utgard, po prostu zgaduję, jakie strategie próbuje. Niemniej jednak użycie tylko CLSID obejmie całą część konwersji, która jest Twoim problemem.

E: Biorąc pod uwagę, że twój drugi klient może łączyć się bez problemu, podejrzewam, że Utgard nie próbuje w ogóle korzystać z OpcEnum.

+0

Witam Jouni Aro, dziękuję za jasne wyjaśnienie. Ustawię twoją odpowiedź jako zaakceptowaną odpowiedź, ponieważ usłyszałem, że jest to powszechny problem i pomoże wielu ludziom. Rozwiązałem jednak problem, zmieniając po raz kolejny ustawienia DCOM, tak jak sugeruje to claptrap. Tym razem ustawię "location" na "Uruchom aplikację z następującego komputera" myComputerName "" zamiast "Uruchom aplikację z tego komputera". Nie wiem dlaczego, ale teraz działa dobrze. – user2656046

+0

Używam również CLSID, jak powiedziałeś! Ale to samo w sobie nie sprawiło, że wyjątek zniknął. Musiałem również zmienić model DCOM, jak wyjaśniono w poprzednim komentarzu. – user2656046

+1

Witam, czy możesz letować konfigurację DCOM, której używałeś. – Kumait

0

Mam ten sam błąd i rozwiązać problem przez stosując następującą poprawkę do rejestru:

  • HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System
  • tworzyć lub modyfikować 32 -bitowa DWORD: LocalAccountTokenFilterPolicy
  • ustawić wartość: 1
Powiązane problemy