У меня есть этот код, который должен считывать значения из Kepware OPC сервераRead OPC Значение Utgard
package opcread;
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 OPCRead {
public static void main(String[] args) throws Exception {
// TODO code application logic here
final ConnectionInformation ci = new ConnectionInformation();
ci.setHost("localhost");
ci.setDomain("MYDOMAIN");
ci.setUser("MY_COMPUTER_USERNAME");
ci.setPassword("MY_COMPUTER_PASSWORD");
ci.setProgId("Kepware.KEPServerEX.V5\\MP.ANC1._System._Mode");
ci.setClsid("B3AF0BF6-4C0C-4804-A122-6F3B160F4397");
final String itemId = "_System._Time_Second";
final Server server = new Server(ci, Executors.newSingleThreadScheduledExecutor());
try
{
server.connect();
final AccessBase access = new SyncAccess(server, 500);
access.addItem(itemId, new DataCallback(){
@Override
public void changed(Item item, ItemState state){
System.out.println("Data change " + item + " : " + state);
}
});
access.bind();
Thread.sleep(10*1000);
access.unbind();
}
catch(final JIException e)
{
System.out.println("Errorrrrrrrr : " + String.format("%08X: %s", e.getErrorCode(),server.getErrorMessage(e.getErrorCode())));
}
catch(Exception ex)
{
System.out.println("Errorrrrrrrr : " + ex.getMessage());
}
}
}
Я хочу прочитать значение подарок на _Mode
теге. Я также дал полный путь выше Kepware.KEPServerEX.V5\\MP.ANC1._System._Mode
. Но в результате, он не показывает значения присутствуют на бирке, т.е. userRate
, а это дает следующее сообщение
Sep 12, 2015 9:10:57 PM rpc.DefaultConnection processOutgoing
INFO:
Sending REQUEST
Sep 12, 2015 9:10:57 PM rpc.DefaultConnection processIncoming
INFO:
Recieved RESPONSE
Data change [email protected] : Value: [[[email protected]]], Timestamp: Sat Sep 12 21:10:57 IST 2015, Quality: 192, ErrorCode: 00000000
На месте [email protected]
, он должен напечатать значение, но получить это сообщение. Что я тут делаю?
я получаю сообщение об ошибке при использовании 'state.getObjectAsUnsigned() ПолучитьЗначение()', но не получаю сообщение об ошибке при использовании 'state.getValue () .getObjectAsUnsigned() '. Теперь также получим ответ как «Изменение данных [email protected]: Значение: org.jinterop.dcom.core.JIUnsignedInteger @ 11d4b2e' –
После изменения на' state.getValue(). GetObjectAsUnsigned() .getValue(). toString() 'Я не получаю' org.jinterop.dcom.core.JIUnsignedInteger @ 11d4b2e', но вместо этого получаю цифры, такие как 23,24,25. Но 'Kepware.KEPServerEX.V5 \\ MP.ANC1._System._Mode' содержит строковое значение. Я ожидал этого. Почему я получаю номера? –
Вы получаете номера, потому что используете 'addItem' с идентификатором элемента' _System._Time_Second'. Таким образом, вы получаете секунды. –