Example usage ‒ GDS services

This section contains a few examples for the usage of the Java RSC API.

Note:
The Java RSC API will soon be replaced by a better solution. Therefore the support for this tool is already discontinued. If you decide to use the Java RSC API anyway you'll be on your own.

See section RSC (Remote Service Calls) for further information of available RSC services and their usage.

Read variables:

You can access data which are available in the Global Data Space (GDS) with the com.phoenixcontact.arp.plc.gds.services.IDataAccessService. This example shows how you can read a value.

try (ServiceManager serviceManager = new ServiceManager()) {
      serviceManager.connect(connectionInfo, securityInfo);
      IDataAccessService service = serviceManager.getService(IDataAccessService.class);
      // Full variable name uri.
      // ComponentName-1/ProgramName-1.Variable_Name
      // ComponentName-1/Global_Variable_Name
      // ComponentName-1/ProgramName-1.Array_Variable_Name
      // ComponentName-1/ProgramName-1.Array_Variable_Name[index]
      // ComponentName-1/ProgramName-1.Struct_Variable_Name.Element1.Leaf
      // ComponentName-1/ProgramName-1.Struct_Variable_Name.Element1.LeafArray
      // ComponentName-1/ProgramName-1.Struct_Variable_Name.Element1.LeafArray[index]
      String portName = "Arp.Plc.Esm/ESM_DATA.ESM_COUNT";
      // com.phoenixcontact.arp.plc.gds.services.ReadItem
      // read variable
      ReadItem item = service.readSingle(portName);
      if(DataAccessError.NONE.equals(item.getError())) {
        // com.phoenixcontact.ade.commonremoting.utils.AdeObject
        AdeObject obj = item.getValue();
        // print value.
        System.out.println("Value: " + obj.getValue());
        // print data type.
        System.out.println("Data type: " + obj.getCoreType());
      } else {
        // An error occurred.
        // print error type
        System.out.println("Error: " + item.getError());
      }
}

Write variables:

Like reading, you can use the com.phoenixcontact.arp.plc.gds.services.IDataAccessService to write data to the GDS. The following examples are for writing different data types.

String:

try (ServiceManager serviceManager = new ServiceManager()) {
      serviceManager.connect(connectionInfo, securityInfo);
      IDataAccessService service = serviceManager.getService(IDataAccessService.class);
      WriteItem writeItem = new WriteItem();
      // Full variable name uri.
      // ComponentName-1/ProgramName-1.Variable_Name
      // ComponentName-1/Global_Variable_Name
      // ComponentName-1/ProgramName-1.Array_Variable_Name
      // ComponentName-1/ProgramName-1.Array_Variable_Name[index]
      // ComponentName-1/ProgramName-1.Struct_Variable_Name.Element1.Leaf
      // ComponentName-1/ProgramName-1.Struct_Variable_Name.Element1.LeafArray
      // ComponentName-1/ProgramName-1.Struct_Variable_Name.Element1.LeafArray[index]
      String portName = "URI of a writeable variable";
      writeItem.setPortName(portName);
      AdeObject value = new AdeObject();
      // The default encoding for Strings will be UTF16. If you want to use a different encoding you
      // must define the CoreType.
      value.setCoreType(CoreType.UTF8_STRING);
      value.setValue("Test string");
      writeItem.setValue(value);
      // write variable
      DataAccessError error = service.writeSingle(writeItem);
      if (!DataAccessError.NONE.equals(error)) {
        // An error occurred.
        // print error type
        System.out.println("Error: " + error);
      }
}

Unsigned types: 

try (ServiceManager serviceManager = new ServiceManager()) {
      serviceManager.connect(connectionInfo, securityInfo);
      IDataAccessService service = serviceManager.getService(IDataAccessService.class);
      WriteItem writeItem = new WriteItem();
      // Full variable name uri.
      // ComponentName-1/ProgramName-1.Variable_Name
      // ComponentName-1/Global_Variable_Name
      // ComponentName-1/ProgramName-1.Array_Variable_Name
      // ComponentName-1/ProgramName-1.Array_Variable_Name[index]
      // ComponentName-1/ProgramName-1.Struct_Variable_Name.Element1.Leaf
      // ComponentName-1/ProgramName-1.Struct_Variable_Name.Element1.LeafArray
      // ComponentName-1/ProgramName-1.Struct_Variable_Name.Element1.LeafArray[index]
      String portName = "URI of a writeable variable";
      writeItem.setPortName(portName);
      AdeObject value = new AdeObject();
      // For unsigned data types you must define the core type.
      value.setCoreType(CoreType.U1);
      // Remember that unsigned types require the bigger data type e.g. uint 8 requires int16 (short)
      value.setValue((short) 0xFF);
      writeItem.setValue(value);
      // write variable
      DataAccessError error = service.writeSingle(writeItem);
      if (!DataAccessError.NONE.equals(error)) {
        // An error occurred.
        // print error type
        System.out.println("Error: " + error);
      }
    }
}

Project download

The com.phoenixcontact.arp.system.commons.services.io.IFileService allows you to upload a file to the device. The methods provided by the FileService are for uploading the project files to the device.
The com.phoenixcontact.arp.plc.domain.services.IPlcManagerService2 will be used to stop the current project and load the new project.

try (ServiceManager serviceManager = new ServiceManager()) {
      serviceManager.connect(connectionInfo, securityInfo);
      IPlcManagerService2 plcService = serviceManager.getService(IPlcManagerService2.class);
      // Stop program
      plcService.stop(false);
      plcService.reset(false);
      // Upload project file generated by PLCnext Engineer.
      String projectPath = "/opt/plcnext/projects/PCWE";
      String projectFile = projectPath + "/thefilename";
      String sourceFile = "your/file/to/upload";
      IFileService fileService = serviceManager.getService(IFileService.class);
      try (FileInputStream data = new FileInputStream(sourceFile)) {
        boolean overwrite = true;
        error = fileService.write(projectFile, overwrite, new TraitItem[0], data);
        if (FileSystemError.NONE.equals(error)) {
          System.out.println("success");
        } else {
          // An error occurred.
          // print error type
          System.out.println("Error: " + error);
        }
      }
      plcService.load(false);
      plcService.start(PlcStartKind.WARM, false);
}

Project download change

The download change is performed similar to a normal download. Instead of stopping and starting the program, you call the plcService.change(false).

try (ServiceManager serviceManager = new ServiceManager()) {
      serviceManager.connect(connectionInfo, securityInfo);
      IPlcManagerService2 plcService = serviceManager.getService(IPlcManagerService2.class);
      // Upload project file generated by PLCnext Engineer.
      String projectPath = "/opt/plcnext/projects/PCWE";
      String projectFile = projectPath + "/thefilename";
      String sourceFile = "your/file/to/upload";
      IFileService fileService = serviceManager.getService(IFileService.class);
      try (FileInputStream data = new FileInputStream(sourceFile)) {
        boolean overwrite = true;
        error = fileService.write(projectFile, overwrite, new TraitItem[0], data);
        if (FileSystemError.NONE.equals(error)) {
          System.out.println("success");
        } else {
          // An error occurred.
          // print error type
          System.out.println("Error: " + error);
        }
      }
      plcService.change(false);
}

 

 


•  Web browser recommendation: Chrome/Edge 88 or newer, Firefox ESR 90 or neweror Safari • 
• Published/reviewed: 2022-09-14 • Revision 046 •