ProjectController.py
changeset 1739 ec153828ded2
parent 1737 a39c2918c015
child 1740 b789b695b5c6
equal deleted inserted replaced
1738:d2e979738700 1739:ec153828ded2
   545         # Ask user to choose a path with write permissions
   545         # Ask user to choose a path with write permissions
   546         if wx.Platform == '__WXMSW__':
   546         if wx.Platform == '__WXMSW__':
   547             path = os.getenv("USERPROFILE")
   547             path = os.getenv("USERPROFILE")
   548         else:
   548         else:
   549             path = os.getenv("HOME")
   549             path = os.getenv("HOME")
   550         dirdialog = wx.DirDialog(self.AppFrame , _("Choose a directory to save project"), path, wx.DD_NEW_DIR_BUTTON)
   550         dirdialog = wx.DirDialog(self.AppFrame, _("Choose a directory to save project"), path, wx.DD_NEW_DIR_BUTTON)
   551         answer = dirdialog.ShowModal()
   551         answer = dirdialog.ShowModal()
   552         dirdialog.Destroy()
   552         dirdialog.Destroy()
   553         if answer == wx.ID_OK:
   553         if answer == wx.ID_OK:
   554             newprojectpath = dirdialog.GetPath()
   554             newprojectpath = dirdialog.GetPath()
   555             if os.path.isdir(newprojectpath):
   555             if os.path.isdir(newprojectpath):
   962         self.GetIECProgramsAndVariables()
   962         self.GetIECProgramsAndVariables()
   963 
   963 
   964         # prepare debug code
   964         # prepare debug code
   965         variable_decl_array = []
   965         variable_decl_array = []
   966         bofs = 0
   966         bofs = 0
   967         for v in self._DbgVariablesList :
   967         for v in self._DbgVariablesList:
   968             sz = DebugTypesSize.get(v["type"], 0)
   968             sz = DebugTypesSize.get(v["type"], 0)
   969             variable_decl_array += [
   969             variable_decl_array += [
   970                 "{&(%(C_path)s), " % v+
   970                 "{&(%(C_path)s), " % v+
   971                 {"EXT":"%(type)s_P_ENUM",
   971                 {"EXT":"%(type)s_P_ENUM",
   972                  "IN":"%(type)s_P_ENUM",
   972                  "IN":"%(type)s_P_ENUM",
  1079             self.ResetBuildMD5()
  1079             self.ResetBuildMD5()
  1080             return False
  1080             return False
  1081 
  1081 
  1082         # Build
  1082         # Build
  1083         try:
  1083         try:
  1084             if not builder.build() :
  1084             if not builder.build():
  1085                 self.logger.write_error(_("C Build failed.\n"))
  1085                 self.logger.write_error(_("C Build failed.\n"))
  1086                 return False
  1086                 return False
  1087         except Exception, exc:
  1087         except Exception, exc:
  1088             self.logger.write_error(_("C Build crashed !\n"))
  1088             self.logger.write_error(_("C Build crashed !\n"))
  1089             self.logger.write_error(traceback.format_exc())
  1089             self.logger.write_error(traceback.format_exc())
  1334         if status is None:
  1334         if status is None:
  1335             self._SetConnector(None, False)
  1335             self._SetConnector(None, False)
  1336             status = "Disconnected"
  1336             status = "Disconnected"
  1337         if(self.previous_plcstate != status):
  1337         if(self.previous_plcstate != status):
  1338             for args in {
  1338             for args in {
  1339                      "Started" :     [("_Run", False),
  1339                      "Started":     [("_Run", False),
  1340                                       ("_Stop", True)],
  1340                                      ("_Stop", True)],
  1341                      "Stopped" :     [("_Run", True),
  1341                      "Stopped":     [("_Run", True),
  1342                                       ("_Stop", False)],
  1342                                      ("_Stop", False)],
  1343                      "Empty" :       [("_Run", False),
  1343                      "Empty":       [("_Run", False),
  1344                                       ("_Stop", False)],
  1344                                      ("_Stop", False)],
  1345                      "Broken" :      [],
  1345                      "Broken":      [],
  1346                      "Disconnected" :[("_Run", False),
  1346                      "Disconnected":[("_Run", False),
  1347                                       ("_Stop", False),
  1347                                      ("_Stop", False),
  1348                                       ("_Transfer", False),
  1348                                      ("_Transfer", False),
  1349                                       ("_Connect", True),
  1349                                      ("_Connect", True),
  1350                                       ("_Disconnect", False)],
  1350                                      ("_Disconnect", False)],
  1351                    }.get(status,[]):
  1351                    }.get(status,[]):
  1352                 self.ShowMethod(*args)
  1352                 self.ShowMethod(*args)
  1353             self.previous_plcstate = status
  1353             self.previous_plcstate = status
  1354             if self.AppFrame is not None:
  1354             if self.AppFrame is not None:
  1355                 updated = True
  1355                 updated = True
  1567         debug_getvar_retry = 0
  1567         debug_getvar_retry = 0
  1568         while (not self.debug_break) and (self._connector is not None):
  1568         while (not self.debug_break) and (self._connector is not None):
  1569             plc_status, Traces = self._connector.GetTraceVariables()
  1569             plc_status, Traces = self._connector.GetTraceVariables()
  1570             debug_getvar_retry += 1
  1570             debug_getvar_retry += 1
  1571             #print [dict.keys() for IECPath, (dict, log, status, fvalue) in self.IECdebug_datas.items()]
  1571             #print [dict.keys() for IECPath, (dict, log, status, fvalue) in self.IECdebug_datas.items()]
  1572             if plc_status == "Started" :
  1572             if plc_status == "Started":
  1573                 if len(Traces) > 0:
  1573                 if len(Traces) > 0:
  1574                     Failed = False
  1574                     Failed = False
  1575                     self.IECdebug_lock.acquire()
  1575                     self.IECdebug_lock.acquire()
  1576                     for debug_tick, debug_buff in Traces :
  1576                     for debug_tick, debug_buff in Traces:
  1577                         debug_vars = UnpackDebugBuffer(debug_buff, self.TracedIECTypes)
  1577                         debug_vars = UnpackDebugBuffer(debug_buff, self.TracedIECTypes)
  1578                         if (debug_vars is not None and
  1578                         if (debug_vars is not None and
  1579                             len(debug_vars) == len(self.TracedIECPath)):
  1579                             len(debug_vars) == len(self.TracedIECPath)):
  1580                             for IECPath, values_buffer, value in izip(
  1580                             for IECPath, values_buffer, value in izip(
  1581                                     self.TracedIECPath,
  1581                                     self.TracedIECPath,
  1793     def _Transfer(self):
  1793     def _Transfer(self):
  1794         # Get the last build PLC's
  1794         # Get the last build PLC's
  1795         MD5 = self.GetLastBuildMD5()
  1795         MD5 = self.GetLastBuildMD5()
  1796 
  1796 
  1797         # Check if md5 file is empty : ask user to build PLC
  1797         # Check if md5 file is empty : ask user to build PLC
  1798         if MD5 is None :
  1798         if MD5 is None:
  1799             self.logger.write_error(_("Failed : Must build before transfer.\n"))
  1799             self.logger.write_error(_("Failed : Must build before transfer.\n"))
  1800             return False
  1800             return False
  1801 
  1801 
  1802         # Compare PLC project with PLC on target
  1802         # Compare PLC project with PLC on target
  1803         if self._connector.MatchMD5(MD5):
  1803         if self._connector.MatchMD5(MD5):
  1816 
  1816 
  1817         # Send PLC on target
  1817         # Send PLC on target
  1818         builder = self.GetBuilder()
  1818         builder = self.GetBuilder()
  1819         if builder is not None:
  1819         if builder is not None:
  1820             data = builder.GetBinaryCode()
  1820             data = builder.GetBinaryCode()
  1821             if data is not None :
  1821             if data is not None:
  1822                 if self._connector.NewPLC(MD5, data, extrafiles) and self.GetIECProgramsAndVariables():
  1822                 if self._connector.NewPLC(MD5, data, extrafiles) and self.GetIECProgramsAndVariables():
  1823                     self.UnsubscribeAllDebugIECVariable()
  1823                     self.UnsubscribeAllDebugIECVariable()
  1824                     self.ProgramTransferred()
  1824                     self.ProgramTransferred()
  1825                     if self.AppFrame is not None:
  1825                     if self.AppFrame is not None:
  1826                         self.AppFrame.CloseObsoleteDebugTabs()
  1826                         self.AppFrame.CloseObsoleteDebugTabs()
  1834                 self.logger.write_error(_("No PLC to transfer (did build succeed ?)\n"))
  1834                 self.logger.write_error(_("No PLC to transfer (did build succeed ?)\n"))
  1835 
  1835 
  1836         wx.CallAfter(self.UpdateMethodsFromPLCStatus)
  1836         wx.CallAfter(self.UpdateMethodsFromPLCStatus)
  1837 
  1837 
  1838     StatusMethods = [
  1838     StatusMethods = [
  1839         {"bitmap" : "Build",
  1839         {
  1840          "name" : _("Build"),
  1840             "bitmap":    "Build",
  1841          "tooltip" : _("Build project into build folder"),
  1841             "name":    _("Build"),
  1842          "method" : "_Build"},
  1842             "tooltip": _("Build project into build folder"),
  1843         {"bitmap" : "Clean",
  1843             "method":   "_Build"
  1844          "name" : _("Clean"),
  1844         },
  1845          "enabled" : False,
  1845         {
  1846          "tooltip" : _("Clean project build folder"),
  1846             "bitmap":    "Clean",
  1847          "method" : "_Clean"},
  1847             "name":    _("Clean"),
  1848         {"bitmap" : "Run",
  1848             "tooltip": _("Clean project build folder"),
  1849          "name" : _("Run"),
  1849             "method":   "_Clean",
  1850          "shown" : False,
  1850             "enabled":    False,
  1851          "tooltip" : _("Start PLC"),
  1851         },
  1852          "method" : "_Run"},
  1852         {
  1853         {"bitmap" : "Stop",
  1853             "bitmap":    "Run",
  1854          "name" : _("Stop"),
  1854             "name":    _("Run"),
  1855          "shown" : False,
  1855             "tooltip": _("Start PLC"),
  1856          "tooltip" : _("Stop Running PLC"),
  1856             "method":   "_Run",
  1857          "method" : "_Stop"},
  1857             "shown":      False,
  1858         {"bitmap" : "Connect",
  1858         },
  1859          "name" : _("Connect"),
  1859         {
  1860          "tooltip" : _("Connect to the target PLC"),
  1860             "bitmap":    "Stop",
  1861          "method" : "_Connect"},
  1861             "name":    _("Stop"),
  1862         {"bitmap" : "Transfer",
  1862             "tooltip": _("Stop Running PLC"),
  1863          "name" : _("Transfer"),
  1863             "method":   "_Stop",
  1864          "shown" : False,
  1864             "shown":      False,
  1865          "tooltip" : _("Transfer PLC"),
  1865         },
  1866          "method" : "_Transfer"},
  1866         {
  1867         {"bitmap" : "Disconnect",
  1867             "bitmap":    "Connect",
  1868          "name" : _("Disconnect"),
  1868             "name":    _("Connect"),
  1869          "shown" : False,
  1869             "tooltip": _("Connect to the target PLC"),
  1870          "tooltip" : _("Disconnect from PLC"),
  1870             "method":   "_Connect"
  1871          "method" : "_Disconnect"},
  1871         },
  1872         {"bitmap" : "ShowIECcode",
  1872         {
  1873          "name" : _("Show code"),
  1873             "bitmap":    "Transfer",
  1874          "shown" : False,
  1874             "name":    _("Transfer"),
  1875          "tooltip" : _("Show IEC code generated by PLCGenerator"),
  1875             "tooltip": _("Transfer PLC"),
  1876          "method" : "_showIECcode"},
  1876             "method":   "_Transfer",
       
  1877             "shown":      False,
       
  1878         },
       
  1879         {
       
  1880             "bitmap":    "Disconnect",
       
  1881             "name":    _("Disconnect"),
       
  1882             "tooltip": _("Disconnect from PLC"),
       
  1883             "method":   "_Disconnect",
       
  1884             "shown":      False,
       
  1885         },
       
  1886         {
       
  1887             "bitmap":    "ShowIECcode",
       
  1888             "name":    _("Show code"),
       
  1889             "tooltip": _("Show IEC code generated by PLCGenerator"),
       
  1890             "method":   "_showIECcode",
       
  1891             "shown":      False,
       
  1892         },
  1877     ]
  1893     ]
  1878 
  1894 
  1879     ConfNodeMethods = [
  1895     ConfNodeMethods = [
  1880         {"bitmap" : "editIECrawcode",
  1896         {
  1881          "name" : _("Raw IEC code"),
  1897             "bitmap":    "editIECrawcode",
  1882          "tooltip" : _("Edit raw IEC code added to code generated by PLCGenerator"),
  1898             "name":    _("Raw IEC code"),
  1883          "method" : "_editIECrawcode"},
  1899             "tooltip": _("Edit raw IEC code added to code generated by PLCGenerator"),
  1884         {"bitmap" : "ManageFolder",
  1900             "method":   "_editIECrawcode"
  1885          "name" : _("Project Files"),
  1901         },
  1886          "tooltip" : _("Open a file explorer to manage project files"),
  1902         {
  1887          "method" : "_OpenProjectFiles"},
  1903             "bitmap":    "ManageFolder",
       
  1904             "name":    _("Project Files"),
       
  1905             "tooltip": _("Open a file explorer to manage project files"),
       
  1906             "method":   "_OpenProjectFiles"
       
  1907         },
  1888     ]
  1908     ]
  1889 
  1909 
  1890 
  1910 
  1891     def EnableMethod(self, method, value):
  1911     def EnableMethod(self, method, value):
  1892         for d in self.StatusMethods:
  1912         for d in self.StatusMethods: