From e10b2de0bec4836b2dc134d56ed573ad1d633ce3 Mon Sep 17 00:00:00 2001 From: fahim Date: Tue, 7 Apr 2015 15:32:15 +0530 Subject: Subject: Added new Icon images and Modified code to get model from xml file Description: Started the work to get the details of model parameter from xml. --- src/configuration/Appconfig.py | 2 +- src/configuration/Appconfig.pyc | Bin 1303 -> 1303 bytes src/frontEnd/Application.py | 20 +- src/images/closeProject.png | Bin 0 -> 43683 bytes src/images/helpProject.png | Bin 0 -> 44903 bytes src/images/helpProject.svg | 604 ++++++++++++++++++++++++++++++++++ src/images/newProject.png | Bin 0 -> 53055 bytes src/images/newProject_test.png | Bin 0 -> 58704 bytes src/images/openProject.png | Bin 0 -> 49794 bytes src/images/warning.png | Bin 0 -> 64071 bytes src/kicadtoNgspice/Convert.py | 13 +- src/kicadtoNgspice/KicadtoNgspice.py | 47 ++- src/kicadtoNgspice/KicadtoNgspice.pyc | Bin 3987 -> 4289 bytes src/kicadtoNgspice/Processing.py | 98 +++++- src/kicadtoNgspice/Source.py | 7 + src/kicadtoNgspice/TrackWidget.py | 5 +- src/modelParamXML/Analog/gain.xml | 11 + src/modelParamXML/Analog/temp.xml | 11 + src/modelParamXML/Digital/gains.xml | 11 + src/modelParamXML/Digital/test.xml | 11 + src/projManagement/Kicad.py | 3 +- src/projManagement/Kicad.pyc | Bin 4085 -> 4108 bytes src/projManagement/Worker.py | 10 +- src/projManagement/Worker.pyc | Bin 1257 -> 1173 bytes src/projManagement/newProject.py | 1 - src/projManagement/newProject.pyc | Bin 3836 -> 3816 bytes 26 files changed, 820 insertions(+), 34 deletions(-) create mode 100644 src/images/closeProject.png create mode 100644 src/images/helpProject.png create mode 100644 src/images/helpProject.svg create mode 100644 src/images/newProject.png create mode 100644 src/images/newProject_test.png create mode 100644 src/images/openProject.png create mode 100644 src/images/warning.png create mode 100644 src/modelParamXML/Analog/gain.xml create mode 100644 src/modelParamXML/Analog/temp.xml create mode 100644 src/modelParamXML/Digital/gains.xml create mode 100644 src/modelParamXML/Digital/test.xml (limited to 'src') diff --git a/src/configuration/Appconfig.py b/src/configuration/Appconfig.py index bf3c4140..5735534b 100644 --- a/src/configuration/Appconfig.py +++ b/src/configuration/Appconfig.py @@ -34,7 +34,7 @@ class Appconfig(QtGui.QWidget): #Workspace detail workspace_text = '''ecSim stores your project in a folder called a workspace. You can choose a different workspace folder to use for this session.''' - + def __init__(self): super(Appconfig, self).__init__() diff --git a/src/configuration/Appconfig.pyc b/src/configuration/Appconfig.pyc index 2229b859..a9348ab9 100644 Binary files a/src/configuration/Appconfig.pyc and b/src/configuration/Appconfig.pyc differ diff --git a/src/frontEnd/Application.py b/src/frontEnd/Application.py index e52ac45b..1d6b4f03 100755 --- a/src/frontEnd/Application.py +++ b/src/frontEnd/Application.py @@ -57,20 +57,21 @@ class Application(QtGui.QMainWindow): def initActions(self): - - self.newproj = QtGui.QAction(QtGui.QIcon('../images/newProject.svg'),'New Project',self) + + self.newproj = QtGui.QAction(QtGui.QIcon('../images/newProject.png'),'New Project',self) self.newproj.setShortcut('Ctrl+N') self.newproj.triggered.connect(self.new_project) - self.openproj = QtGui.QAction(QtGui.QIcon('../images/openProject.svg'),'Open Project',self) + + self.openproj = QtGui.QAction(QtGui.QIcon('../images/openProject.png'),'Open Project',self) self.openproj.setShortcut('Ctrl+O') self.openproj.triggered.connect(self.open_project) - self.exitproj = QtGui.QAction(QtGui.QIcon('../images/closeProject.svg'),'Exit',self) + self.exitproj = QtGui.QAction(QtGui.QIcon('../images/closeProject.png'),'Exit',self) self.exitproj.setShortcut('Ctrl+X') self.exitproj.triggered.connect(self.exit_project) - self.helpfile = QtGui.QAction(QtGui.QIcon('../images/default.png'),'Help',self) + self.helpfile = QtGui.QAction(QtGui.QIcon('../images/helpProject.png'),'Help',self) self.helpfile.setShortcut('Ctrl+H') self.helpfile.triggered.connect(self.help_project) @@ -79,6 +80,10 @@ class Application(QtGui.QMainWindow): self.mainToolbar.addAction(self.openproj) self.mainToolbar.addAction(self.exitproj) self.mainToolbar.addAction(self.helpfile) + + #self.test = self.addToolBar("Temp") + + def initView(self): @@ -101,12 +106,13 @@ class Application(QtGui.QMainWindow): def exit_project(self): print "Exit Project called" - self.close() + self.destroy() def help_project(self): print "Help is called" print "Current Project : ",self.obj_appconfig.current_project - print "Sourcelist track : ",self.obj_appconfig.sourcelisttrack + + def testing(self): print "Sucess hit kicad button" diff --git a/src/images/closeProject.png b/src/images/closeProject.png new file mode 100644 index 00000000..2aa0dbb4 Binary files /dev/null and b/src/images/closeProject.png differ diff --git a/src/images/helpProject.png b/src/images/helpProject.png new file mode 100644 index 00000000..1be6a7bc Binary files /dev/null and b/src/images/helpProject.png differ diff --git a/src/images/helpProject.svg b/src/images/helpProject.svg new file mode 100644 index 00000000..27252661 --- /dev/null +++ b/src/images/helpProject.svg @@ -0,0 +1,604 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/newProject.png b/src/images/newProject.png new file mode 100644 index 00000000..edc9b9bb Binary files /dev/null and b/src/images/newProject.png differ diff --git a/src/images/newProject_test.png b/src/images/newProject_test.png new file mode 100644 index 00000000..86588f15 Binary files /dev/null and b/src/images/newProject_test.png differ diff --git a/src/images/openProject.png b/src/images/openProject.png new file mode 100644 index 00000000..c755399a Binary files /dev/null and b/src/images/openProject.png differ diff --git a/src/images/warning.png b/src/images/warning.png new file mode 100644 index 00000000..e3dee87a Binary files /dev/null and b/src/images/warning.png differ diff --git a/src/kicadtoNgspice/Convert.py b/src/kicadtoNgspice/Convert.py index 3d45f94a..26010d9e 100644 --- a/src/kicadtoNgspice/Convert.py +++ b/src/kicadtoNgspice/Convert.py @@ -8,13 +8,12 @@ class Convert: self.entry_var = source_entry_var self.sourcelistvalue = [] - self.analysisInserter() - + def addSourceParameter(self): print "Adding Source parameter" - print "SourceListTrack : ",self.sourcelisttrack - print "Schematic Info ",self.schematicInfo - print "Entry Var",self.entry_var + #print "SourceListTrack : ",self.sourcelisttrack + #print "Schematic Info ",self.schematicInfo + #print "Entry Var",self.entry_var self.start = 0 self.end = 0 @@ -107,5 +106,5 @@ class Convert: return self.schematicInfo - def analysisInserter(self): - print "Adding Analysis" \ No newline at end of file + def addModelParameter(self,schematicInfo): + print "Schematic info after adding source detail",schematicInfo \ No newline at end of file diff --git a/src/kicadtoNgspice/KicadtoNgspice.py b/src/kicadtoNgspice/KicadtoNgspice.py index ecf951cd..55e6c360 100644 --- a/src/kicadtoNgspice/KicadtoNgspice.py +++ b/src/kicadtoNgspice/KicadtoNgspice.py @@ -16,7 +16,6 @@ # REVISION: --- #=============================================================================== import sys -import os from PyQt4 import QtGui,QtCore from Processing import PrcocessNetlist import Analysis @@ -32,8 +31,10 @@ class MainWindow(QtGui.QWidget): QtGui.QWidget.__init__(self) #Create object of track widget self.obj_track = TrackWidget.TrackWidget() - + print "Init Kicad to Ngspice" + #print "Current Project",sys.argv[1] + #Creating GUI for kicadtoNgspice window self.grid = QtGui.QGridLayout(self) @@ -92,7 +93,9 @@ class MainWindow(QtGui.QWidget): #Adding Source Value to Schematic Info schematicInfo = self.obj_convert.addSourceParameter() - + #print "Schematic After adding source parameter",schematicInfo + schematicInfo = self.obj_convert.addModelParameter(schematicInfo) + @@ -102,8 +105,8 @@ def main(args): print "Kicad to Ngspice netlist converter " print "==================================" global kicadFile,kicadNetlist,schematicInfo - kicadFile = "/home/fahim/eSim-Workspace/BJT_amplifier/BJT_amplifier.cir" - #kicadFile = sys.argv[1] + #kicadFile = "/home/fahim/eSim-Workspace/BJT_amplifier/BJT_amplifier.cir" + kicadFile = sys.argv[1] #Object of Processing obj_proc = PrcocessNetlist() @@ -127,32 +130,54 @@ def main(args): print "SCHEMATICINFO",schematicInfo #Getting model and subckt list - modelList=[] + devicemodelList=[] subcktList=[] - modelList,subcktList = obj_proc.getModelSubcktList(schematicInfo,modelList,subcktList) + devicemodelList,subcktList = obj_proc.getModelSubcktList(schematicInfo,devicemodelList,subcktList) - print "MODEL LIST ",modelList + print "MODEL LIST ",devicemodelList print "SUBCKT ",subcktList #List for storing source and its value global sourcelist, sourcelisttrack sourcelist=[] sourcelisttrack=[] - schematicInfo,sourcelist=obj_proc.insertSpecialSourceParam(schematicInfo,sourcelist) + schematicInfo,sourcelist = obj_proc.insertSpecialSourceParam(schematicInfo,sourcelist) print "SOURCELIST",sourcelist print "SCHEMATICINFO",schematicInfo - - + #List storing model detail + global modelList,outputOption + modelList = [] + outputOption = [] + schematicInfo,outputOption,modelList,unknownModelList,multipleModelList = obj_proc.convertICintoBasicBlocks(schematicInfo,outputOption,modelList) + print "Unknown Model List",unknownModelList + print "Multple Model List",multipleModelList + + + + #Checking for unknown Model List and Multiple Model List + if unknownModelList: + print "ErrorMessage : These Models are not available.Please check it",unknownModelList + sys.exit(2) + else: + if multipleModelList: + print "ErrorMessage: There are multiple model for same name. Please check it",multipleModelList + sys.exit(2) + else: + pass + app = QtGui.QApplication(args) #app.setApplicationName("KicadToNgspice") #app.setQuitOnLastWindowClosed(True) kingWindow = MainWindow() kingWindow.show() sys.exit(app.exec_()) + + + if __name__ == '__main__': main(sys.argv) diff --git a/src/kicadtoNgspice/KicadtoNgspice.pyc b/src/kicadtoNgspice/KicadtoNgspice.pyc index ece6486f..5a3f1e57 100644 Binary files a/src/kicadtoNgspice/KicadtoNgspice.pyc and b/src/kicadtoNgspice/KicadtoNgspice.pyc differ diff --git a/src/kicadtoNgspice/Processing.py b/src/kicadtoNgspice/Processing.py index 4dee9446..3a2bcb37 100644 --- a/src/kicadtoNgspice/Processing.py +++ b/src/kicadtoNgspice/Processing.py @@ -1,8 +1,14 @@ +import sys +import os +from xml.etree import ElementTree as ET + + class PrcocessNetlist: + modelxmlDIR = '../modelParamXML' def __init__(self): pass - + def readNetlist(self,filename): f = open(filename) data=f.read() @@ -92,13 +98,18 @@ class PrcocessNetlist: modelName=words[4] index=schematicInfo.index(eachline) schematicInfo.remove(eachline) + ''' width=raw_input(' Enter width of mosfet '+words[0]+'(default=100u):') length=raw_input(' Enter length of mosfet '+words[0]+'(default=100u):') multiplicative_factor=raw_input(' Enter multiplicative factor of mosfet '+words[0]+'(default=1):') + if width=="": width="100u" if multiplicative_factor=="": multiplicative_factor="100u" if length=="": length="100u" schematicInfo.insert(index,words[0]+" "+words[1]+" "+words[2]+" "+words[3]+" "+words[3]+" "+words[4]+" "+'M='+multiplicative_factor+" "+'L='+length+" "+'W='+width) + ''' + + schematicInfo.insert(index,words[0]+" "+words[1]+" "+words[2]+" "+words[3]+" "+words[3]+" "+words[4]) if modelName in modelList: continue modelList.append(modelName) @@ -191,4 +202,89 @@ class PrcocessNetlist: return schematicInfo,sourcelist + def convertICintoBasicBlocks(self,schematicInfo,outputOption,modelList): + #Insert details of Ngspice model + unknownModelList = [] + multipleModelList = [] + k = 1 + for compline in schematicInfo: + words = compline.split() + compName = words[0] + # Find the IC from schematic + if compName[0]=='u': + # Find the component from the circuit + index=schematicInfo.index(compline) + compType=words[len(words)-1]; + schematicInfo.remove(compline) + print "Compline",compline + print "CompType",compType + print "Words",words + print "compName",compName + #Looking if model file is present + xmlfile = compType+".xml" #XML Model File + count = 0 #Check if model of same name is present + modelPath = [] + all_dir = [x[0] for x in os.walk(PrcocessNetlist.modelxmlDIR)] + for each_dir in all_dir: + all_file = os.listdir(each_dir) + if xmlfile in all_file: + count += 1 + modelPath.append(os.path.join(each_dir,xmlfile)) + + if count > 1: + multipleModelList.append(modelPath) + elif count == 0: + unknownModelList.append(compType) + elif count == 1: + try: + tree = ET.parse(modelPath[0]) + #root = parsemodel.getroot() + for child in tree.iter(): + print "Child Item",child + #print "Tag",child.tag + #print "Tag Value",child.text + + except: + print "Unable to parse the model, Please check your your xml file" + sys.exit(2) + + #print "Count",count + #print "UnknownModelList",unknownModelList + #print "MultipleModelList",multipleModelList + ''' + if compType=="gain": + schematicInfo.append("a"+str(k)+" "+words[1]+" "+words[2]+" "+compName) + k=k+1 + #Insert comment at remove line + schematicInfo.insert(index,"* "+compline) + print "-----------------------------------------------------------\n" + print "Adding Gain" + Comment='* Gain '+compType + Title='Add parameters for Gain '+compName + in_offset=' Enter offset for input (default=0.0): ' + gain=' Enter gain (default=1.0): ' + out_offset=' Enter offset for output (default=0.0): ' + print "-----------------------------------------------------------" + modelList.append([index,compline,compType,compName,Comment,Title,in_offset,gain,out_offset]) + elif compType=="summer": + schematicInfo.append("a"+str(k)+" ["+words[1]+" "+words[2]+"] "+words[3]+" "+compName) + k=k+1 + #Insert comment at remove line + schematicInfo.insert(index,"* "+compline) + print "-----------------------------------------------------------\n" + print "Adding summer" + Comment='* Summer '+compType + Title='Add parameters for Summer '+compName + in1_offset=' Enter offset for input 1 (default=0.0): ' + in2_offset=' Enter offset for input 2 (default=0.0): ' + in1_gain=' Enter gain for input 1 (default=1.0): ' + in2_gain=' Enter gain for input 2 (default=1.0): ' + out_gain=' Enter gain for output (default=1.0): ' + out_offset=' Enter offset for output (default=0.0): ' + print "-----------------------------------------------------------" + modelList.append([index,compline,compType,compName,Comment,Title,in1_offset,in2_offset,in1_gain,in2_gain,out_gain,out_offset]) + ''' + return schematicInfo,outputOption,modelList,unknownModelList,multipleModelList + + \ No newline at end of file diff --git a/src/kicadtoNgspice/Source.py b/src/kicadtoNgspice/Source.py index 657a980c..ee460cb0 100644 --- a/src/kicadtoNgspice/Source.py +++ b/src/kicadtoNgspice/Source.py @@ -16,6 +16,7 @@ class Source(QtGui.QWidget): self.end = 0 self.row = 0 self.entry_var = {} + #self.font = QtGui.QFont("Times",20,QtGui.QFont.Bold,True) #Creating Source Widget self.createSourceWidget(sourcelist,sourcelisttrack) @@ -41,6 +42,7 @@ class Source(QtGui.QWidget): label=QtGui.QLabel(line[4]) self.grid.addWidget(label,self.row,0) self.entry_var[self.count]=QtGui.QLineEdit() + self.entry_var[self.count].setMaximumWidth(150) self.grid.addWidget(self.entry_var[self.count],self.row,1) #Value Need to check previuouse value self.entry_var[self.count].setText("") @@ -57,6 +59,7 @@ class Source(QtGui.QWidget): label=QtGui.QLabel(line[4]) self.grid.addWidget(label,self.row,0) self.entry_var[self.count]=QtGui.QLineEdit() + self.entry_var[self.count].setMaximumWidth(150) self.grid.addWidget(self.entry_var[self.count],self.row,1) self.entry_var[self.count].setText("") self.row=self.row+1 @@ -74,6 +77,7 @@ class Source(QtGui.QWidget): label=QtGui.QLabel(line[it]) self.grid.addWidget(label,self.row,0) self.entry_var[self.count]=QtGui.QLineEdit() + self.entry_var[self.count].setMaximumWidth(150) self.grid.addWidget(self.entry_var[self.count],self.row,1) self.entry_var[self.count].setText("") self.row=self.row+1 @@ -90,6 +94,7 @@ class Source(QtGui.QWidget): label=QtGui.QLabel(line[it]) self.grid.addWidget(label,self.row,0) self.entry_var[self.count]=QtGui.QLineEdit() + self.entry_var[self.count].setMaximumWidth(150) self.grid.addWidget(self.entry_var[self.count],self.row,1) self.entry_var[self.count].setText("") self.row=self.row+1 @@ -105,6 +110,7 @@ class Source(QtGui.QWidget): label=QtGui.QLabel(line[4]) self.grid.addWidget(label,self.row,0) self.entry_var[self.count]=QtGui.QLineEdit() + self.entry_var[self.count].setMaximumWidth(150) self.grid.addWidget(self.entry_var[self.count],self.row,1) self.entry_var[self.count].setText(""); self.row=self.row+1 @@ -121,6 +127,7 @@ class Source(QtGui.QWidget): label=QtGui.QLabel(line[it]) self.grid.addWidget(label,self.row,0) self.entry_var[self.count]=QtGui.QLineEdit() + self.entry_var[self.count].setMaximumWidth(150) self.grid.addWidget(self.entry_var[self.count],self.row,1) self.entry_var[self.count].setText("") self.row=self.row+1 diff --git a/src/kicadtoNgspice/TrackWidget.py b/src/kicadtoNgspice/TrackWidget.py index 0b11d938..1c600d79 100644 --- a/src/kicadtoNgspice/TrackWidget.py +++ b/src/kicadtoNgspice/TrackWidget.py @@ -1,9 +1,8 @@ class TrackWidget: """ This Class track the widget of Kicad to NgSpice converter - module in the form of list + module. """ sourcelisttrack = {"ITEMS":"None"} source_entry_var = {"ITEMS":"None"} - analysis_entry_var = {"ITEMS":"NONE"} - analysis_type = {"ITEMS":"NONE"} \ No newline at end of file + \ No newline at end of file diff --git a/src/modelParamXML/Analog/gain.xml b/src/modelParamXML/Analog/gain.xml new file mode 100644 index 00000000..2bce2a66 --- /dev/null +++ b/src/modelParamXML/Analog/gain.xml @@ -0,0 +1,11 @@ + +gain +Analog +2 +Add Parameter for model gain + + Enter offset for input (default=0.0): + Enter gain (default=1.0): + Enter offset for output (default=0.0): + + \ No newline at end of file diff --git a/src/modelParamXML/Analog/temp.xml b/src/modelParamXML/Analog/temp.xml new file mode 100644 index 00000000..2bce2a66 --- /dev/null +++ b/src/modelParamXML/Analog/temp.xml @@ -0,0 +1,11 @@ + +gain +Analog +2 +Add Parameter for model gain + + Enter offset for input (default=0.0): + Enter gain (default=1.0): + Enter offset for output (default=0.0): + + \ No newline at end of file diff --git a/src/modelParamXML/Digital/gains.xml b/src/modelParamXML/Digital/gains.xml new file mode 100644 index 00000000..2bce2a66 --- /dev/null +++ b/src/modelParamXML/Digital/gains.xml @@ -0,0 +1,11 @@ + +gain +Analog +2 +Add Parameter for model gain + + Enter offset for input (default=0.0): + Enter gain (default=1.0): + Enter offset for output (default=0.0): + + \ No newline at end of file diff --git a/src/modelParamXML/Digital/test.xml b/src/modelParamXML/Digital/test.xml new file mode 100644 index 00000000..2bce2a66 --- /dev/null +++ b/src/modelParamXML/Digital/test.xml @@ -0,0 +1,11 @@ + +gain +Analog +2 +Add Parameter for model gain + + Enter offset for input (default=0.0): + Enter gain (default=1.0): + Enter offset for output (default=0.0): + + \ No newline at end of file diff --git a/src/projManagement/Kicad.py b/src/projManagement/Kicad.py index cbee89e9..a575af21 100644 --- a/src/projManagement/Kicad.py +++ b/src/projManagement/Kicad.py @@ -21,7 +21,7 @@ import Validation from configuration.Appconfig import Appconfig import Worker from PyQt4 import QtGui - +import time class Kicad: """ Class Kicad open Schematic,PCB and Layout @@ -109,6 +109,7 @@ class Kicad: self.cmd = "python ../kicadtoNgspice/KicadtoNgspice.py "+self.project+".cir " self.obj_workThread = Worker.WorkerThread(self.cmd) self.obj_workThread.start() + else: self.msg = QtGui.QErrorMessage(None) diff --git a/src/projManagement/Kicad.pyc b/src/projManagement/Kicad.pyc index 9d783b32..4011f875 100644 Binary files a/src/projManagement/Kicad.pyc and b/src/projManagement/Kicad.pyc differ diff --git a/src/projManagement/Worker.py b/src/projManagement/Worker.py index 00cad6a4..58078b86 100644 --- a/src/projManagement/Worker.py +++ b/src/projManagement/Worker.py @@ -23,16 +23,22 @@ class WorkerThread(QtCore.QThread): def __init__(self,args): QtCore.QThread.__init__(self) self.args = args - + ''' + #Not Required def __del__(self): self.wait() + ''' def run(self): print "Calling :",self.args self.call_system(self.args) def call_system(self,command): print "System called" - os.system(command) + try: + os.system(command) + print "PID",os.getpid() + except: + print "Unable to run the command" \ No newline at end of file diff --git a/src/projManagement/Worker.pyc b/src/projManagement/Worker.pyc index c8e30b8f..237fe279 100644 Binary files a/src/projManagement/Worker.pyc and b/src/projManagement/Worker.pyc differ diff --git a/src/projManagement/newProject.py b/src/projManagement/newProject.py index c76acdc1..10251d1b 100644 --- a/src/projManagement/newProject.py +++ b/src/projManagement/newProject.py @@ -41,7 +41,6 @@ class NewProjectInfo(QtGui.QWidget): self.okbtn.clicked.connect(self.createProject) self.cancelbtn = QtGui.QPushButton("Cancel") - self.cancelbtn = QtGui.QPushButton('Cancel') self.cancelbtn.clicked.connect(self.cancelProject) diff --git a/src/projManagement/newProject.pyc b/src/projManagement/newProject.pyc index 16e965d3..b97b85c2 100644 Binary files a/src/projManagement/newProject.pyc and b/src/projManagement/newProject.pyc differ -- cgit