first commit
This commit is contained in:
commit
9a6181e527
271
IsegHVController.py
Executable file
271
IsegHVController.py
Executable file
|
@ -0,0 +1,271 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
import datetime
|
||||
import csv
|
||||
|
||||
cmd0Str = "-v 2c -m +WIENER-CRATE-MIB -c guru 128.186.111.101 "
|
||||
|
||||
def SendCmd(option,cmd):
|
||||
if option == 0 :
|
||||
cmdStr = "snmpget " + cmd0Str + cmd
|
||||
elif option == 1:
|
||||
cmdStr = "snmpset " + cmd0Str + cmd
|
||||
elif option == 2:
|
||||
cmdStr = "snmpwalk " + cmd0Str + cmd
|
||||
else :
|
||||
cmdStr = "echo option: 0 - get, 1 - set, 2 - walk"
|
||||
#print(cmdStr)
|
||||
result = str(subprocess.check_output(cmdStr, shell=True))
|
||||
return result.lstrip('b\'').rstrip('\'').rstrip('\n')
|
||||
|
||||
#======== Get settings
|
||||
def GetHV(ch):
|
||||
haha = SendCmd(0, "outputVoltage.u" + str(ch))
|
||||
aa = haha.find('Float:')
|
||||
return float(haha[aa+6:-3].strip())
|
||||
|
||||
def GetCurrent(ch):
|
||||
haha = SendCmd(0, "outputCurrent.u" + str(ch))
|
||||
aa = haha.find('Float:')
|
||||
return float(haha[aa+6:-3].strip())
|
||||
|
||||
def GetOutputHV(ch):
|
||||
haha = SendCmd(0, "outputMeasurementSenseVoltage.u" + str(ch))
|
||||
aa = haha.find('Float:')
|
||||
return float(haha[aa+6:-3].strip())
|
||||
|
||||
def GetLI(ch):
|
||||
haha = SendCmd(0, "outputMeasurementCurrent.u" + str(ch))
|
||||
aa = haha.find('Float:')
|
||||
return float(haha[aa+6:-3].strip())
|
||||
|
||||
def IsHVOn(ch):
|
||||
return SendCmd(0, "outputSwitch.u"+str(ch))
|
||||
|
||||
def GetHVRiseRate(ch):
|
||||
haha = SendCmd(0, "outputVoltageRiseRate.u" + str(ch))
|
||||
aa = haha.find('Float:')
|
||||
return float(haha[aa+6:-5].strip())
|
||||
|
||||
def GetHVFallRate(ch):
|
||||
haha = SendCmd(0, "outputVoltageFallRate.u" + str(ch))
|
||||
aa = haha.find('Float:')
|
||||
return float(haha[aa+6:-5].strip())
|
||||
|
||||
#======== Get All channel Setting using snmp walk
|
||||
|
||||
def GetChList():
|
||||
haha = SendCmd(2, "outputName")
|
||||
kaka = []
|
||||
for k in haha.split('WIENER-CRATE-MIB::outputName.'):
|
||||
if len(k) > 0 :
|
||||
aa = k.find("=")
|
||||
k = k[0:aa].strip().lstrip('u')
|
||||
kaka.append(int(k))
|
||||
return kaka
|
||||
|
||||
def GetAllHV():
|
||||
haha = SendCmd(2, "outputVoltage")
|
||||
kaka = []
|
||||
for k in haha.split('WIENER-CRATE-MIB::outputVoltage'):
|
||||
if len(k) > 0 :
|
||||
aa = k.find("Float:")
|
||||
k = k[aa+6: -3].strip()
|
||||
kaka.append(float(k))
|
||||
return kaka
|
||||
|
||||
def GetAllCurrent():
|
||||
haha = SendCmd(2, "outputCurrent")
|
||||
kaka = []
|
||||
for k in haha.split('WIENER-CRATE-MIB::outputCurrent'):
|
||||
if len(k) > 0 :
|
||||
aa = k.find("Float:")
|
||||
k = k[aa+6: -3].strip()
|
||||
kaka.append(float(k))
|
||||
return kaka
|
||||
|
||||
def GetAllOutputHV():
|
||||
haha = SendCmd(2, "outputMeasurementSenseVoltage")
|
||||
kaka = []
|
||||
for k in haha.split('WIENER-CRATE-MIB::outputMeasurementSenseVoltage'):
|
||||
if len(k) > 0 :
|
||||
aa = k.find("Float:")
|
||||
k = k[aa+6: -3].strip()
|
||||
kaka.append(float(k))
|
||||
return kaka
|
||||
|
||||
def GetAllLC():
|
||||
haha = SendCmd(2, "outputMeasurementCurrent")
|
||||
kaka = []
|
||||
for k in haha.split('WIENER-CRATE-MIB::outputMeasurementCurrent'):
|
||||
if len(k) > 0 :
|
||||
aa = k.find("Float:")
|
||||
k = k[aa+6: -3].strip()
|
||||
kaka.append(float(k))
|
||||
return kaka
|
||||
|
||||
#======== Set Settings
|
||||
def SetHV(ch, val):
|
||||
return SendCmd(1, "outputVoltage.u" + str(ch) + " F " + str(val))
|
||||
|
||||
def SetCurrent(ch, val):
|
||||
return SendCmd(1, "outputCurrent.u" + str(ch) + " F " + str(val))
|
||||
|
||||
def SwitchOnHV(ch, onOff):
|
||||
return SendCmd(1, "outputSwitch.u" + str(ch) + " i " + str(onOff))
|
||||
|
||||
def SetHVRiseRate(ch, rate):
|
||||
return SendCmd(1, "outputVoltageRiseRate.u" + str(ch) + " F " + str(rate))
|
||||
|
||||
def SetHVFallRate(ch, rate):
|
||||
return SendCmd(1, "outputVoltageFallRate.u" + str(ch) + " F " + str(rate))
|
||||
|
||||
#===================== SandBox
|
||||
|
||||
#print( GetOutputHV(0) )
|
||||
#print( GetLI(0) )
|
||||
#print( GetHVRiseRate(0) )
|
||||
#print( GetHVFallRate(0) )
|
||||
#
|
||||
#print( SendCmd(1, "outputCurrent.u1 F 0.0005"))
|
||||
|
||||
#print( SendCmd(2, "outputCurrent"))
|
||||
|
||||
#hvList = GetAllOutputHV()
|
||||
#print(hvList)
|
||||
|
||||
#===================== GUI
|
||||
import PySimpleGUI as sg
|
||||
|
||||
#gui.theme('DarkAmber')
|
||||
|
||||
header = ["name", "HV [V]", "Current [mA]"]
|
||||
|
||||
chList = GetChList()
|
||||
hvList = GetAllHV() # get all V
|
||||
iList = GetAllCurrent() # get all current
|
||||
outVList = GetAllOutputHV()
|
||||
outIList = GetAllLC()
|
||||
nChannel = len(chList)
|
||||
|
||||
updateTime = 5000
|
||||
|
||||
fileName = ''
|
||||
|
||||
layout = [
|
||||
[
|
||||
sg.Text("refresh period [ms] :", size = 25, justification = "right"),
|
||||
sg.Input(updateTime, size = 8, justification = "right", enable_events=True, key=("-Refresh-"))
|
||||
],
|
||||
[
|
||||
sg.Text("Name", size = 8, justification = "center" ),
|
||||
sg.Text("CH", size = 4, justification = "center" ),
|
||||
sg.Text("On/Off", size = 6, justification = "center"),
|
||||
sg.Text("Set V [V]", size = 8, justification = "center" ),
|
||||
sg.Text("Set I [mA]", size = 9, justification = "center" ),
|
||||
sg.Text("Out V [V]", size = 8, justification = "center" ),
|
||||
sg.Text("Out I [uA]", size = 10, justification = "center" )
|
||||
]]
|
||||
|
||||
for i in range(0, nChannel):
|
||||
layout.append([ sg.Input(default_text='', size = 8, justification = "left", key=("n%d" % chList[i])),
|
||||
sg.Text("u"+str(chList[i]), size = 4, justification = "center" ),
|
||||
sg.Checkbox('', size = 3, enable_events = True, key=("c%d" % chList[i])),
|
||||
sg.Input(default_text=("%.3f" % hvList[i]), size = 8, justification = "right", enable_events=True, key=("v%d" % chList[i]) ),
|
||||
sg.Input(default_text=("%.3f" % (iList[i]*1000)), size = 9, justification = "right", enable_events=True, key=("i%d" % chList[i]) ),
|
||||
sg.Input(default_text=("%.3f" % outVList[i]), size = 8, justification = "right", enable_events=True, key=("a%d" % chList[i]), readonly = True ),
|
||||
sg.Input(default_text=("%.3f" % (outIList[i]*1e6)), size = 10, justification = "right", enable_events=True, key=("b%d" % chList[i]), readonly = True ),
|
||||
])
|
||||
|
||||
layout.append([sg.FileSaveAs('Save As', target = '-Save-', initial_folder='~', file_types = (('csv file','*.csv'),)),
|
||||
sg.FileBrowse('Load', target = '-Load-', initial_folder='~', file_types = (('csv file','*.csv'),)),
|
||||
sg.Input(default_text=fileName, expand_x = True, justification = "left", readonly = True, enable_events=True, key="-Save-" ),
|
||||
sg.Input('', visible = False, enable_events=True, key="-Load-" )
|
||||
])
|
||||
|
||||
window = sg.Window('Iseg HV Control', layout, finalize = True, keep_on_top = True)
|
||||
|
||||
for i in range(0, nChannel):
|
||||
window[("v%d" % chList[i])].bind("<Return>", "_Enter")
|
||||
window[("i%d" % chList[i])].bind("<Return>", "_Enter")
|
||||
window[("v%d" % chList[i])].bind("<KP_Enter>", "_Enter")
|
||||
window[("i%d" % chList[i])].bind("<KP_Enter>", "_Enter")
|
||||
|
||||
# Event Loop to process "events" and get the "values" of the inputs
|
||||
while True:
|
||||
event, values = window.read(timeout = updateTime, timeout_key = "_TIMEOUT_") ## this pause for 20 sec and wait for event
|
||||
#print(event)
|
||||
#print(values)
|
||||
#print(datetime.datetime.now())
|
||||
|
||||
if event == "-Refresh-" :
|
||||
updateTime = int(window[event].get());
|
||||
|
||||
if event in (None, 'Exit'):
|
||||
break
|
||||
|
||||
if event[0:1] == 'c' :
|
||||
ID = event[1:]
|
||||
SwitchOnHV(int(ID), int(window[event].get()))
|
||||
|
||||
if event == '-Save-' :
|
||||
fileName = values["Save As"]
|
||||
outfile = open(fileName, "w")
|
||||
csv_writer = csv.writer(outfile)
|
||||
for i in range(0, nChannel):
|
||||
papap = [window[("n%d" % chList[i])].get(), "u"+str(chList[i]), window[("v%d" % chList[i])].get(), window[("i%d" % chList[i])].get()]
|
||||
csv_writer.writerow( papap )
|
||||
outfile.close();
|
||||
|
||||
if event == "-Load-" :
|
||||
fileName = window["-Load-"].get()
|
||||
window['-Save-'].update(fileName)
|
||||
infile = open(fileName, "r")
|
||||
csv_reader = csv.reader(infile)
|
||||
i = 0
|
||||
for row in csv_reader:
|
||||
window[("n%d" % chList[i])].update(row[0])
|
||||
window[("v%d" % chList[i])].update(row[2])
|
||||
window[("i%d" % chList[i])].update(row[3])
|
||||
SetHV(chList[i], float(row[2]))
|
||||
SetCurrent(chList[i], float(row[3])/1000)
|
||||
i += 1
|
||||
|
||||
haha = event.find('_Enter')
|
||||
if haha > 0 :
|
||||
ID = event[:haha]
|
||||
ch = int(ID[1:])
|
||||
if event[0:1] == 'v' :
|
||||
SetHV(ch, float(window[ID].get()))
|
||||
window[ID].update("%.3f" % GetHV(ch))
|
||||
if event[0:1] == 'i' :
|
||||
SetCurrent(ch, float(window[ID].get())/1000.)
|
||||
window[ID].update("%.3f" % (GetCurrent(ch)*1000))
|
||||
|
||||
|
||||
if event == "_TIMEOUT_" :
|
||||
#hvList = GetAllHV() # get all V
|
||||
#iList = GetAllCurrent() # get all current
|
||||
outVList = GetAllOutputHV()
|
||||
outIList = GetAllLC()
|
||||
|
||||
tempFile = open("temp.dat", "w")
|
||||
|
||||
for i in range(0, nChannel):
|
||||
#window[("v%d" % chList[i])].update("%.3f" % hvList[i])
|
||||
#window[("i%d" % chList[i])].update("%.3f" % (iList[i]*1000))
|
||||
window[("a%d" % chList[i])].update("%.3f" % outVList[i])
|
||||
window[("b%d" % chList[i])].update("%.3f" % (outIList[i]*1e6))
|
||||
#==== To DataBase
|
||||
tempFile.write("Voltage,Ch=%d value=%f\n" % (chList[i], outVList[i]))
|
||||
tempFile.write("LeakageCurrent,Ch=%d value=%f\n" % (chList[i], outIList[i]))
|
||||
|
||||
tempFile.close()
|
||||
|
||||
os.system("curl -XPOST http://128.186.111.107:8086/write?db=testing --data-binary @temp.dat")
|
||||
|
||||
|
||||
window.close()
|
||||
|
Loading…
Reference in New Issue
Block a user