package com.yourcompany.yourproject;
import java.util.Collection;
import java.util.Iterator;
import com.ur.urcap.api.domain.io.DigitalIO;
import com.ur.urcap.api.domain.io.IO;
import com.ur.urcap.api.domain.io.IOModel;
import com.ur.urcap.api.domain.io.ModbusIO;
/*
* A library class for getting the IO on the robot
*/
public class IOHelper {
private final IOModel ioModel;
public IOHelper(final IOModel ioModel) {
this.ioModel = ioModel;
}
public DigitalIO[] getDigitalInputs() {
final Collection<DigitalIO> ioCollection = ioModel.getIOs(DigitalIO.class);
ioCollection.removeIf(n -> !n.isInput());
final int inputSize = ioCollection.size();
final Iterator<DigitalIO> itr = ioCollection.iterator();
final DigitalIO[] inputList = new DigitalIO[inputSize];
for (int i = 0; i < inputSize; i++) {
inputList[i] = itr.next();
}
return inputList;
}
public DigitalIO[] getDigitalOutputs() {
final Collection<DigitalIO> ioCollection = ioModel.getIOs(DigitalIO.class);
ioCollection.removeIf(DigitalIO::isInput);
final int outputSize = ioCollection.size();
final Iterator<DigitalIO> itr = ioCollection.iterator();
final DigitalIO[] outputList = new DigitalIO[outputSize];
for (int i = 0; i < outputSize; i++) {
outputList[i] = itr.next();
}
return outputList;
}
public ModbusIO[] getModBusInputs() {
final Collection<ModbusIO> ioCollection = ioModel.getIOs(ModbusIO.class);
ioCollection.removeIf(n -> !n.isInput());
final int inputSize = ioCollection.size();
final Iterator<ModbusIO> itr = ioCollection.iterator();
final ModbusIO[] inputList = new ModbusIO[inputSize];
for (int i = 0; i < inputSize; i++) {
inputList[i] = itr.next();
}
return inputList;
}
public ModbusIO[] getModBusOutputs() {
final Collection<ModbusIO> ioCollection = ioModel.getIOs(ModbusIO.class);
ioCollection.removeIf(ModbusIO::isInput);
final int outputSize = ioCollection.size();
final Iterator<ModbusIO> itr = ioCollection.iterator();
final ModbusIO[] outputList = new ModbusIO[outputSize];
for (int i = 0; i < outputSize; i++) {
outputList[i] = itr.next();
}
return outputList;
}
public DigitalIO getSpecificDigitalIO(final String defaultName) {
final Collection<DigitalIO> ioCollection = ioModel.getIOs(DigitalIO.class);
final int ioCount = ioCollection.size();
if (ioCount > 0) {
final Iterator<DigitalIO> ioItr = ioCollection.iterator();
while (ioItr.hasNext()) {
final DigitalIO thisIO = ioItr.next();
final String thisDefaultName = thisIO.getDefaultName();
if (thisDefaultName.equals(defaultName)) {
return thisIO;
}
}
}
return null;
}
public IO getSpecificGPIO(final String defaultName) {
final Collection<IO> ioCollection = ioModel.getIOs();
final int ioCount = ioCollection.size();
if (ioCount > 0) {
final Iterator<IO> ioItr = ioCollection.iterator();
while (ioItr.hasNext()) {
final IO thisIO = ioItr.next();
final String thisDefaultName = thisIO.getDefaultName();
if (thisDefaultName.equals(defaultName)) {
return thisIO;
}
}
}
return null;
}
public ModbusIO getSpecificModBusIO(final String signalName) {
final Collection<ModbusIO> ioCollection = ioModel.getIOs(ModbusIO.class);
final int ioCount = ioCollection.size();
if (ioCount > 0) {
final Iterator<ModbusIO> ioItr = ioCollection.iterator();
while (ioItr.hasNext()) {
final ModbusIO thisIO = ioItr.next();
final String thisSignalAddress = thisIO.getName();
if (thisSignalAddress.equals(signalName)) {
return thisIO;
}
}
}
return null;
}
}
Above is a class I’ve found on the forum…somewhere which allows you to get the digitalIO IN JAVA. You can call .setValue and .getValue to change and read the variable state FROM THE UI.
Note if you’re trying to read states in realtime, it is on you to employ a thread to call the .getValue() method and take some action accordingly
//Instantiate an instance of the helper by passing it a reference to the IOModel. This example is from the toolbar.
ioHelper = new IOHelper(context.getAPIProvider().getApplicationAPI().getIOModel());
//Assign digital_out[1] to the java variable "yourOutput". It is of type DigitalIO
yourOutput = ioHelper.getSpecificDigitalIO("digital_out[1]");
I reference the below post for which string to feed into the “getSpecificDigitalIO()” method: