plugger.py
changeset 65 e55d6faee9d1
parent 64 531e6a834d7e
child 66 b46237718b27
equal deleted inserted replaced
64:531e6a834d7e 65:e55d6faee9d1
    25             </xsd:complexType>
    25             </xsd:complexType>
    26           </xsd:element>
    26           </xsd:element>
    27         </xsd:schema>""")[0]["BaseParams"]
    27         </xsd:schema>""")[0]["BaseParams"]
    28 
    28 
    29 NameTypeSeparator = '@'
    29 NameTypeSeparator = '@'
       
    30 
       
    31 class MiniTextControler:
       
    32     
       
    33     def __init__(self, filepath):
       
    34         self.FilePath = filepath
       
    35         
       
    36     def SetCurrentElementEditingText(self, text):
       
    37         file = open(self.FilePath, "w")
       
    38         file.write(text)
       
    39         file.close()
       
    40         
       
    41     def GetCurrentElementEditingText(self):
       
    42         if os.path.isfile(self.FilePath):
       
    43             file = open(self.FilePath, "r")
       
    44             text = file.read()
       
    45             file.close()
       
    46             return text
       
    47         return ""
       
    48     
       
    49     def StartBuffering(self):
       
    50         pass
       
    51 
       
    52     def EndBuffering(self):
       
    53         pass
       
    54 
       
    55     def BufferProject(self):
       
    56         pass
    30 
    57 
    31 class PlugTemplate:
    58 class PlugTemplate:
    32     """
    59     """
    33     This class is the one that define plugins.
    60     This class is the one that define plugins.
    34     """
    61     """
   694     
   721     
   695     def _getIECcodepath(self):
   722     def _getIECcodepath(self):
   696         # define name for IEC code file
   723         # define name for IEC code file
   697         return os.path.join(self._getBuildPath(), "plc.st")
   724         return os.path.join(self._getBuildPath(), "plc.st")
   698     
   725     
       
   726     def _getIECgeneratedcodepath(self):
       
   727         # define name for IEC generated code file
       
   728         return os.path.join(self._getBuildPath(), "generated_plc.st")
       
   729     
       
   730     def _getIECrawcodepath(self):
       
   731         # define name for IEC raw code file
       
   732         return os.path.join(self._getBuildPath(), "raw_plc.st")
       
   733     
   699     def _Generate_SoftPLC(self, logger):
   734     def _Generate_SoftPLC(self, logger):
   700         """
   735         """
   701         Generate SoftPLC ST/IL/SFC code out of PLCOpenEditor controller, and compile it with IEC2C
   736         Generate SoftPLC ST/IL/SFC code out of PLCOpenEditor controller, and compile it with IEC2C
   702         @param buildpath: path where files should be created
   737         @param buildpath: path where files should be created
   703         @param logger: the log pseudo file
   738         @param logger: the log pseudo file
   706         # Update PLCOpenEditor Plugin Block types before generate ST code
   741         # Update PLCOpenEditor Plugin Block types before generate ST code
   707         self.RefreshPluginsBlockLists()
   742         self.RefreshPluginsBlockLists()
   708         
   743         
   709         logger.write("Generating SoftPLC IEC-61131 ST/IL/SFC code...\n")
   744         logger.write("Generating SoftPLC IEC-61131 ST/IL/SFC code...\n")
   710         buildpath = self._getBuildPath()
   745         buildpath = self._getBuildPath()
   711         # define name for IEC code file
       
   712         plc_file = self._getIECcodepath()
       
   713         # ask PLCOpenEditor controller to write ST/IL/SFC code file
   746         # ask PLCOpenEditor controller to write ST/IL/SFC code file
   714         result = self.GenerateProgram(plc_file)
   747         result = self.GenerateProgram(self._getIECgeneratedcodepath())
   715         if not result:
   748         if not result:
   716             # Failed !
   749             # Failed !
   717             logger.write_error("Error : ST/IL/SFC code generator returned %d\n"%result)
   750             logger.write_error("Error : ST/IL/SFC code generator returned %d\n"%result)
   718             return False
   751             return False
       
   752         plc_file = open(self._getIECcodepath(), "w")
       
   753         if os.path.isfile(self._getIECrawcodepath()):
       
   754             plc_file.write(open(self._getIECrawcodepath(), "r").read())
       
   755             plc_file.write("\n")
       
   756         plc_file.write(open(self._getIECgeneratedcodepath(), "r").read())
       
   757         plc_file.close()
   719         logger.write("Compiling IEC Program in to C code...\n")
   758         logger.write("Compiling IEC Program in to C code...\n")
   720         # Now compile IEC code into many C files
   759         # Now compile IEC code into many C files
   721         # files are listed to stdout, and errors to stderr. 
   760         # files are listed to stdout, and errors to stderr. 
   722         status, result, err_result = logger.LogCommand("%s %s -I %s %s"%(iec2c_path, plc_file, ieclib_path, buildpath), no_stdout=True)
   761         status, result, err_result = logger.LogCommand("%s %s -I %s %s"%(iec2c_path, self._getIECcodepath(), ieclib_path, buildpath), no_stdout=True)
   723         if status:
   762         if status:
   724             # Failed !
   763             # Failed !
   725             logger.write_error("Error : IEC to C compiler returned %d\n"%status)
   764             logger.write_error("Error : IEC to C compiler returned %d\n"%status)
   726             return False
   765             return False
   727         # Now extract C files of stdout
   766         # Now extract C files of stdout
   867         ST_viewer.SetKeywords(IEC_KEYWORDS)
   906         ST_viewer.SetKeywords(IEC_KEYWORDS)
   868         try:
   907         try:
   869             text = file(plc_file).read()
   908             text = file(plc_file).read()
   870         except:
   909         except:
   871             text = '(* No IEC code have been generated at that time ! *)'
   910             text = '(* No IEC code have been generated at that time ! *)'
   872         ST_viewer.SetText(text)
   911         ST_viewer.SetText(text = text)
       
   912             
       
   913         new_dialog.Show()
       
   914 
       
   915     def _editIECrawcode(self, logger):
       
   916         new_dialog = wx.Frame(None)
       
   917         controler = MiniTextControler(self._getIECrawcodepath())
       
   918         ST_viewer = TextViewer(new_dialog, None, controler)
       
   919         #ST_viewer.Enable(False)
       
   920         ST_viewer.SetKeywords(IEC_KEYWORDS)
       
   921         ST_viewer.RefreshView()
   873             
   922             
   874         new_dialog.Show()
   923         new_dialog.Show()
   875 
   924 
   876     def _EditPLC(self, logger):
   925     def _EditPLC(self, logger):
   877         if self.PLCEditor is None:
   926         if self.PLCEditor is None:
   893         logger.write_error("Not impl\n")
   942         logger.write_error("Not impl\n")
   894     
   943     
   895     def _Run(self, logger):
   944     def _Run(self, logger):
   896         logger.write_error("Not impl\n")
   945         logger.write_error("Not impl\n")
   897 
   946 
   898     PluginMethods = [("EditPLC",_EditPLC), ("Build",_build), ("Clean",_Clean), ("Run",_Run), ("Show IEC code",_showIECcode)]
   947     PluginMethods = [
       
   948         {"bitmap" : os.path.join("images", "editPLC.png"),
       
   949          "name" : "Edit PLC",
       
   950          "tooltip" : "Edit PLC program with PLCOpenEditor",
       
   951          "method" : _EditPLC},
       
   952         {"bitmap" : os.path.join("images", "Build.png"),
       
   953          "name" : "Build",
       
   954          "tooltip" : "Build project into build folder",
       
   955          "method" : _build},
       
   956         {"bitmap" : os.path.join("images", "Clean.png"),
       
   957          "name" : "Clean",
       
   958          "tooltip" : "Clean project build folder",
       
   959          "method" : _Clean},
       
   960         {"bitmap" : os.path.join("images", "Run.png"),
       
   961          "name" : "Run",
       
   962          "tooltip" : "Run PLC from build folder",
       
   963          "method" : _Run},
       
   964         {"bitmap" : os.path.join("images", "ShowIECcode.png"),
       
   965          "name" : "Show IEC code",
       
   966          "tooltip" : "Show IEC code generated by PLCGenerator",
       
   967          "method" : _showIECcode},
       
   968         {"name" : "Edit IEC raw code",
       
   969          "tooltip" : "Show IEC code generated by PLCGenerator",
       
   970          "method" : _editIECrawcode}
       
   971     ]
       
   972