2013-08-06 3 views
5

Мне не удалось найти решение, которое исправляет мою проблему, поэтому я открываю новую тему.Utgard - Доступ запрещен

Утгард (http://openscada.org/projects/utgard) кажется очень полезным инструментом для меня. На этом этапе я просто хочу иметь доступ к TOP OPC-серверу локально на ОС Windows 8 через Eclipse. Однако, пытаясь запустить их учебное пособие, я получаю «Доступ запрещен». Я не думаю, что я допустил ошибки с именем пользователя, паролем и так далее.

Клиент Exele OPC DA Test не возвращает никаких ошибок. Я могу подключать, извлекать и переписывать значения.

Обратите внимание, что я новичок, когда дело доходит до OPC и OpenSCADA. Любая помощь будет оценена.

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()))); 
    } 
} 

}

Ошибка трассировка стека:

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

вы проверили настройки DCOM на OPC-сервера? –

+0

Привет, спасибо, за ваш ответ! Да, я проверял настройки DCOM несколько раз, руководствуясь множеством разных статей в Интернете. Наверное, это не проблема. Только в моей среде IDE я получаю эти ошибки. – user2656046

+0

ах ок, удачи в поиске проблемы. –

ответ

4

У вас нет доступа к локальному реестру Windows, поэтому клиенту не конвертировать ProgID сервера в CLSID. Убедитесь, что вы запустили приложение с достаточными правами там, то есть вы являетесь пользователем-администратором.

В качестве альтернативы вы можете просто настроить соединение с помощью CLSID сервера, поэтому вам не понадобится реестр.

Клиент OPC должен фактически использовать службу OpcEnum, запущенную на сервере, для преобразования ProgID в CLSID. Возможно, услуга недоступна, или Утгард только пытается реестр (я сам не знаю Утгард). Если у вас нет сервера, установленного на клиентской машине, преобразование ProgID в CLSID на основе реестра будет сбой в любом случае, поскольку эта информация недоступна в локальном реестре Windows. Хуже всего то, что Utgard попытается открыть удаленный реестр Windows, который редко бывает успешным (или вам нужно убедиться, что он включен отдельно).

Обратите внимание, что, поскольку я не знаю Утгард, я просто догадываюсь, какие стратегии он пытается. Тем не менее, использование CLSID только обходит всю часть преобразования, что является вашей проблемой.

E: Учитывая, что ваш другой клиент может связаться без проблем, я подозреваю, что Утгард вообще не пытается использовать OpcEnum.

+0

Привет, Джуни Аро, спасибо за ваше четкое объяснение. Я отвечу на ваш ответ в качестве принятого ответа, потому что я слышал, что это общая проблема, и это поможет многим людям. Однако я решил проблему, изменив настройки DCOM как предложение claptrap. На этот раз я установил «местоположение» в «Запустить приложение с компьютера« myComputerName »вместо« Запустить приложение с этого компьютера ». Не знаю, почему, но теперь все отлично. – user2656046

+0

Я также использую CLSID, как вы сказали! Но это само по себе не исключало исключения. Мне также пришлось изменить DCOM, как описано в моем предыдущем комментарии. – user2656046

+1

Здравствуйте, не могли бы вы рассказать о конфигурации DCOM, которую вы использовали. – Kumait

0

Я получил ту же ошибку, и решить эту проблему путем применяя следующий патч реестра:

  • HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System
  • создать или изменить 32 -битовый DWORD: LocalAccountTokenFilterPolicy
  • установите значение: 1
Смежные вопросы