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", |
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, |
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: |