Updated files to work better with SQLite
This commit is contained in:
@@ -40,7 +40,8 @@ CREATE TABLE IF NOT EXISTS Well_Test (
|
||||
api_gravity_oil REAL,
|
||||
sg_oil REAL,
|
||||
sg_water REAL,
|
||||
test_hours REAL
|
||||
test_hours REAL,
|
||||
deleted INTEGER DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS config (
|
||||
@@ -76,9 +77,11 @@ INSERT INTO note_types (id, type) VALUES ('4', 'Other');
|
||||
CREATE TABLE IF NOT EXISTS fluid_shot(
|
||||
id INTEGER PRIMARY KEY,
|
||||
shot_datetime TIMESTAMP,
|
||||
taken_by TEXT,
|
||||
pump_intake_pressure REAL,
|
||||
fluid_gradient REAL,
|
||||
friction REAL
|
||||
friction REAL,
|
||||
deleted INTEGER DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS card_history(
|
||||
|
||||
@@ -311,119 +311,122 @@ def main():
|
||||
#############
|
||||
# CARD DATA #
|
||||
#############
|
||||
try:
|
||||
|
||||
EOS = readTag(PLC_IP_ADDRESS, "End_Of_Stroke")[0]
|
||||
stroke_tags['card_id'].read(False)
|
||||
EOS = readTag(PLC_IP_ADDRESS, "End_Of_Stroke")[0]
|
||||
stroke_tags['card_id'].read(False)
|
||||
|
||||
if (EOS and not (last_stroke == stroke_tags['card_id'].value)):
|
||||
sData = {}
|
||||
last_stroke = stroke_tags['card_id'].value
|
||||
stroke_time = time.time()
|
||||
dt = datetime.fromtimestamp(stroke_time)
|
||||
sData['localtime'] = dt
|
||||
sData['stroke_time'] = dt
|
||||
sData['utctime'] = datetime.utcfromtimestamp(stroke_time)
|
||||
for t in stroke_tags:
|
||||
stroke_tags[t].read(True)
|
||||
if (EOS and not (last_stroke == stroke_tags['card_id'].value)):
|
||||
sData = {}
|
||||
last_stroke = stroke_tags['card_id'].value
|
||||
stroke_time = time.time()
|
||||
dt = datetime.fromtimestamp(stroke_time)
|
||||
sData['localtime'] = dt
|
||||
sData['stroke_time'] = dt
|
||||
sData['utctime'] = datetime.utcfromtimestamp(stroke_time)
|
||||
for t in stroke_tags:
|
||||
stroke_tags[t].read(True)
|
||||
|
||||
[sData['Surface_Position'], sData['Surface_Load'], sData['Downhole_Position'], sData['Downhole_Load']] = readPoints()
|
||||
[sData['Surface_Position'], sData['Surface_Load'], sData['Downhole_Position'], sData['Downhole_Load']] = readPoints()
|
||||
|
||||
# st = datetime.strftime(dt, "%Y%m%d_%H%M%S")
|
||||
date = datetime.strftime(dt, "%Y%m%d")
|
||||
if not date == last_date:
|
||||
checkDateInDB(date)
|
||||
last_date = date
|
||||
# st = datetime.strftime(dt, "%Y%m%d_%H%M%S")
|
||||
date = datetime.strftime(dt, "%Y%m%d")
|
||||
if not date == last_date:
|
||||
checkDateInDB(date)
|
||||
last_date = date
|
||||
|
||||
sData["card_type"] = stroke_tags['card_type'].value
|
||||
sData["card_id"] = stroke_tags['card_id'].value
|
||||
sData['sp_string'] = ', '.join(map(str, sData['Surface_Position']))
|
||||
sData['sl_string'] = ', '.join(map(str, sData['Surface_Load']))
|
||||
sData['dp_string'] = ', '.join(map(str, sData['Downhole_Position']))
|
||||
sData['dl_string'] = ', '.join(map(str, sData['Downhole_Load']))
|
||||
sData["card_type"] = stroke_tags['card_type'].value
|
||||
sData["card_id"] = stroke_tags['card_id'].value
|
||||
sData['sp_string'] = ', '.join(map(str, sData['Surface_Position']))
|
||||
sData['sl_string'] = ', '.join(map(str, sData['Surface_Load']))
|
||||
sData['dp_string'] = ', '.join(map(str, sData['Downhole_Position']))
|
||||
sData['dl_string'] = ', '.join(map(str, sData['Downhole_Load']))
|
||||
|
||||
insert_query = "INSERT INTO card_history (Card_ID, Card_Type, Stroke_Time, Surface_Position, Surface_Load, Downhole_Position, Downhole_Load) VALUES (:card_id, :card_type, :stroke_time, :sp_string, :sl_string, :dp_string, :dl_string)"
|
||||
with con:
|
||||
cur = con.cursor()
|
||||
cur.execute(insert_query, sData)
|
||||
con.commit()
|
||||
print "CARD NUMBER " + str(sData["card_id"]) + " READ!"
|
||||
insert_query = "INSERT INTO card_history (Card_ID, Card_Type, Stroke_Time, Surface_Position, Surface_Load, Downhole_Position, Downhole_Load) VALUES (:card_id, :card_type, :stroke_time, :sp_string, :sl_string, :dp_string, :dl_string)"
|
||||
with con:
|
||||
cur = con.cursor()
|
||||
cur.execute(insert_query, sData)
|
||||
con.commit()
|
||||
print "CARD NUMBER " + str(sData["card_id"]) + " READ!"
|
||||
|
||||
###################
|
||||
# HISTORICAL DATA #
|
||||
###################
|
||||
###################
|
||||
# HISTORICAL DATA #
|
||||
###################
|
||||
|
||||
for hist in history_tags:
|
||||
h = history_tags[hist]
|
||||
if h.read(False):
|
||||
h.sendToDB()
|
||||
h.last_send_time = time.time()
|
||||
for hist in history_tags:
|
||||
h = history_tags[hist]
|
||||
if h.read(False):
|
||||
h.sendToDB()
|
||||
h.last_send_time = time.time()
|
||||
|
||||
##############
|
||||
# TAPER DATA #
|
||||
##############
|
||||
##############
|
||||
# TAPER DATA #
|
||||
##############
|
||||
|
||||
update_taper = readTag(PLC_IP_ADDRESS, "Write_Tapers")[0] > 0
|
||||
if (update_taper == 0):
|
||||
if read_tapers:
|
||||
read_tapers = False
|
||||
print "Update Tapers = False"
|
||||
update_taper = readTag(PLC_IP_ADDRESS, "Write_Tapers")[0] > 0
|
||||
if (update_taper == 0):
|
||||
if read_tapers:
|
||||
read_tapers = False
|
||||
print "Update Tapers = False"
|
||||
|
||||
if (update_taper and (not read_tapers)):
|
||||
print "reading taper file"
|
||||
read_tapers = evalTapers()
|
||||
if (update_taper and (not read_tapers)):
|
||||
print "reading taper file"
|
||||
read_tapers = evalTapers()
|
||||
|
||||
##################
|
||||
# GAUGE OFF DATA #
|
||||
##################
|
||||
gauge_off = readTag(PLC_IP_ADDRESS, "Gauge_Off_Command")[0]
|
||||
if (gauge_off == 0):
|
||||
if already_gauged_off:
|
||||
already_gauged_off = False
|
||||
print "Already gauged off... Setting gauge_off to False"
|
||||
##################
|
||||
# GAUGE OFF DATA #
|
||||
##################
|
||||
gauge_off = readTag(PLC_IP_ADDRESS, "Gauge_Off_Command")[0]
|
||||
if (gauge_off == 0):
|
||||
if already_gauged_off:
|
||||
already_gauged_off = False
|
||||
print "Already gauged off... Setting gauge_off to False"
|
||||
|
||||
if (gauge_off and (not already_gauged_off)):
|
||||
print "Gauging off..."
|
||||
for goff in gaugeoff_tags:
|
||||
g = gaugeoff_tags[goff]
|
||||
g.read(True)
|
||||
if (gauge_off and (not already_gauged_off)):
|
||||
print "Gauging off..."
|
||||
for goff in gaugeoff_tags:
|
||||
g = gaugeoff_tags[goff]
|
||||
g.read(True)
|
||||
|
||||
gauge_date = datetime(year=gaugeoff_tags['year'].value, month=gaugeoff_tags['month'].value, day=gaugeoff_tags['day'].value, hour=gaugeoff_tags['hour'].value, minute=gaugeoff_tags['min'].value, second=gaugeoff_tags['sec'].value)
|
||||
gauge_date = datetime(year=gaugeoff_tags['year'].value, month=gaugeoff_tags['month'].value, day=gaugeoff_tags['day'].value, hour=gaugeoff_tags['hour'].value, minute=gaugeoff_tags['min'].value, second=gaugeoff_tags['sec'].value)
|
||||
|
||||
with con:
|
||||
cur = con.cursor()
|
||||
con.execute("""INSERT INTO Hist_Day (gauge_date, percent_run, kWh, electricity_cost, peak_load, min_load, average_SPM, production_calculated, full_card_production, polished_rod_HP, lifting_cost, fluid_above_pump, pump_intake_pressure, kWh_regen, inflow_rate) VALUES ('%s', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f');""" % (gauge_date, gaugeoff_tags['percent_run'].value, gaugeoff_tags['kwh'].value, gaugeoff_tags['electricity_cost'].value, gaugeoff_tags['max_load'].value, gaugeoff_tags['min_load'].value, gaugeoff_tags['average_spm'].value, gaugeoff_tags['production_calculated'].value, gaugeoff_tags['full_card_production'].value, gaugeoff_tags['polished_rod_hp'].value, gaugeoff_tags['lifting_cost'].value, gaugeoff_tags['fluid_level'].value, gaugeoff_tags['pump_intake_pressure'].value, gaugeoff_tags['kwh_regen'].value, gaugeoff_tags['inflow_rate'].value))
|
||||
con.commit()
|
||||
with con:
|
||||
cur = con.cursor()
|
||||
con.execute("""INSERT INTO Hist_Day (gauge_date, percent_run, kWh, electricity_cost, peak_load, min_load, average_SPM, production_calculated, full_card_production, polished_rod_HP, lifting_cost, fluid_above_pump, pump_intake_pressure, kWh_regen, inflow_rate) VALUES ('%s', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%f');""" % (gauge_date, gaugeoff_tags['percent_run'].value, gaugeoff_tags['kwh'].value, gaugeoff_tags['electricity_cost'].value, gaugeoff_tags['max_load'].value, gaugeoff_tags['min_load'].value, gaugeoff_tags['average_spm'].value, gaugeoff_tags['production_calculated'].value, gaugeoff_tags['full_card_production'].value, gaugeoff_tags['polished_rod_hp'].value, gaugeoff_tags['lifting_cost'].value, gaugeoff_tags['fluid_level'].value, gaugeoff_tags['pump_intake_pressure'].value, gaugeoff_tags['kwh_regen'].value, gaugeoff_tags['inflow_rate'].value))
|
||||
con.commit()
|
||||
|
||||
already_gauged_off = True
|
||||
print "Gauged off!"
|
||||
already_gauged_off = True
|
||||
print "Gauged off!"
|
||||
|
||||
##################
|
||||
# WELL TEST DATA #
|
||||
##################
|
||||
##################
|
||||
# WELL TEST DATA #
|
||||
##################
|
||||
|
||||
well_test_entered = readTag(PLC_IP_ADDRESS, "Well_Test.Test_Submit")[0] > 0
|
||||
if (well_test_entered == 0):
|
||||
if already_entered_well_test:
|
||||
already_entered_well_test = False
|
||||
print "Already entered well Test... Setting well_test_entered to False"
|
||||
if (well_test_entered and (not already_entered_well_test)):
|
||||
for wtest in welltest_tags:
|
||||
w = welltest_tags[wtest]
|
||||
w.read(True)
|
||||
print "Well Test Entered"
|
||||
print('{}/{}/{} {}:{}:{}'.format(welltest_tags['year'].value, welltest_tags['month'].value, welltest_tags['day'].value, welltest_tags['hour'].value, welltest_tags['min'].value, welltest_tags['sec'].value))
|
||||
test_date = datetime(year=welltest_tags['year'].value, month=welltest_tags['month'].value, day=welltest_tags['day'].value, hour=welltest_tags['hour'].value, minute=welltest_tags['min'].value, second=welltest_tags['sec'].value)
|
||||
well_test_entered = readTag(PLC_IP_ADDRESS, "Well_Test.Test_Submit")[0] > 0
|
||||
if (well_test_entered == 0):
|
||||
if already_entered_well_test:
|
||||
already_entered_well_test = False
|
||||
print "Already entered well Test... Setting well_test_entered to False"
|
||||
if (well_test_entered and (not already_entered_well_test)):
|
||||
for wtest in welltest_tags:
|
||||
w = welltest_tags[wtest]
|
||||
w.read(True)
|
||||
print "Well Test Entered"
|
||||
print('{}/{}/{} {}:{}:{}'.format(welltest_tags['year'].value, welltest_tags['month'].value, welltest_tags['day'].value, welltest_tags['hour'].value, welltest_tags['min'].value, welltest_tags['sec'].value))
|
||||
test_date = datetime(year=welltest_tags['year'].value, month=welltest_tags['month'].value, day=welltest_tags['day'].value, hour=welltest_tags['hour'].value, minute=welltest_tags['min'].value, second=welltest_tags['sec'].value)
|
||||
|
||||
with con:
|
||||
cur = con.cursor()
|
||||
test_query = "INSERT INTO Well_Test (test_date, test_volume_oil, test_volume_water, test_volume_gas, k_factor, projected_volume_oil, projected_volume_water, api_gravity_oil, sg_water, test_hours) VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}');".format(test_date, welltest_tags['v_oil'].value, welltest_tags['v_water'].value, welltest_tags['v_gas'].value, welltest_tags['k_factor'].value, welltest_tags['p_v_oil'].value, welltest_tags['p_v_water'].value, welltest_tags['api_oil'].value, welltest_tags['sg_water'].value, welltest_tags['test_duration'].value)
|
||||
# print test_query
|
||||
con.execute(test_query)
|
||||
con.commit()
|
||||
with con:
|
||||
cur = con.cursor()
|
||||
test_query = "INSERT INTO Well_Test (test_date, test_volume_oil, test_volume_water, test_volume_gas, k_factor, projected_volume_oil, projected_volume_water, api_gravity_oil, sg_water, test_hours) VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}');".format(test_date, welltest_tags['v_oil'].value, welltest_tags['v_water'].value, welltest_tags['v_gas'].value, welltest_tags['k_factor'].value, welltest_tags['p_v_oil'].value, welltest_tags['p_v_water'].value, welltest_tags['api_oil'].value, welltest_tags['sg_water'].value, welltest_tags['test_duration'].value)
|
||||
# print test_query
|
||||
con.execute(test_query)
|
||||
con.commit()
|
||||
|
||||
already_entered_well_test = True
|
||||
print "Well Test Stored!"
|
||||
already_entered_well_test = True
|
||||
print "Well Test Stored!"
|
||||
|
||||
time.sleep(.20)
|
||||
time.sleep(.20)
|
||||
except Exception, e:
|
||||
print("Error during loop: {}", e)
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
@@ -4,29 +4,16 @@ import os
|
||||
import sys
|
||||
from random import randint
|
||||
import time
|
||||
import MySQLdb
|
||||
import sqlite3 as lite
|
||||
import logging
|
||||
from pycomm.ab_comm.clx import Driver as ClxDriver
|
||||
import traceback
|
||||
|
||||
def main():
|
||||
con = lite.connect("/mnt/usb/testdata.db")
|
||||
PLC_IP_ADDRESS = "192.168.1.10"
|
||||
PLC_TYPE = "VFD"
|
||||
|
||||
db = MySQLdb.connect(host="127.0.0.1",user="website",passwd="henrypump",db="WellData")
|
||||
cur = db.cursor()
|
||||
query = "SELECT * FROM WellData.config ORDER BY dateChanged DESC LIMIT 1;"
|
||||
cur.execute(query)
|
||||
setup = cur.fetchall()
|
||||
db.commit()
|
||||
db.close()
|
||||
try:
|
||||
PLC_IP_ADDRESS = setup[0][2]
|
||||
PLC_TYPE = setup[0][1]
|
||||
except:
|
||||
print("PLC Address not set in database... using default of 192.168.1.10")
|
||||
PLC_IP_ADDRESS = "192.168.1.10"
|
||||
PLC_TYPE = "VFD"
|
||||
|
||||
from pycomm.ab_comm.clx import Driver as ClxDriver
|
||||
c = ClxDriver(True, 'ClxDriver.log')
|
||||
|
||||
today_tags = [
|
||||
today_tags = [
|
||||
{'name':"Average_SPM",'tag':"TODAY_Average_SPM"},
|
||||
{'name':"Downhole_Net_Stroke",'tag':"TODAY_Downhole_NetStroke"},
|
||||
{'name':"Electricity_Cost",'tag':"TODAY_Electricity_Cost"},
|
||||
@@ -46,21 +33,63 @@ def main():
|
||||
{'name':"Pump_Intake_Presure",'tag':"TODAY_Pump_Intake_Pressure"},
|
||||
{'name':"Surface_Stroke_Length",'tag':"TODAY_Surface_StrokeLength"},
|
||||
{'name':"Tubing_Movement",'tag':"TODAY_Tubing_Movement"}
|
||||
]
|
||||
]
|
||||
|
||||
out_tags = {}
|
||||
|
||||
def readConfig():
|
||||
global PLC_IP_ADDRESS, PLC_TYPE
|
||||
with con:
|
||||
cur = con.cursor()
|
||||
query = "SELECT * FROM config ORDER BY dateChanged DESC LIMIT 1;"
|
||||
cur.execute(query)
|
||||
setup = cur.fetchall()
|
||||
try:
|
||||
PLC_IP_ADDRESS = setup[0][2]
|
||||
PLC_TYPE = setup[0][1]
|
||||
except:
|
||||
PLC_IP_ADDRESS = "192.168.1.10"
|
||||
PLC_TYPE = "VFD"
|
||||
|
||||
retry_attempts = 0
|
||||
retries_allowed = 10
|
||||
|
||||
def readTag(addr, tag):
|
||||
# logging.basicConfig(
|
||||
# filename="clx.log",
|
||||
# format="%(levelname)-10s %(asctime)s %(message)s",
|
||||
# level=logging.DEBUG
|
||||
# )
|
||||
c = ClxDriver()
|
||||
if c.open(addr):
|
||||
try:
|
||||
v = c.read_tag(tag)
|
||||
# print(v)
|
||||
return v
|
||||
except Exception:
|
||||
err = c.get_status()
|
||||
c.close()
|
||||
# print err
|
||||
# pass
|
||||
c.close()
|
||||
|
||||
def main():
|
||||
global PLC_IP_ADDRESS, today_tags, retry_attempts, retries_allowed
|
||||
try:
|
||||
if c.open(PLC_IP_ADDRESS):
|
||||
out_list = map(lambda i: {'name':i['name'], 'value':c.read_tag([i['tag']])[0][1]}, today_tags)
|
||||
return {'status':'success', 'values':out_list}
|
||||
# for i in today_tags:
|
||||
# out_tags[i['name']] = c.read_tag([i['tag']])[0][1]
|
||||
# return out_tags
|
||||
|
||||
|
||||
readConfig()
|
||||
outList = []
|
||||
for tag in today_tags:
|
||||
outList.append({'name':tag['name'], 'value':readTag(PLC_IP_ADDRESS, tag['tag'])[0]})
|
||||
print outList
|
||||
return outList
|
||||
except Exception, e:
|
||||
# print("FATAL ERROR: Communication Error connecting to the PLC... ", e)
|
||||
return {'status':'error', 'message':e}
|
||||
# traceback.print_exc()
|
||||
retry_attempts = retry_attempts + 1
|
||||
if retry_attempts < retries_allowed:
|
||||
main()
|
||||
else:
|
||||
print {'status':'error', 'message':e}
|
||||
return {'status':'error', 'message':e}
|
||||
|
||||
if __name__ == '__main__':
|
||||
print main()
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user