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 |