LPCBeremiz.py
changeset 678 92a1ec3c6fdd
parent 677 607731b33026
child 680 61746934df41
child 682 9d20df7c144a
equal deleted inserted replaced
677:607731b33026 678:92a1ec3c6fdd
    58 if __name__ == '__main__':
    58 if __name__ == '__main__':
    59     __builtin__.__dict__['_'] = wx.GetTranslation#unicode_translation
    59     __builtin__.__dict__['_'] = wx.GetTranslation#unicode_translation
    60 
    60 
    61 from Beremiz import *
    61 from Beremiz import *
    62 from plugger import PluginsRoot, PlugTemplate, opjimg, connectors
    62 from plugger import PluginsRoot, PlugTemplate, opjimg, connectors
    63 from plugins.canfestival import RootClass as CanOpenRootClass
       
    64 from plugins.canfestival.canfestival import _SlavePlug, _NodeListPlug, NodeManager
       
    65 from plcopen.structures import LOCATIONDATATYPES
    63 from plcopen.structures import LOCATIONDATATYPES
    66 from PLCControler import LOCATION_PLUGIN, LOCATION_MODULE, LOCATION_GROUP,\
    64 from PLCControler import LOCATION_PLUGIN, LOCATION_MODULE, LOCATION_GROUP,\
    67                          LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY
    65                          LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY
    68 from PLCOpenEditor import IDEFrame, ProjectDialog
    66 from PLCOpenEditor import IDEFrame, ProjectDialog
    69 
    67 
   187     
   185     
   188     def __getitem__(self, key):
   186     def __getitem__(self, key):
   189         if key == "children":
   187         if key == "children":
   190             return self.VariableLocationTree
   188             return self.VariableLocationTree
   191         raise KeyError, "Only 'children' key is available"
   189         raise KeyError, "Only 'children' key is available"
   192     
       
   193     def PlugEnabled(self):
       
   194         return None
       
   195     
   190     
   196     def SetIcon(self, icon):
   191     def SetIcon(self, icon):
   197         self.Icon = icon
   192         self.Icon = icon
   198     
   193     
   199     def _GetChildBySomething(self, something, toks):
   194     def _GetChildBySomething(self, something, toks):
   358         
   353         
   359         matiec_flags = '"-I%s"'%os.path.abspath(self.GetPlugRoot().GetIECLibPath())
   354         matiec_flags = '"-I%s"'%os.path.abspath(self.GetPlugRoot().GetIECLibPath())
   360         return [(Gen_Module_path, matiec_flags)],"",True
   355         return [(Gen_Module_path, matiec_flags)],"",True
   361 
   356 
   362 #-------------------------------------------------------------------------------
   357 #-------------------------------------------------------------------------------
   363 #                          LPC CanFestival Plugin Class
       
   364 #-------------------------------------------------------------------------------
       
   365 
       
   366 DEFAULT_SETTINGS = {
       
   367     "CAN_Baudrate": "125K",
       
   368     "Slave_NodeId": 2,
       
   369     "Master_NodeId": 1,
       
   370 }
       
   371 
       
   372 class LPCCanOpenSlave(_SlavePlug):
       
   373     XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?>
       
   374     <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       
   375       <xsd:element name="CanFestivalSlaveNode">
       
   376         <xsd:complexType>
       
   377           <xsd:attribute name="CAN_Baudrate" type="xsd:string" use="optional" default="%(CAN_Baudrate)s"/>
       
   378           <xsd:attribute name="NodeId" type="xsd:string" use="optional" default="%(Slave_NodeId)d"/>
       
   379           <xsd:attribute name="Sync_Align" type="xsd:integer" use="optional" default="0"/>
       
   380           <xsd:attribute name="Sync_Align_Ratio" use="optional" default="50">
       
   381             <xsd:simpleType>
       
   382                 <xsd:restriction base="xsd:integer">
       
   383                     <xsd:minInclusive value="1"/>
       
   384                     <xsd:maxInclusive value="99"/>
       
   385                 </xsd:restriction>
       
   386             </xsd:simpleType>
       
   387           </xsd:attribute>
       
   388         </xsd:complexType>
       
   389       </xsd:element>
       
   390     </xsd:schema>
       
   391     """ % DEFAULT_SETTINGS
       
   392     
       
   393     def __init__(self):
       
   394         # TODO change netname when name change
       
   395         NodeManager.__init__(self)
       
   396         odfilepath = self.GetSlaveODPath()
       
   397         if(os.path.isfile(odfilepath)):
       
   398             self.OpenFileInCurrent(odfilepath)
       
   399         else:
       
   400             self.CreateNewNode("SlaveNode",  # Name - will be changed at build time
       
   401                                0x00,         # NodeID - will be changed at build time
       
   402                                "slave",      # Type
       
   403                                "",           # description 
       
   404                                "None",       # profile
       
   405                                "", # prfile filepath
       
   406                                "heartbeat",  # NMT
       
   407                                [])           # options
       
   408             self.OnPlugSave()
       
   409     
       
   410     def GetCanDevice(self):
       
   411         return str(self.BaseParams.getIEC_Channel())
       
   412     
       
   413 class LPCCanOpenMaster(_NodeListPlug):
       
   414     XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?>
       
   415     <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       
   416       <xsd:element name="CanFestivalNode">
       
   417         <xsd:complexType>
       
   418           <xsd:attribute name="CAN_Baudrate" type="xsd:string" use="optional" default="%(CAN_Baudrate)s"/>
       
   419           <xsd:attribute name="NodeId" type="xsd:string" use="optional" default="%(Master_NodeId)d"/>
       
   420           <xsd:attribute name="Sync_TPDOs" type="xsd:boolean" use="optional" default="true"/>
       
   421         </xsd:complexType>
       
   422       </xsd:element>
       
   423     </xsd:schema>
       
   424     """ % DEFAULT_SETTINGS
       
   425 
       
   426     def GetCanDevice(self):
       
   427         return str(self.BaseParams.getIEC_Channel())
       
   428 
       
   429 class LPCCanOpen(CanOpenRootClass):
       
   430     XSD = None
       
   431     PlugChildsTypes = [("CanOpenNode",LPCCanOpenMaster, "CanOpen Master"),
       
   432                        ("CanOpenSlave",LPCCanOpenSlave, "CanOpen Slave")]
       
   433     
       
   434     def LoadChilds(self):
       
   435         PlugTemplate.LoadChilds(self)
       
   436         
       
   437         if self.GetChildByName("Master") is None:
       
   438             master = self.PlugAddChild("Master", "CanOpenNode", 0)
       
   439             master.BaseParams.setEnabled(False)
       
   440         
       
   441         if self.GetChildByName("Slave") is None:
       
   442             slave = self.PlugAddChild("Slave", "CanOpenSlave", 1)
       
   443             slave.BaseParams.setEnabled(False)
       
   444     
       
   445 
       
   446 #-------------------------------------------------------------------------------
       
   447 #                              LPCPluginsRoot Class
   358 #                              LPCPluginsRoot Class
   448 #-------------------------------------------------------------------------------
   359 #-------------------------------------------------------------------------------
   449 
   360 
   450 def mycopytree(src, dst):
   361 def mycopytree(src, dst):
   451     """
   362     """
   498     def __init__(self, frame, logger, buildpath):
   409     def __init__(self, frame, logger, buildpath):
   499         self.OrigBuildPath = buildpath
   410         self.OrigBuildPath = buildpath
   500         
   411         
   501         PluginsRoot.__init__(self, frame, logger)
   412         PluginsRoot.__init__(self, frame, logger)
   502         
   413         
   503         self.PlugChildsTypes += [("LPCBus", LPCBus, "LPC bus"), ("CanOpen", LPCCanOpen, "CanOpen bus")]
   414         self.PlugChildsTypes += [("LPCBus", LPCBus, "LPC bus")]
   504         self.PlugType = "LPC"
   415         self.PlugType = "LPC"
   505         
   416         
   506         self.OnlineMode = "OFF"
   417         self.OnlineMode = "OFF"
   507         self.LPCConnector = None
   418         self.LPCConnector = None
   508         
   419         
   676             result = self.LoadXMLParams()
   587             result = self.LoadXMLParams()
   677             if result:
   588             if result:
   678                 return result
   589                 return result
   679             #Load and init all the childs
   590             #Load and init all the childs
   680             self.LoadChilds()
   591             self.LoadChilds()
   681         
       
   682         if self.GetChildByName("CanOpen") is None:
       
   683             canopen = self.PlugAddChild("CanOpen", "CanOpen", 0)
       
   684             canopen.BaseParams.setEnabled(False)
       
   685             canopen.LoadChilds()
       
   686         
   592         
   687         if self.PlugTestModified():
   593         if self.PlugTestModified():
   688             self.SaveProject()
   594             self.SaveProject()
   689         
   595         
   690         if wx.GetApp() is None:
   596         if wx.GetApp() is None:
  1135             self.PluginInfos[plugin]["locations_infos"]["root"]["right"] = None
  1041             self.PluginInfos[plugin]["locations_infos"]["root"]["right"] = None
  1136             self.PluginInfos[plugin]["locations_infos"]["root"]["children"] = []
  1042             self.PluginInfos[plugin]["locations_infos"]["root"]["children"] = []
  1137         
  1043         
  1138         self.PluginTreeSizer.AddWindow(leftwindow, 0, border=0, flag=wx.GROW)
  1044         self.PluginTreeSizer.AddWindow(leftwindow, 0, border=0, flag=wx.GROW)
  1139         
  1045         
  1140         leftwindowvsizer = wx.BoxSizer(wx.VERTICAL)
       
  1141         leftwindow.SetSizer(leftwindowvsizer)
       
  1142         
       
  1143         leftwindowsizer = wx.BoxSizer(wx.HORIZONTAL)
  1046         leftwindowsizer = wx.BoxSizer(wx.HORIZONTAL)
  1144         leftwindowvsizer.AddSizer(leftwindowsizer, 0, border=0, flag=0)
  1047         leftwindow.SetSizer(leftwindowsizer)
  1145         
  1048                 
  1146         self.GenerateEnableButton(leftwindow, leftwindowsizer, plugin)
       
  1147         
       
  1148         st = wx.StaticText(leftwindow, -1)
  1049         st = wx.StaticText(leftwindow, -1)
  1149         st.SetFont(wx.Font(faces["size"], wx.DEFAULT, wx.NORMAL, wx.BOLD, faceName = faces["helv"]))
  1050         st.SetFont(wx.Font(faces["size"], wx.DEFAULT, wx.NORMAL, wx.BOLD, faceName = faces["helv"]))
  1150         st.SetLabel(plugin.GetFullIEC_Channel())
  1051         st.SetLabel(plugin.GetFullIEC_Channel())
  1151         leftwindowsizer.AddWindow(st, 0, border=5, flag=wx.RIGHT)
  1052         leftwindowsizer.AddWindow(st, 0, border=5, flag=wx.RIGHT)
  1152         
  1053         
  1202         st = wx.StaticText(leftwindow, st_id, size=wx.DefaultSize, style=wx.NO_BORDER)
  1103         st = wx.StaticText(leftwindow, st_id, size=wx.DefaultSize, style=wx.NO_BORDER)
  1203         st.SetFont(wx.Font(faces["size"] * 0.75, wx.DEFAULT, wx.NORMAL, wx.BOLD, faceName = faces["helv"]))
  1104         st.SetFont(wx.Font(faces["size"] * 0.75, wx.DEFAULT, wx.NORMAL, wx.BOLD, faceName = faces["helv"]))
  1204         st.SetLabel(plugin.MandatoryParams[1].getName())
  1105         st.SetLabel(plugin.MandatoryParams[1].getName())
  1205         leftwindowsizer.AddWindow(st, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
  1106         leftwindowsizer.AddWindow(st, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
  1206         
  1107         
  1207         rightwindow = self.GenerateParamsPanel(plugin, bkgdclr)
  1108         rightwindow = wx.Panel(self.PLCConfig, -1, size=wx.Size(-1, -1))
       
  1109         rightwindow.SetBackgroundColour(bkgdclr)
       
  1110         
  1208         self.PluginTreeSizer.AddWindow(rightwindow, 0, border=0, flag=wx.GROW)
  1111         self.PluginTreeSizer.AddWindow(rightwindow, 0, border=0, flag=wx.GROW)
  1209 
  1112 
  1210         self.PluginInfos[plugin]["left"] = leftwindow
  1113         self.PluginInfos[plugin]["left"] = leftwindow
  1211         self.PluginInfos[plugin]["right"] = rightwindow
  1114         self.PluginInfos[plugin]["right"] = rightwindow
  1212         for child in self.PluginInfos[plugin]["children"]:
  1115         for child in self.PluginInfos[plugin]["children"]: