Skip to content
Snippets Groups Projects
Commit 2d2e30b3 authored by earocorn's avatar earocorn
Browse files

Fix aspect device search

parent df09dc08
No related branches found
No related tags found
1 merge request!44Rapiscan latest
......@@ -12,6 +12,9 @@
******************************* END LICENSE BLOCK ***************************/
package com.botts.impl.sensor.aspect;
import com.botts.impl.sensor.aspect.comm.IModbusTCPCommProvider;
import com.botts.impl.sensor.aspect.comm.ModbusTCPCommProvider;
import com.botts.impl.sensor.aspect.comm.ModbusTCPCommProviderConfig;
import org.sensorhub.api.comm.CommProviderConfig;
import org.sensorhub.api.config.DisplayInfo;
import org.sensorhub.api.sensor.PositionConfig;
......@@ -34,7 +37,7 @@ public class AspectConfig extends SensorConfig {
public String serialNumber = "sensor001";
@DisplayInfo(desc = "Communication settings to connect to the data stream")
public CommProviderConfig<?> commSettings;
public ModbusTCPCommProviderConfig commSettings;
@DisplayInfo(desc = "RPM Location")
public PositionConfig positionConfig = new PositionConfig();
......
......@@ -22,6 +22,8 @@ import org.sensorhub.impl.sensor.AbstractSensorModule;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.ConnectException;
/**
* Sensor driver for the Aspect sensor providing sensor description, output registration,
* initialization and shutdown of the driver and outputs.
......@@ -41,6 +43,7 @@ public class AspectSensor extends AbstractSensorModule<AspectConfig> {
DailyFileOutput dailyFileOutput;
AdjudicationControl adjudicationControl;
public int laneID;
public int primaryDeviceAddress = -1;
// String laneName;
@Override
......@@ -101,9 +104,26 @@ public class AspectSensor extends AbstractSensorModule<AspectConfig> {
commProvider = (IModbusTCPCommProvider<?>) commModule;
commProvider.start();
var connection = commProvider.getConnection();
var deviceDescriptionRegisters = new DeviceDescriptionRegisters(connection);
deviceDescriptionRegisters.readRegisters(1);
getLogger().info("Attempting device search...");
for(int i = config.commSettings.protocol.addressRange.from; i < config.commSettings.protocol.addressRange.to; i++) {
try{
getLogger().info("Scanning for devices. Current address: #{}", i);
deviceDescriptionRegisters.readRegisters(i);
primaryDeviceAddress = i;
getLogger().info("Found device at address #" + i);
break;
} catch (Exception e) {
if(primaryDeviceAddress != -1 || i == config.commSettings.protocol.addressRange.to)
throw new ConnectException("No devices found");
}
}
deviceDescriptionRegisters.readRegisters(primaryDeviceAddress);
} catch (Exception e) {
commProvider = null;
throw new SensorHubException("Error while initializing communications ", e);
......@@ -111,7 +131,7 @@ public class AspectSensor extends AbstractSensorModule<AspectConfig> {
}
// Start message handler
messageHandler = new MessageHandler(commProvider.getConnection(), gammaOutput, neutronOutput, occupancyOutput, speedOutput, dailyFileOutput);
messageHandler = new MessageHandler(commProvider.getConnection(), gammaOutput, neutronOutput, occupancyOutput, speedOutput, dailyFileOutput, primaryDeviceAddress);
messageHandler.start();
}
......
......@@ -39,14 +39,16 @@ public class MessageHandler implements Runnable {
LinkedList<Integer> occupancyNeutronBatch;
int maxNeutron = 0;
int maxGamma = 0;
int deviceAddress = -1;
public MessageHandler(TCPMasterConnection tcpMasterConnection, GammaOutput gammaOutput, NeutronOutput neutronOutput, OccupancyOutput occupancyOutput, SpeedOutput speedOutput, DailyFileOutput dailyFileOutput) {
public MessageHandler(TCPMasterConnection tcpMasterConnection, GammaOutput gammaOutput, NeutronOutput neutronOutput, OccupancyOutput occupancyOutput, SpeedOutput speedOutput, DailyFileOutput dailyFileOutput, int deviceAddress) {
this.tcpMasterConnection = tcpMasterConnection;
this.gammaOutput = gammaOutput;
this.neutronOutput = neutronOutput;
this.occupancyOutput = occupancyOutput;
this.speedOutput = speedOutput;
this.dailyFileOutput = dailyFileOutput;
this.deviceAddress = deviceAddress;
occupancyGammaBatch = new LinkedList<>();
occupancyNeutronBatch = new LinkedList<>();
......@@ -66,12 +68,12 @@ public class MessageHandler implements Runnable {
public void run() {
try {
DeviceDescriptionRegisters deviceDescriptionRegisters = new DeviceDescriptionRegisters(tcpMasterConnection);
deviceDescriptionRegisters.readRegisters(1);
deviceDescriptionRegisters.readRegisters(deviceAddress);
MonitorRegisters monitorRegisters = new MonitorRegisters(tcpMasterConnection, deviceDescriptionRegisters.getMonitorRegistersBaseAddress(), deviceDescriptionRegisters.getMonitorRegistersNumberOfRegisters());
while (!Thread.currentThread().isInterrupted()) {
monitorRegisters.readRegisters(1);
monitorRegisters.readRegisters(deviceAddress);
double timestamp = System.currentTimeMillis() / 1000d;
dailyFileOutput.getDailyFile(monitorRegisters);
......@@ -85,7 +87,6 @@ public class MessageHandler implements Runnable {
if (checkOccupancyRecord(monitorRegisters, timestamp)) {
occupancyOutput.setData(monitorRegisters, timestamp, startTime, endTime, gammaAlarm, neutronAlarm, maxGamma, maxNeutron);
}
System.out.println("monitor registers: "+ monitorRegisters);
sleep(500);
}
} catch (Exception e) {
......
package com.botts.impl.sensor.aspect.comm;
import com.ghgande.j2mod.modbus.io.ModbusTCPTransaction;
import com.ghgande.j2mod.modbus.msg.ReadMultipleRegistersRequest;
import com.ghgande.j2mod.modbus.net.TCPMasterConnection;
import org.sensorhub.api.common.SensorHubException;
import org.sensorhub.impl.module.AbstractModule;
......@@ -28,9 +30,10 @@ public class ModbusTCPCommProvider extends AbstractModule<ModbusTCPCommProviderC
tcpMasterConnection = new TCPMasterConnection(address);
tcpMasterConnection.setPort(config.remotePort);
tcpMasterConnection.setTimeout(config.connectionTimeout);
System.out.println("Attempting TCP Modbus connection");
getLogger().info("Attempting TCP connection");
tcpMasterConnection.connect();
System.out.println("TCP Modbus connection established");
getLogger().info("TCP connection established");
break;
} catch (Exception e) {
if(++count >= retryAttempts)
......
......@@ -38,4 +38,18 @@ public class ModbusTCPConfig implements ICommConfig {
@Required
public int connectionTimeout = 5000;
@DisplayInfo(label = "Find device within address range")
@Required
public AddressRange addressRange = new AddressRange();
public static class AddressRange {
@DisplayInfo(label = "From")
@Required
public int from = 1;
@DisplayInfo(label = "To")
@Required
public int to = 32;
}
}
......@@ -35,7 +35,6 @@ public class DeviceDescriptionRegisters {
monitorRegistersIdentifier = response.getRegisterValue(2);
monitorRegistersBaseAddress = response.getRegisterValue(3);
monitorRegistersNumberOfRegisters = response.getRegisterValue(4);
System.out.println(toString());
}
public String toString() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment