plugins/svgui/svgui.py
author lbessard
Mon, 20 Aug 2007 14:28:08 +0200
changeset 11 75ae893d5eed
child 12 a1f9e514f708
permissions -rw-r--r--
Adding plugin support in Beremiz
11
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
     1
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
     2
TYPECONVERSION = {"BOOL" : "X", "SINT" : "B", "INT" : "W", "DINT" : "D", "LINT" : "L",
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
     3
    "USINT" : "B", "UINT" : "W", "UDINT" : "D", "ULINT" : "L", "REAL" : "D", "LREAL" : "L",
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
     4
    "STRING" : "B", "BYTE" : "B", "WORD" : "W", "DWORD" : "D", "LWORD" : "L", "WSTRING" : "W"}
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
     5
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
     6
def GetBlockGenerationFunction(beremiz):
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
     7
    def generate_svgui_block(generator, block, body, link):
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
     8
        controller = generator.GetController()
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
     9
        name = block.getInstanceName()
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    10
        type = block.getTypeName()
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    11
        block_infos = GetBlockType(type)
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    12
        bus_id, name = [word for word in name.split("_") if word != ""]
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    13
        block_id = beremiz.GetSVGUIElementId(bus_id, name)
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    14
        if block_id == None:
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    15
            raise ValueError, "No corresponding block found"
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    16
        if not generator.ComputedBlocks.get(name, False):
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    17
            for num, variable in enumerate(block.inputVariables.getVariable()):
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    18
                connections = variable.connectionPointIn.getConnections()
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    19
                if connections and len(connections) == 1:
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    20
                    parameter = "__I%s%d_%d_%d"%(TYPECONVERSION[block_infos["inputs"][num][1]], bus_id, block_id, num)
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    21
                    value = generator.ComputeFBDExpression(body, connections[0])
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    22
                    generator.Program += ("  %s := %s;\n"%(parameter, generator.ExtractModifier(variable, value)))
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    23
            generator.ComputedBlocks[name] = True
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    24
        if link:
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    25
            connectionPoint = link.getPosition()[-1]
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    26
            for num, variable in enumerate(block.outputVariables.getVariable()):
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    27
                blockPointx, blockPointy = variable.connectionPointOut.getRelPosition()
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    28
                if block.getX() + blockPointx == connectionPoint.getX() and block.getY() + blockPointy == connectionPoint.getY():
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    29
                    return "__Q%s%d_%d_%d"%(TYPECONVERSION[block_infos["outputs"][num][1]], bus_id, block_id, num)
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    30
            raise ValueError, "No output variable found"
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    31
        else:
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    32
            return None
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    33
    return generate_svgui_block
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    34
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    35
BlockList = {"name" : "SVGUI function blocks", "list" :
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    36
               [{"name" : "Container", "type" : "functionBlock", "extensible" : False, 
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    37
                 "inputs" : [("X","FLOAT","none"),("SetX","BOOL","none"),("Y","FLOAT","none"),("SetY","BOOL","none"),("Angle","FLOAT","none"),("SetAngle","BOOL","none")], 
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    38
                 "outputs" : [("X","FLOAT","none"),("X Changed","BOOL","none"),("Y","FLOAT","none"),("Y Changed","BOOL","none"),("Angle","FLOAT","none"),("Angle Changed","BOOL","none")],
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    39
                 "comment" : "SVGUI Container"},
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    40
                {"name" : "Button", "type" : "functionBlock", "extensible" : False, 
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    41
                 "inputs" : [("Show","BOOL","none"),("Toggle","BOOL","none")], 
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    42
                 "outputs" : [("Visible","BOOL","none"),("State","BOOL","none")],
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    43
                 "comment" : "SVGUI Button"},
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    44
                {"name" : "TextCtrl", "type" : "functionBlock", "extensible" : False, 
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    45
                 "inputs" : [("Text","STRING","none"),("Set Text","BOOL","none")], 
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    46
                 "outputs" : [("Text","STRING","none"),("Text Changed","BOOL","none")],
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    47
                 "comment" : "SVGUI Text Control"},
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    48
                {"name" : "ScrollBar", "type" : "functionBlock", "extensible" : False, 
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    49
                 "inputs" : [("Position","UINT","none"),("Set Position","BOOL","none")], 
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    50
                 "outputs" : [("Position","UINT","none"),("Position Changed","BOOL","none")],
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    51
                 "comment" : "SVGUI ScrollBar"},
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    52
                {"name" : "NoteBook", "type" : "functionBlock", "extensible" : False, 
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    53
                 "inputs" : [("Selected","UINT","none"),("Set Selected","BOOL","none")], 
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    54
                 "outputs" : [("Selected","UINT","none"),("Selected Changed","BOOL","none")],
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    55
                 "comment" : "SVGUI Notebook"},
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    56
                {"name" : "RotatingCtrl", "type" : "functionBlock", "extensible" : False, 
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    57
                 "inputs" : [("Angle","FLOAT","none"),("Set Angle","BOOL","none")], 
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    58
                 "outputs" : [("Angle","FLOAT","none"),("Angle changed","BOOL","none")],
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    59
                 "comment" : "SVGUI Rotating Control"},
75ae893d5eed Adding plugin support in Beremiz
lbessard
parents:
diff changeset
    60
               ]}