357 PluginMethods = [ |
357 PluginMethods = [ |
358 {"bitmap" : opjimg("Build"), |
358 {"bitmap" : opjimg("Build"), |
359 "name" : _("Build"), |
359 "name" : _("Build"), |
360 "tooltip" : _("Build project into build folder"), |
360 "tooltip" : _("Build project into build folder"), |
361 "method" : "_build"}, |
361 "method" : "_build"}, |
|
362 {"bitmap" : opjimg("Run"), |
|
363 "name" : _("Run"), |
|
364 "shown" : False, |
|
365 "tooltip" : _("Start PLC"), |
|
366 "method" : "_Run"}, |
|
367 {"bitmap" : opjimg("Stop"), |
|
368 "name" : _("Stop"), |
|
369 "shown" : False, |
|
370 "tooltip" : _("Stop Running PLC"), |
|
371 "method" : "_Stop"}, |
|
372 {"bitmap" : opjimg("Transfer"), |
|
373 "name" : _("Transfer"), |
|
374 "shown" : False, |
|
375 "tooltip" : _("Transfer PLC"), |
|
376 "method" : "_Transfer"}, |
362 ] |
377 ] |
363 |
378 |
364 def __init__(self, frame, logger): |
379 def __init__(self, frame, logger): |
365 PluginsRoot.__init__(self, frame, logger) |
380 PluginsRoot.__init__(self, frame, logger) |
|
381 |
366 self.PlugChildsTypes += [("LPCBus", LPCBus, "LPC bus")] |
382 self.PlugChildsTypes += [("LPCBus", LPCBus, "LPC bus")] |
|
383 |
|
384 self.OnlineMode = 0 |
|
385 self.OnlinePath = None |
367 |
386 |
368 def GetProjectName(self): |
387 def GetProjectName(self): |
369 return self.Project.getname() |
388 return self.Project.getname() |
370 |
389 |
371 def GetDefaultTarget(self): |
390 def GetDefaultTarget(self): |
375 target.setcontent({"name": "Makefile", "value": target_value}) |
394 target.setcontent({"name": "Makefile", "value": target_value}) |
376 return target |
395 return target |
377 |
396 |
378 def SetProjectName(self, name): |
397 def SetProjectName(self, name): |
379 return self.Project.setname(name) |
398 return self.Project.setname(name) |
|
399 |
|
400 def SetOnlineMode(self, mode, path=None): |
|
401 self.OnlineMode = mode |
|
402 self.OnlinePath = path |
|
403 self.UpdateMethodsFromPLCStatus() |
380 |
404 |
381 # Update a PLCOpenEditor Pou variable name |
405 # Update a PLCOpenEditor Pou variable name |
382 def UpdateProjectVariableName(self, old_name, new_name): |
406 def UpdateProjectVariableName(self, old_name, new_name): |
383 self.Project.updateElementName(old_name, new_name) |
407 self.Project.updateElementName(old_name, new_name) |
384 self.BufferProject() |
408 self.BufferProject() |
427 |
451 |
428 return None |
452 return None |
429 |
453 |
430 def SaveProject(self): |
454 def SaveProject(self): |
431 self.SaveXMLFile(self.ProjectPath) |
455 self.SaveXMLFile(self.ProjectPath) |
|
456 |
|
457 ############# Real PLC object access ############# |
|
458 def UpdateMethodsFromPLCStatus(self): |
|
459 # Get PLC state : Running or Stopped |
|
460 # TODO : use explicit status instead of boolean |
|
461 if self.OnlineMode == 0: |
|
462 status = "Disconnected" |
|
463 elif self.OnlineMode == 1: |
|
464 status = "Connected" |
|
465 elif self._connector is not None: |
|
466 status = self._connector.GetPLCstatus() |
|
467 else: |
|
468 status = "Disconnected" |
|
469 if(self.previous_plcstate != status): |
|
470 for args in { |
|
471 "Started" : [("_build", False), |
|
472 ("_Run", False), |
|
473 ("_Stop", True), |
|
474 ("_Transfer", False)], |
|
475 "Stopped" : [("_build", False), |
|
476 ("_Run", True), |
|
477 ("_Stop", False), |
|
478 ("_Transfer", False)], |
|
479 "Connected" : [("_build", False), |
|
480 ("_Run", False), |
|
481 ("_Stop", False), |
|
482 ("_Transfer", True)], |
|
483 "Disconnected" :[("_build", True), |
|
484 ("_Run", False), |
|
485 ("_Stop", False), |
|
486 ("_Transfer", False)], |
|
487 }.get(status,[]): |
|
488 self.ShowMethod(*args) |
|
489 self.previous_plcstate = status |
|
490 return True |
|
491 return False |
432 |
492 |
433 #------------------------------------------------------------------------------- |
493 #------------------------------------------------------------------------------- |
434 # LPCBeremiz Class |
494 # LPCBeremiz Class |
435 #------------------------------------------------------------------------------- |
495 #------------------------------------------------------------------------------- |
436 |
496 |
781 else: |
841 else: |
782 wx.CallAfter(self.PluginRoot._build) |
842 wx.CallAfter(self.PluginRoot._build) |
783 |
843 |
784 def SetProjectName(self, name): |
844 def SetProjectName(self, name): |
785 self.PluginRoot.SetProjectName(name) |
845 self.PluginRoot.SetProjectName(name) |
|
846 self.RestartTimer() |
|
847 |
|
848 def SetOnlineMode(self, mode, path=None): |
|
849 self.PluginRoot.SetOnlineMode(mode, path) |
786 self.RestartTimer() |
850 self.RestartTimer() |
787 |
851 |
788 def AddBus(self, iec_channel, name, icon=None): |
852 def AddBus(self, iec_channel, name, icon=None): |
789 for child in self.PluginRoot.IterChilds(): |
853 for child in self.PluginRoot.IterChilds(): |
790 if child.BaseParams.getName() == name: |
854 if child.BaseParams.getName() == name: |
1005 "Show": ([], 0), |
1069 "Show": ([], 0), |
1006 "Refresh": ([], 0), |
1070 "Refresh": ([], 0), |
1007 "Close": ([], 0), |
1071 "Close": ([], 0), |
1008 "Compile": ([], 0), |
1072 "Compile": ([], 0), |
1009 "SetProjectName": ([str], 0), |
1073 "SetProjectName": ([str], 0), |
|
1074 "SetOnlineMode": ([int, str], 1), |
1010 "AddBus": ([int, str, str], 1), |
1075 "AddBus": ([int, str, str], 1), |
1011 "RenameBus": ([int, str], 0), |
1076 "RenameBus": ([int, str], 0), |
1012 "ChangeBusIECChannel": ([int, int], 0), |
1077 "ChangeBusIECChannel": ([int, int], 0), |
1013 "RemoveBus": ([int], 0), |
1078 "RemoveBus": ([int], 0), |
1014 "AddModule": ([location, int, str, str], 1), |
1079 "AddModule": ([location, int, str, str], 1), |