Files
POC-Java/src/main/java/com/henrypump/poc/POC.java
Patrick McDonagh 1771df0730 WellTest class no longer depends on Well class
This will allow it to be run from another thread if necessary
2017-02-07 19:09:32 -06:00

176 lines
5.9 KiB
Java

package com.henrypump.poc;
/**
* Created by patrickjmcd on 2/1/17.
* POC Class
*
*/
import java.awt.*;
import java.awt.event.*;
import java.time.Instant;
import java.util.Date;
public class POC implements Runnable{
protected Well thisWell;
private int simLoops;
private Thread t;
private DigitalIn startBtn, stopBtn;
private DigitalOut led2, led3, led4, led5;
private DigitalOut runIndicator;
private boolean ioEnabled;
private boolean guiEnabled;
POC(String wellName, String wellSetupJsonFile, int simLoops){
ioEnabled = true;
guiEnabled = false;
thisWell = new Well(wellName, 99, 99, 7);
thisWell.parseJSONFile(wellSetupJsonFile);
thisWell.printTapers();
this.simLoops = simLoops;
// IO
startBtn = new DigitalIn(8);
stopBtn = new DigitalIn(9);
led2 = new DigitalOut(2, 0);
led3 = new DigitalOut(3, 0);
led4 = new DigitalOut(4, 0);
led5 = new DigitalOut(5, 0);
runIndicator = new DigitalOut(6,0);
String headlessProp = !guiEnabled ? "true" : "false";
System.setProperty("java.awt.headless", headlessProp);
System.out.println(java.awt.GraphicsEnvironment.isHeadless());
}
POC(String wellName, String wellSetupJsonFile, String simFileName, boolean ioEnabled, int simLoops){
this.ioEnabled = ioEnabled;
if (this.ioEnabled) {
guiEnabled = false;
thisWell = new Well(wellName, simFileName,99, 99, 7);
// IO
startBtn = new DigitalIn(8);
stopBtn = new DigitalIn(9);
led2 = new DigitalOut(2, 0);
led3 = new DigitalOut(3, 0);
led4 = new DigitalOut(4, 0);
led5 = new DigitalOut(5, 0);
runIndicator = new DigitalOut(6,0);
} else {
thisWell = new Well(wellName, simFileName,99, 99, 99);
guiEnabled = true;
// IO
startBtn = new DigitalIn(99);
stopBtn = new DigitalIn(99);
led2 = new DigitalOut(99, 0);
led3 = new DigitalOut(99, 0);
led4 = new DigitalOut(99, 0);
led5 = new DigitalOut(99, 0);
runIndicator = new DigitalOut(99,0);
}
String headlessProp = !guiEnabled ? "true" : "false";
System.setProperty("java.awt.headless", headlessProp);
System.out.println(java.awt.GraphicsEnvironment.isHeadless());
thisWell.parseJSONFile(wellSetupJsonFile);
thisWell.printTapers();
this.simLoops = simLoops;
}
public void allOutputsOff(){
led2.write(0,true);
led3.write(0,true);
led4.write(0,true);
led5.write(0,true);
}
public void run(){
int loopCounter = 0, loopLimit = simLoops, led2out, led3out, led4out,led5out;
double pos;
boolean newWellTest = true;
long sleepMilliseconds = (long) (thisWell.getDt() * 1000);
thisWell.setupFluidRatio(0.50, 0.50, 1.12);
thisWell.checkSafeties();
while (true) {
while (loopCounter < loopLimit && (thisWell.getRunStatus() == Well.RUNSTATUS_RUNNING || thisWell.getRunStatus() == Well.RUNSTATUS_STARTING)) {
for (int i = 0; i <= thisWell.sim.getLastFilledIndex(); i++) {
if (startBtn.read() == 1) thisWell.start("startbutton");
if (stopBtn.read() == 1) thisWell.stop("stopbutton");
if (startBtn.read() == 1 && stopBtn.read() == 1) {
System.exit(0);
}
thisWell.eval(i);
pos = thisWell.getCurrentSurfacePosition();
led2.write(pos > 20.0 ? 1 : 0);
led3.write(pos > 40.0 ? 1 : 0);
led4.write(pos > 60.0 ? 1 : 0);
led5.write(pos > 80.0 ? 1 : 0);
runIndicator.write(thisWell.getRunStatus()==Well.RUNSTATUS_RUNNING ? 1 : 0);
try {
Thread.sleep(sleepMilliseconds);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
loopCounter++;
}
if (newWellTest){
System.out.println("Previous kFactor = " + thisWell.db.getLatestKFactor());
Date nowDate = Date.from(Instant.now());
double lastProductionMeasured = thisWell.db.getPreviousDailyTotal(nowDate);
thisWell.wellTest = new WellTest(nowDate, 24.0, .35, .20, .15, 1.25, lastProductionMeasured);
thisWell.db.newWellTest(thisWell.wellTest);
System.out.println("Well Test @ " + nowDate.toString());
System.out.println("kFactor: " + thisWell.wellTest.getkFactor());
System.out.println("oilRatio: " + thisWell.wellTest.getOilRatio());
System.out.println("waterRatio: " + thisWell.wellTest.getWaterRatio());
System.out.println("gasRatio: " + thisWell.wellTest.getGasMCFRatio());
newWellTest = false;
System.out.println("Last kFactor = " + thisWell.db.getLatestKFactor());
}
if (startBtn.read() == 1) thisWell.start("startbutton");
if (stopBtn.read() == 1) thisWell.stop("stopbutton");
if (startBtn.read() == 1 && stopBtn.read() == 1) {
System.exit(0);
}
led2.write(0);
led3.write(0);
led4.write(0);
led5.write(0);
}
}
public void start () {
System.out.println("Starting POC Thread");
if (t == null) {
t = new Thread (this, "POC-Thread");
t.start ();
}
}
public static void main(String[] args) {
final POC thisPOC = new POC("Barney", args[0], args[1], true, 100);
thisPOC.start();
}
}