Increments driver version to 2, adds configuration and display for Downhole parameters. IPP-141

This commit is contained in:
Patrick McDonagh
2016-11-07 20:59:15 -06:00
parent a179bf9819
commit 85f0afe35f
5 changed files with 2274 additions and 1809 deletions

View File

@@ -52,7 +52,7 @@
<form class="form-inline">
<div class="form-group">
<input class="form-control val_box"
type="number"
type="number"
step="any"
value="<%=channels['advvfdipp.flowsetpoint'].value %>">
</div>
@@ -94,7 +94,7 @@
<form class="form-inline">
<div class="form-group">
<input class="form-control val_box"
type="number"
type="number"
step="any"
value="<%=channels['advvfdipp.fluidlevelsetpoint'].value %>">
</div>
@@ -136,7 +136,7 @@
<form class="form-inline">
<div class="form-group">
<input class="form-control val_box"
type="number"
type="number"
step="any"
value="<%=channels['advvfdipp.tubingpressuresetpoint'].value %>">
</div>
@@ -178,7 +178,7 @@
<form class="form-inline">
<div class="form-group">
<input class="form-control val_box"
type="number"
type="number"
step="any"
value="<%=channels['advvfdipp.manualfrequencysetpoint'].value %>">
</div>
@@ -212,12 +212,126 @@
</div>
<div class="row row-flex">
<div class="col-xs-12 text-center">
<h1>PID Settings</h1>
<div class='col-xs-6 text-center box-me'>
<h2>Pressure Settings</h2>
<div class="gauge-box">
<table class="table">
<tbody>
<tr>
<td>Shutdown Limit</td>
<td>
<form class="form-inline">
<div class="form-group">
<input class="form-control val_box"
type="number"
step="any"
value="<%=channels['advvfdipp.pressureshutdownlimit'].value %>">
</div>
<a href="#"
data-refreshpause="3"
data-command=""
data-staticsend="[{'com':'1','values':[ ['AIn_IntakePressure.PSet_LoLim',<%=channels['advvfdipp.pressureshutdownlimit'].value %>] ] }]"
data-channelId="<%= channels['advvfdipp.modbuswrite'].channelId %>"
data-techname="<%=channels['advvfdipp.modbuswrite'].techName %>"
data-name="<%= channels['advvfdipp.modbuswrite'].name%>"
data-nodechannelcurrentId="<%= channels['advvfdipp.modbuswrite'].nodechannelcurrentId %>"
id="<%= channels['advvfdipp.modbuswrite'].channelId %>"
class="btn btn-large btn-theme animated confirmstatic">
<i class="material-icons">send</i></a>
</form>
</td>
</tr>
<tr>
<td>Startup Limit</td>
<td>
<form class="form-inline">
<div class="form-group">
<input class="form-control val_box"
type="number"
step="any"
value="<%=channels['advvfdipp.pressurestartuplimit'].value %>">
</div>
<a href="#"
data-refreshpause="3"
data-command=""
data-staticsend="[{'com':'1','values':[ ['AIn_IntakePressure.PSet_HiLim',<%=channels['advvfdipp.pressurestartuplimit'].value %>] ] }]"
data-channelId="<%= channels['advvfdipp.modbuswrite'].channelId %>"
data-techname="<%=channels['advvfdipp.modbuswrite'].techName %>"
data-name="<%= channels['advvfdipp.modbuswrite'].name%>"
data-nodechannelcurrentId="<%= channels['advvfdipp.modbuswrite'].nodechannelcurrentId %>"
id="<%= channels['advvfdipp.modbuswrite'].channelId %>"
class="btn btn-large btn-theme animated confirmstatic">
<i class="material-icons">send</i></a>
</form>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class='col-xs-6 text-center box-me'>
<h2>Temperature Settings</h2>
<div class="gauge-box">
<table class="table">
<tbody>
<tr>
<td>Shutdown Limit</td>
<td>
<form class="form-inline">
<div class="form-group">
<input class="form-control val_box"
type="number"
step="any"
value="<%=channels['advvfdipp.temperatureshutdownlimit'].value %>">
</div>
<a href="#"
data-refreshpause="3"
data-command=""
data-staticsend="[{'com':'1','values':[ ['AIn_IntakeTemperature.PSet_HiLim',<%=channels['advvfdipp.temperatureshutdownlimit'].value %>] ] }]"
data-channelId="<%= channels['advvfdipp.modbuswrite'].channelId %>"
data-techname="<%=channels['advvfdipp.modbuswrite'].techName %>"
data-name="<%= channels['advvfdipp.modbuswrite'].name%>"
data-nodechannelcurrentId="<%= channels['advvfdipp.modbuswrite'].nodechannelcurrentId %>"
id="<%= channels['advvfdipp.modbuswrite'].channelId %>"
class="btn btn-large btn-theme animated confirmstatic">
<i class="material-icons">send</i></a>
</form>
</td>
</tr>
<tr>
<td>Startup Limit</td>
<td>
<form class="form-inline">
<div class="form-group">
<input class="form-control val_box"
type="number"
step="any"
value="<%=channels['advvfdipp.temperaturestartuplimit'].value %>">
</div>
<a href="#"
data-refreshpause="3"
data-command=""
data-staticsend="[{'com':'1','values':[ ['AIn_IntakeTemperature.PSet_LoLim',<%=channels['advvfdipp.temperaturestartuplimit'].value %>] ] }]"
data-channelId="<%= channels['advvfdipp.modbuswrite'].channelId %>"
data-techname="<%=channels['advvfdipp.modbuswrite'].techName %>"
data-name="<%= channels['advvfdipp.modbuswrite'].name%>"
data-nodechannelcurrentId="<%= channels['advvfdipp.modbuswrite'].nodechannelcurrentId %>"
id="<%= channels['advvfdipp.modbuswrite'].channelId %>"
class="btn btn-large btn-theme animated confirmstatic">
<i class="material-icons">send</i></a>
</form>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<script>

View File

@@ -1,80 +1,124 @@
<% if (channels["ipp.downholetoolenabled"].value == 0){ %>
<div class="row">
<div class="well mar15 text-center">
<h1>THE DOWNHOLE SENSOR IS DISABLED</h1>
<h1>IT CAN BE ENABLED FROM THE CONFIGURATION SCREEN</h1>
</div>
</div>
<% } %>
<div class="text-center"><h1>LIVE VALUES</h1></div>
<div class='row row-flex'>
<div class='col-xs-4 text-center box-me'>
<h2>Intake Pressure</h2>
<div class="gauge-box">
<div data-labelheight="10" style="height: 170px; background: transparent; margin: 0 auto;" id="gauge-dhintakepressure" data-chart="solidgauge" data-nodename="ipp.dhintakepressure" data-units="PSI" data-min="0" data-max="<%= channels["ipp.dhpsirating"].value %>" data-colors="0.1:#DF5353,0.5:#DDDF0D,0.9:#55BF3B" data-valuefontsize="18px"></div>
<span data-timeupdate="dhintakepressure"><%= channels["ipp.dhintakepressure"].timestamp %></span>
<div data-labelheight="10"
style="height: 170px; background: transparent; margin: 0 auto;"
id="gauge-intakepressure"
data-chart="solidgauge"
data-nodename="advvfdipp.intakepressure"
data-units="PSI"
data-min="0"
data-max="1000"
data-decimalplaces="2"
data-colors="0.1:#DF5353,0.5:#DDDF0D,0.9:#55BF3B"
data-valuefontsize="18px">
</div>
<span data-timeupdate="intakepressure"><%= channels["advvfdipp.intakepressure"].timestamp %></span>
</div>
</div>
<div class='col-xs-4 text-center box-me'>
<h2>Fluid Level</h2>
<div class="gauge-box">
<div data-labelheight="10" style="height: 170px; background: transparent; margin: 0 auto;" id="gauge-dhfluidlevel" data-chart="solidgauge" data-nodename="ipp.dhfluidlevel" data-units="ft." data-min="0" data-max="1000" data-colors="0.1:#DF5353,0.5:#DDDF0D,0.9:#55BF3B" data-valuefontsize="18px"></div>
<span data-timeupdate="dhfluidlevel"><%= channels["ipp.dhfluidlevel"].timestamp %></span>
<div
data-labelheight="10"
style="height: 170px; background: transparent; margin: 0 auto;"
id="gauge-fluidlevel"
data-chart="solidgauge"
data-nodename="advvfdipp.fluidlevel"
data-units="ft."
data-min="0"
data-max="500"
data-decimalplaces="2"
data-colors="0.1:#DF5353,0.5:#DDDF0D,0.9:#55BF3B"
data-valuefontsize="18px">
</div>
<span data-timeupdate="fluidlevel"><%= channels["advvfdipp.fluidlevel"].timestamp %></span>
</div>
</div>
<div class='col-xs-4 text-center box-me'>
<h2>Intake Temperature</h2>
<div class="gauge-box">
<div data-labelheight="10" style="height: 170px; background: transparent; margin: 0 auto;" id="gauge-dhintaketemperature" data-chart="solidgauge" data-nodename="ipp.dhintaketemperature" data-units="&deg;F" data-min="0" data-max="200" data-colors="0.1:#DF5353,0.5:#DDDF0D,0.9:#55BF3B" data-valuefontsize="18px"></div>
<span data-timeupdate="dhintaketemperature"><%= channels["ipp.dhintaketemperature"].timestamp %></span>
<div
data-labelheight="10"
style="height: 170px; background: transparent; margin: 0 auto;"
id="gauge-intaketemperature"
data-chart="solidgauge"
data-nodename="advvfdipp.intaketemperature"
data-units="&deg;F"
data-min="0"
data-max="200"
data-decimalplaces="2"
data-colors="0.1:#DF5353,0.5:#DDDF0D,0.9:#55BF3B"
data-valuefontsize="18px">
</div>
<span data-timeupdate="intaketemperature"><%= channels["advvfdipp.intaketemperature"].timestamp %></span>
</div>
</div>
<div class='col-xs-4 text-center box-me'>
<h2>Instrument Status</h2>
<div class="gauge-box">
<h1 data-valueupdate="dhdownholestatusint">
<% if(channels["ipp.dhdownholestatusint"].value == 0) { %>
<span class="label label-success">OK</span>
<% } else if (channels["ipp.dhdownholestatusint"].value == 1){ %>
<span class="label label-warning">Connecting...</span>
<% } else if (channels["ipp.dhdownholestatusint"].value == 2){ %>
<span class="label label-danger">Open Circuit</span>
<% } else if (channels["ipp.dhdownholestatusint"].value == 3){ %>
<span class="label label-danger">Shorted</span>
<% } else if (channels["ipp.dhdownholestatusint"].value == 4){ %>
<span class="label label-danger">Cannot Decode</span>
<% } %>
</h1>
</div>
</div>
<div class='col-xs-4 text-center box-me'>
<h2>MAX VALUES</h2>
<h2>Pressure Settings</h2>
<div class="gauge-box">
<table class="table">
<tbody>
<tr>
<td>Max Pressure (Startup)</td>
<td><%= channels["ipp.dhmaxintakepressurestartup"].value %></td>
<td>Shutdown Limit</td>
<td><%= channels["advvfdipp.pressureshutdownlimit"].value %> PSI</td>
</tr>
<tr>
<td>Max Pressure (Lifetime)</td>
<td><%= channels["ipp.dhmaxintakepressureforever"].value %></td>
<td>Startup Limit</td>
<td><%= channels["advvfdipp.pressurestartuplimit"].value %> PSI</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class='col-xs-4 text-center box-me'>
<h2>Temperature Settings</h2>
<div class="gauge-box">
<table class="table">
<tbody>
<tr>
<td>Shutdown Limit</td>
<td><%= channels["advvfdipp.temperatureshutdownlimit"].value %> &deg;F</td>
</tr>
<tr>
<td>Max Temp. (Startup)</td>
<td><%= channels["ipp.dhmaxintaketemperaturestartup"].value %></td>
<td>Startup Limit</td>
<td><%= channels["advvfdipp.temperaturestartuplimit"].value %> &deg;F</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class='col-xs-4 text-center box-me'>
<h2>Instrument Settings</h2>
<div class="gauge-box">
<table class="table">
<tbody>
<tr>
<td>Comm. Status</td>
<td><%= channels["advvfdipp.downholesensorstatus"].value %></td>
</tr>
<tr>
<td>Max Temp. (Lifetime)</td>
<td><%= channels["ipp.dhmaxintaketemperatureforever"].value %></td>
<td>Specific Gravity</td>
<td><%= channels["advvfdipp.fluidspecificgravity"].value %> &deg;F</td>
</tr>
<tr>
<td>Sensor Height</td>
<td><%= channels["advvfdipp.sensorheight"].value %> ft.</td>
</tr>
</tbody>
@@ -85,137 +129,20 @@
<div class="text-center"><h1>TRENDS</h1></div>
<div class="row box-me">
<div class='col-xs-12' style="padding-top: 1em; margin-bottom: 1em;">
<div class="input-daterange input-group" id="datepicker">
<input data-chartid="dynamicChart" id="fromDate" data-daysofhistory="7" type="text" class="form-control" name="start">
<span class="input-group-addon">to</span>
<input class="form-control" data-chartid="dynamicChart" id="toDate" type="text" name="end">
<span class='input-group-btn'>
<a href="#!" data-chartid="dynamicChart" data-otherchartids="statusTimeline" class="btn chart-update btn-theme">Run</a>
</span>
</div>
</div>
<hr>
<div class='clearfix col-xs-12' style='height: 300px' id="dynamicChart" data-chart="dynamicchart" data-daysofhistory="7" data-chartlabel="Data" data-ylabel="" data-xlabel="Date" data-units="" data-channelnames="ipp.dhintakepressure,ipp.dhintaketemperature,ipp.dhmaxintakepressureforever,ipp.dhmaxintakepressurestartup,ipp.dhmaxintaketemperaturestartup,ipp.dhmaxintaketemperatureforever"></div>
<div class='col-xs-12' style="padding-top: 1em; margin-bottom: 1em;">
<div class="input-daterange input-group" id="datepicker">
<input data-chartid="dynamicChart" id="fromDate" data-daysofhistory="7" type="text" class="form-control" name="start">
<span class="input-group-addon">to</span>
<input class="form-control" data-chartid="dynamicChart" id="toDate" type="text" name="end">
<span class='input-group-btn'>
<a href="#!" data-chartid="dynamicChart" data-otherchartids="statusTimeline" class="btn chart-update btn-theme">Run</a>
</span>
</div>
</div>
<hr>
<div class='clearfix col-xs-12' style='height: 300px' id="dynamicChart" data-chart="dynamicchart" data-daysofhistory="7" data-chartlabel="Data" data-ylabel="" data-xlabel="Date" data-units="" data-channelnames="advvfdipp.intakepressure,advvfdipp.intaketemperature,advvfdipp.fluidlevel,advvfdipp.fluidspecificgravity"></div>
</div>
<div class="text-center"><h1>CONFIGURATION</h1></div>
<div class="row row-flex">
<div class='col-xs-4 text-center box-me'>
<h2>Pressure Trip</h2>
<div class="gauge-box">
<table class="table">
<tbody>
<tr>
<td>Pressure Shutdown Enabled</td>
<td>
<% if (channels["ipp.pressureshutdownenabled"].value == 1){ %>
<span class="label label-success">True</span>
<% } else { %>
<span class="label label-warning">False</span>
<% } %>
</td>
</tr>
<tr>
<td>Pressure Shutdown Limit</td>
<td><%= channels["ipp.pressureshutdown"].value %> PSI</td>
</tr>
<tr>
<td>Pressure Restart Enabled</td>
<td>
<% if (channels["ipp.pressurestartupenabled"].value == 1){ %>
<span class="label label-success">True</span>
<% } else { %>
<span class="label label-warning">False</span>
<% } %>
</td>
</tr>
<tr>
<td>Pressure Startup Limit</td>
<td><%= channels["ipp.pressurestartup"].value %> PSI</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class='col-xs-4 text-center box-me'>
<h2>Temperature Trip</h2>
<div class="gauge-box">
<table class="table">
<tbody>
<tr>
<td>Temp. Shutdown Enabled</td>
<td>
<% if (channels["ipp.tempshutdownenabled"].value == 1){ %>
<span class="label label-success">True</span>
<% } else { %>
<span class="label label-warning">False</span>
<% } %>
</td>
</tr>
<tr>
<td>Temp. Shutdown Limit</td>
<td><%= channels["ipp.tempshutdown"].value %> &deg;F</td>
</tr>
<tr>
<td>Temp. Restart Enabled</td>
<td>
<% if (channels["ipp.tempstartupenabled"].value == 1){ %>
<span class="label label-success">True</span>
<% } else { %>
<span class="label label-warning">False</span>
<% } %>
</td>
</tr>
<tr>
<td>Temp. Startup Limit</td>
<td><%= channels["ipp.tempstartup"].value %> &deg;F</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class='col-xs-4 text-center box-me'>
<h2>Sensor Info.</h2>
<div class="gauge-box">
<table class="table">
<tbody>
<tr>
<td>Number of Channels</td>
<td><%= channels["ipp.dhnumchannels"].value %></td>
</tr>
<tr>
<td>PSI Rating</td>
<td><%= channels["ipp.dhpsirating"].value %> PSI</td>
</tr>
<tr>
<td>Tool Type</td>
<td><%= channels["ipp.dhtooltype"].value %></td>
</tr>
<tr>
<td>Tool Voltage</td>
<td><%= channels["ipp.dhtoolvoltage"].value %> V</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<style>
.box-me {

View File

@@ -1,12 +1,8 @@
#!/usr/bin/python
import threading
import time
from device_base import deviceBase
from channel import Channel
addr = '192.168.1.10'
channels = {}
class start(threading.Thread, deviceBase):
def __init__(self, name=None, number=None, mac=None, Q=None, mcu=None, companyId=None, offset=None, mqtt=None, Nodes=None):
@@ -14,8 +10,7 @@ class start(threading.Thread, deviceBase):
deviceBase.__init__(self, name=name, number=number, mac=mac, Q=Q, mcu=mcu, companyId=companyId, offset=offset, mqtt=mqtt, Nodes=Nodes)
self.daemon = True
self.version = "1"
self.device_address = addr
self.version = "2"
self.finished = threading.Event()
threading.Thread.start(self)
@@ -26,4 +21,3 @@ class start(threading.Thread, deviceBase):
def run(self):
pass

View File

@@ -3,7 +3,7 @@
"driverFileName":"advvfdipp.py",
"deviceName":"advvfdipp",
"driverId":"0100",
"releaseVersion":"1",
"releaseVersion":"2",
"files": {
"file1":"advvfdipp.py",
"file2":"modbusMap.p" }

File diff suppressed because it is too large Load Diff