Increments driver version to 2, adds configuration and display for Downhole parameters. IPP-141
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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="°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="°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 %> °F</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Max Temp. (Startup)</td>
|
||||
<td><%= channels["ipp.dhmaxintaketemperaturestartup"].value %></td>
|
||||
<td>Startup Limit</td>
|
||||
<td><%= channels["advvfdipp.temperaturestartuplimit"].value %> °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 %> °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 %> °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 %> °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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"driverFileName":"advvfdipp.py",
|
||||
"deviceName":"advvfdipp",
|
||||
"driverId":"0100",
|
||||
"releaseVersion":"1",
|
||||
"releaseVersion":"2",
|
||||
"files": {
|
||||
"file1":"advvfdipp.py",
|
||||
"file2":"modbusMap.p" }
|
||||
|
||||
3676
POCloud/modbusMap.p
3676
POCloud/modbusMap.p
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user