# HG changeset patch # User Edouard Tisserant # Date 1434620195 -7200 # Node ID 954d1f42d42dd49b69903a26b4759cd8efd1ab59 # Parent b7e610672eed62b8f7f1c8a729d90072f30e7e5e Added wxHMI test diff -r b7e610672eed -r 954d1f42d42d tests/wxHMI/HMI@wxglade_hmi/baseconfnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/wxHMI/HMI@wxglade_hmi/baseconfnode.xml Thu Jun 18 11:36:35 2015 +0200 @@ -0,0 +1,2 @@ +<?xml version='1.0' encoding='utf-8'?> +<BaseParams Name="HMI" IEC_Channel="0"/> diff -r b7e610672eed -r 954d1f42d42d tests/wxHMI/HMI@wxglade_hmi/hmi.wxg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/wxHMI/HMI@wxglade_hmi/hmi.wxg Thu Jun 18 11:36:35 2015 +0200 @@ -0,0 +1,72 @@ +<?xml version="1.0"?> +<!-- generated by wxGlade HG on Fri Aug 22 11:10:56 2014 --> + +<application path="" name="" class="" option="0" language="python" top_window="wxglade_hmi" encoding="UTF-8" use_gettext="0" overwrite="0" use_new_namespace="1" for_version="2.8" is_template="0" indent_amount="4" indent_symbol="space" source_extension=".cpp" header_extension=".h"> + <object class="Class_wxglade_hmi" name="wxglade_hmi" base="EditFrame"> + <style>wxCAPTION|wxCLOSE_BOX|wxMINIMIZE_BOX|wxMAXIMIZE|wxMAXIMIZE_BOX|wxSYSTEM_MENU|wxRESIZE_BORDER|wxCLIP_CHILDREN</style> + <title>frame_1</title> + <object class="wxFlexGridSizer" name="grid_sizer_1" base="EditFlexGridSizer"> + <hgap>0</hgap> + <growable_rows>0</growable_rows> + <rows>1</rows> + <growable_cols>0</growable_cols> + <cols>2</cols> + <vgap>0</vgap> + <object class="sizeritem"> + <flag>wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag> + <border>0</border> + <option>1</option> + <object class="ThreeDee" name="window_1" base="CustomWidget"> + <arguments> + <argument>$parent</argument> + <argument>$id</argument> + </arguments> + <size>400,400</size> + </object> + </object> + <object class="sizeritem"> + <flag>wxEXPAND</flag> + <border>0</border> + <option>1</option> + <object class="wxFlexGridSizer" name="sizer_1" base="EditFlexGridSizer"> + <hgap>0</hgap> + <growable_rows>0</growable_rows> + <rows>2</rows> + <cols>1</cols> + <vgap>0</vgap> + <object class="sizeritem"> + <flag>wxEXPAND</flag> + <border>0</border> + <option>1</option> + <object class="wxBoxSizer" name="sizer_2" base="EditBoxSizer"> + <orient>wxVERTICAL</orient> + <object class="sizerslot" /> + <object class="sizerslot" /> + <object class="sizerslot" /> + <object class="sizerslot" /> + </object> + </object> + <object class="sizeritem"> + <flag>wxEXPAND</flag> + <border>0</border> + <option>1</option> + <object class="wxGridSizer" name="sizer_3" base="EditGridSizer"> + <hgap>0</hgap> + <rows>4</rows> + <cols>2</cols> + <vgap>0</vgap> + <object class="sizerslot" /> + <object class="sizerslot" /> + <object class="sizerslot" /> + <object class="sizerslot" /> + <object class="sizerslot" /> + <object class="sizerslot" /> + <object class="sizerslot" /> + <object class="sizerslot" /> + </object> + </object> + </object> + </object> + </object> + </object> +</application> diff -r b7e610672eed -r 954d1f42d42d tests/wxHMI/HMI@wxglade_hmi/hmi.wxg.bak --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/wxHMI/HMI@wxglade_hmi/hmi.wxg.bak Thu Jun 18 11:36:35 2015 +0200 @@ -0,0 +1,71 @@ +<?xml version="1.0"?> +<!-- generated by wxGlade HG on Wed Oct 02 23:48:24 2013 --> + +<application path="" name="" class="" option="0" language="python" top_window="wxglade_hmi" encoding="UTF-8" use_gettext="0" overwrite="0" use_new_namespace="1" for_version="2.8" is_template="0" indent_amount="4" indent_symbol="space" source_extension=".cpp" header_extension=".h"> + <object class="Class_wxglade_hmi" name="wxglade_hmi" base="EditFrame"> + <style>wxCAPTION|wxCLOSE_BOX|wxMINIMIZE_BOX|wxMAXIMIZE|wxMAXIMIZE_BOX|wxSYSTEM_MENU|wxRESIZE_BORDER|wxCLIP_CHILDREN</style> + <title>frame_1</title> + <object class="wxFlexGridSizer" name="grid_sizer_1" base="EditFlexGridSizer"> + <hgap>0</hgap> + <growable_rows>0</growable_rows> + <rows>1</rows> + <growable_cols>0</growable_cols> + <cols>2</cols> + <vgap>0</vgap> + <object class="sizeritem"> + <flag>wxEXPAND</flag> + <border>0</border> + <option>1</option> + <object class="ThreeDee" name="window_1" base="CustomWidget"> + <arguments> + <argument>$parent</argument> + <argument>$id</argument> + </arguments> + <size>400,400</size> + </object> + </object> + <object class="sizeritem"> + <flag>wxEXPAND</flag> + <border>0</border> + <option>1</option> + <object class="wxFlexGridSizer" name="sizer_1" base="EditFlexGridSizer"> + <hgap>0</hgap> + <rows>2</rows> + <cols>1</cols> + <vgap>0</vgap> + <object class="sizeritem"> + <flag>wxEXPAND</flag> + <border>0</border> + <option>1</option> + <object class="wxBoxSizer" name="sizer_2" base="EditBoxSizer"> + <orient>wxVERTICAL</orient> + <object class="sizerslot" /> + <object class="sizerslot" /> + <object class="sizerslot" /> + <object class="sizerslot" /> + </object> + </object> + <object class="sizeritem"> + <flag>wxEXPAND</flag> + <border>0</border> + <option>1</option> + <object class="wxGridSizer" name="sizer_3" base="EditGridSizer"> + <hgap>0</hgap> + <rows>4</rows> + <cols>2</cols> + <vgap>0</vgap> + <object class="sizerslot" /> + <object class="sizerslot" /> + <object class="sizerslot" /> + <object class="sizerslot" /> + <object class="sizerslot" /> + <object class="sizerslot" /> + <object class="sizerslot" /> + <object class="sizerslot" /> + </object> + </object> + </object> + </object> + </object> + </object> +</application> diff -r b7e610672eed -r 954d1f42d42d tests/wxHMI/HMI@wxglade_hmi/pyfile.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/wxHMI/HMI@wxglade_hmi/pyfile.xml Thu Jun 18 11:36:35 2015 +0200 @@ -0,0 +1,138 @@ +<?xml version='1.0' encoding='utf-8'?> +<PyFile xmlns:xhtml="http://www.w3.org/1999/xhtml"> + <variables> + <variable name="Power_ON" type="BOOL"/> + <variable name="Power_OFF" type="BOOL"/> + <variable name="DrawTest" type="BOOL"/> + <variable name="DrawLogo" type="BOOL"/> + <variable name="DrawEscher" type="BOOL"/> + <variable name="Detect_Circle" type="BOOL"/> + <variable name="XaxisPos" type="INT"/> + <variable name="YaxisPos" type="INT"/> + <variable name="ZaxisPos" type="INT"/> + <variable name="TaxisPos" type="INT"/> + <variable name="XaxisMinus" type="BOOL"/> + <variable name="YaxisMinus" type="BOOL"/> + <variable name="ZaxisMinus" type="BOOL"/> + <variable name="TaxisMinus" type="BOOL"/> + <variable name="XaxisPlus" type="BOOL"/> + <variable name="YaxisPlus" type="BOOL"/> + <variable name="ZaxisPlus" type="BOOL"/> + <variable name="TaxisPlus" type="BOOL"/> + </variables> + <globals> + <xhtml:p><![CDATA[ +import ctypes +import Image +import wx, sys + +AxisList = ["X","Y","Z","T"] + +PwrButtons = ['Power_ON', + 'Power_OFF'] + +ActionButtons = ['Detect_Circle', + 'DrawTest', + 'DrawLogo', + 'DrawEscher'] + +class ThreeDee(wx.StaticText): + def __init__(self, *args, **kwargs): + self.initialized = False + kwargs["style"] = wx.ALIGN_CENTRE_HORIZONTAL + super(ThreeDee, self).__init__(*args, **kwargs) + + self.SetFont(wx.Font(24, wx.SWISS, wx.NORMAL, wx.BOLD)) + + self.positions = [0.]*4 + + self.Message = None + self.NegLimits = None + self.Disk = None + + + def UpdatePositions(self, positions): + # get globals from PLC + self.positions = positions + self.SetLabel( + ((self.Message +'\n\n') if self.Message else '' )+ + " ".join(["%s %+.2f"%(axis,self.positions[i]) + for i,axis in enumerate(AxisList)])) + +def MakeButtonFunc(window, sizer, btname): + def ButtonDown(event): + setattr(PLCGlobals,btname,1) + event.Skip() + def ButtonUp(event): + setattr(PLCGlobals,btname,0) + event.Skip() + obj = wx.BitmapButton(window, -1, wx.Bitmap('%s.png'%btname)) + sizer.Add(obj, 2, wx.EXPAND, 0) + obj.Bind(wx.EVT_LEFT_DOWN, ButtonDown) + obj.Bind(wx.EVT_LEFT_UP, ButtonUp) + return obj + +def UpdatePositions(self, event): + + # TODO : uncomment + positions = [getattr(PLCGlobals,axname+"axisPos") for axname in AxisList] + + self.window_1.UpdatePositions(positions) + + event.Skip() + +Class_wxglade_hmi.UpdatePositions = UpdatePositions + +initorig = Class_wxglade_hmi.__init__ +def Init(self,*args,**kargs): + initorig(self,*args,**kargs) + sizer = self.GetSizer().GetItem(1).GetSizer().GetItem(0).GetSizer() + self.main_buttons = map( + lambda btname: MakeButtonFunc(self, sizer, btname), PwrButtons) + sizer = self.GetSizer().GetItem(1).GetSizer().GetItem(1).GetSizer() + self.main_buttons = map( + lambda btname: MakeButtonFunc(self, sizer, btname), ActionButtons) + self.axis_buttons = map( + lambda axis:( MakeButtonFunc(self, sizer, axis+"axisMinus"), + MakeButtonFunc(self, sizer, axis+"axisPlus")), + AxisList) + self.timer = wx.Timer(self, -1) + self.Bind(wx.EVT_TIMER, self.UpdatePositions, self.timer) + self.ShowFullScreen(True,wx.FULLSCREEN_ALL) + wx.CallAfter(self.timer.Start,200) + +Class_wxglade_hmi.__init__ = Init + +def GUIMessage(message): + try: + wxglade_hmi.window_1.Message = message + except: + # sometime get some wxpydeadobject + pass + +def SetNegLimits(*args): + wxglade_hmi.window_1.NegLimits = args + +def SetDisk(*args): + wxglade_hmi.window_1.Disk = args + GUIMessage("DiskOK") + +]]></xhtml:p> + </globals> + <init> + <xhtml:p><![CDATA[ +]]></xhtml:p> + </init> + <cleanup> + <xhtml:p><![CDATA[ +]]></xhtml:p> + </cleanup> + <start> + <xhtml:p><![CDATA[ +]]></xhtml:p> + </start> + <stop> + <xhtml:p><![CDATA[ +]]></xhtml:p> + </stop> +</PyFile> diff -r b7e610672eed -r 954d1f42d42d tests/wxHMI/beremiz.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/wxHMI/beremiz.xml Thu Jun 18 11:36:35 2015 +0200 @@ -0,0 +1,5 @@ +<?xml version='1.0' encoding='utf-8'?> +<BeremizRoot URI_location="LOCAL://"> + <TargetType/> + <Libraries Enable_SVGUI_Library="false"/> +</BeremizRoot> diff -r b7e610672eed -r 954d1f42d42d tests/wxHMI/plc.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/wxHMI/plc.xml Thu Jun 18 11:36:35 2015 +0200 @@ -0,0 +1,410 @@ +<?xml version='1.0' encoding='utf-8'?> +<project xmlns="http://www.plcopen.org/xml/tc6_0201" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xsi:schemaLocation="http://www.plcopen.org/xml/tc6_0201"> + <fileHeader companyName="Unknown" productName="Unnamed" productVersion="1" creationDateTime="2012-09-12T23:30:19"/> + <contentHeader name="Unnamed" modificationDateTime="2015-06-18T11:28:47"> + <coordinateInfo> + <pageSize x="1050" y="1485"/> + <fbd> + <scaling x="5" y="5"/> + </fbd> + <ld> + <scaling x="0" y="0"/> + </ld> + <sfc> + <scaling x="0" y="0"/> + </sfc> + </coordinateInfo> + </contentHeader> + <types> + <dataTypes/> + <pous> + <pou name="main" pouType="program"> + <interface> + <externalVars> + <variable name="Power_ON"> + <type> + <BOOL/> + </type> + </variable> + <variable name="Power_OFF"> + <type> + <BOOL/> + </type> + </variable> + <variable name="power"> + <type> + <BOOL/> + </type> + </variable> + <variable name="DrawTest"> + <type> + <BOOL/> + </type> + </variable> + <variable name="DrawLogo"> + <type> + <BOOL/> + </type> + </variable> + <variable name="DrawEscher"> + <type> + <BOOL/> + </type> + </variable> + <variable name="Detect_Circle"> + <type> + <BOOL/> + </type> + </variable> + </externalVars> + <localVars> + <variable name="RS0"> + <type> + <derived name="RS"/> + </type> + </variable> + </localVars> + </interface> + <body> + <FBD> + <inVariable localId="286" executionOrderId="0" height="25" width="65" negated="false"> + <position x="170" y="155"/> + <connectionPointOut> + <relPosition x="65" y="10"/> + </connectionPointOut> + <expression>Power_ON</expression> + </inVariable> + <block localId="287" typeName="RS" instanceName="RS0" executionOrderId="0" height="65" width="45"> + <position x="395" y="190"/> + <inputVariables> + <variable formalParameter="S"> + <connectionPointIn> + <relPosition x="0" y="30"/> + <connection refLocalId="286"> + <position x="395" y="220"/> + <position x="315" y="220"/> + <position x="315" y="165"/> + <position x="235" y="165"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="R1"> + <connectionPointIn> + <relPosition x="0" y="55"/> + <connection refLocalId="288"> + <position x="395" y="245"/> + <position x="315" y="245"/> + <position x="315" y="265"/> + <position x="235" y="265"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="Q1"> + <connectionPointOut> + <relPosition x="45" y="30"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <inVariable localId="288" executionOrderId="0" height="25" width="70" negated="false"> + <position x="165" y="255"/> + <connectionPointOut> + <relPosition x="70" y="10"/> + </connectionPointOut> + <expression>Power_OFF</expression> + </inVariable> + <outVariable localId="289" executionOrderId="0" height="25" width="45" negated="false"> + <position x="510" y="220"/> + <connectionPointIn> + <relPosition x="0" y="10"/> + <connection refLocalId="287" formalParameter="Q1"> + <position x="510" y="230"/> + <position x="475" y="230"/> + <position x="475" y="220"/> + <position x="440" y="220"/> + </connection> + </connectionPointIn> + <expression>power</expression> + </outVariable> + </FBD> + </body> + <documentation> + <xhtml:p><![CDATA[]]></xhtml:p> + </documentation> + </pou> + <pou name="ReadGUIdata" pouType="program"> + <interface> + <localVars> + <variable name="tmp"> + <type> + <INT/> + </type> + </variable> + </localVars> + <externalVars> + <variable name="power"> + <type> + <BOOL/> + </type> + </variable> + <variable name="XaxisPos"> + <type> + <INT/> + </type> + </variable> + <variable name="YaxisPos"> + <type> + <INT/> + </type> + </variable> + <variable name="ZaxisPos"> + <type> + <INT/> + </type> + </variable> + <variable name="TaxisPos"> + <type> + <INT/> + </type> + </variable> + </externalVars> + </interface> + <body> + <FBD> + <outVariable localId="211" executionOrderId="0" height="25" width="60" negated="false"> + <position x="565" y="195"/> + <connectionPointIn> + <relPosition x="0" y="10"/> + <connection refLocalId="215"> + <position x="565" y="205"/> + <position x="370" y="205"/> + <position x="370" y="195"/> + <position x="330" y="195"/> + </connection> + </connectionPointIn> + <expression>XaxisPos</expression> + </outVariable> + <block localId="213" typeName="ADD" executionOrderId="0" height="65" width="60"> + <position x="220" y="295"/> + <inputVariables> + <variable formalParameter="IN1"> + <connectionPointIn> + <relPosition x="0" y="30"/> + <connection refLocalId="212"> + <position x="220" y="325"/> + <position x="210" y="325"/> + <position x="210" y="270"/> + <position x="380" y="270"/> + <position x="380" y="325"/> + <position x="365" y="325"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="IN2"> + <connectionPointIn> + <relPosition x="0" y="55"/> + <connection refLocalId="217" formalParameter="OUT"> + <position x="220" y="350"/> + <position x="180" y="350"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="OUT"> + <connectionPointOut> + <relPosition x="60" y="30"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <inOutVariable localId="212" executionOrderId="0" height="25" width="30" negatedOut="false" negatedIn="false"> + <position x="335" y="315"/> + <connectionPointIn> + <relPosition x="0" y="10"/> + <connection refLocalId="213" formalParameter="OUT"> + <position x="335" y="325"/> + <position x="280" y="325"/> + </connection> + </connectionPointIn> + <connectionPointOut> + <relPosition x="30" y="10"/> + </connectionPointOut> + <expression>tmp</expression> + </inOutVariable> + <inVariable localId="214" executionOrderId="0" height="25" width="20" negated="false"> + <position x="65" y="385"/> + <connectionPointOut> + <relPosition x="20" y="10"/> + </connectionPointOut> + <expression>1</expression> + </inVariable> + <inVariable localId="215" executionOrderId="0" height="25" width="30" negated="false"> + <position x="300" y="185"/> + <connectionPointOut> + <relPosition x="30" y="10"/> + </connectionPointOut> + <expression>tmp</expression> + </inVariable> + <outVariable localId="216" executionOrderId="0" height="25" width="60" negated="false"> + <position x="540" y="310"/> + <connectionPointIn> + <relPosition x="0" y="10"/> + <connection refLocalId="215"> + <position x="540" y="320"/> + <position x="435" y="320"/> + <position x="435" y="195"/> + <position x="330" y="195"/> + </connection> + </connectionPointIn> + <expression>YaxisPos</expression> + </outVariable> + <block localId="217" typeName="SEL" executionOrderId="0" height="85" width="60"> + <position x="120" y="320"/> + <inputVariables> + <variable formalParameter="G"> + <connectionPointIn> + <relPosition x="0" y="30"/> + <connection refLocalId="219"> + <position x="120" y="350"/> + <position x="97" y="350"/> + <position x="97" y="345"/> + <position x="85" y="345"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="IN0"> + <connectionPointIn> + <relPosition x="0" y="50"/> + <connection refLocalId="218"> + <position x="120" y="370"/> + <position x="85" y="370"/> + </connection> + </connectionPointIn> + </variable> + <variable formalParameter="IN1"> + <connectionPointIn> + <relPosition x="0" y="70"/> + <connection refLocalId="214"> + <position x="120" y="390"/> + <position x="102" y="390"/> + <position x="102" y="395"/> + <position x="85" y="395"/> + </connection> + </connectionPointIn> + </variable> + </inputVariables> + <inOutVariables/> + <outputVariables> + <variable formalParameter="OUT"> + <connectionPointOut> + <relPosition x="60" y="30"/> + </connectionPointOut> + </variable> + </outputVariables> + </block> + <inVariable localId="218" executionOrderId="0" height="25" width="20" negated="false"> + <position x="65" y="360"/> + <connectionPointOut> + <relPosition x="20" y="10"/> + </connectionPointOut> + <expression>0</expression> + </inVariable> + <inVariable localId="219" executionOrderId="0" height="25" width="45" negated="false"> + <position x="40" y="335"/> + <connectionPointOut> + <relPosition x="45" y="10"/> + </connectionPointOut> + <expression>power</expression> + </inVariable> + </FBD> + </body> + <documentation> + <xhtml:p><![CDATA[]]></xhtml:p> + </documentation> + </pou> + <pou name="Declarations" pouType="program"> + <interface> + <localVars> + <variable name="LocalVar0"> + <type> + <DINT/> + </type> + </variable> + <variable name="LocalVar1"> + <type> + <DINT/> + </type> + </variable> + </localVars> + </interface> + <body> + <FBD> + <inVariable localId="127" executionOrderId="0" height="25" width="60" negated="false"> + <position x="235" y="205"/> + <connectionPointOut> + <relPosition x="60" y="10"/> + </connectionPointOut> + <expression>LocalVar0</expression> + </inVariable> + <outVariable localId="128" executionOrderId="0" height="25" width="60" negated="false"> + <position x="450" y="190"/> + <connectionPointIn> + <relPosition x="0" y="10"/> + <connection refLocalId="127"> + <position x="450" y="200"/> + <position x="372" y="200"/> + <position x="372" y="215"/> + <position x="295" y="215"/> + </connection> + </connectionPointIn> + <expression>LocalVar1</expression> + </outVariable> + </FBD> + </body> + <documentation> + <xhtml:p><![CDATA[]]></xhtml:p> + </documentation> + </pou> + </pous> + </types> + <instances> + <configurations> + <configuration name="config"> + <resource name="resource1"> + <task name="InitOneShot" priority="0" single="Initialize"> + <pouInstance name="Initializer" typeName="Declarations"/> + </task> + <task name="ControlTask" priority="0" interval="T#2ms"> + <pouInstance name="MainInstance" typeName="main"/> + </task> + <task name="GUIupdate" priority="0" interval="T#40ms"> + <pouInstance name="PosReader" typeName="ReadGUIdata"/> + </task> + <globalVars> + <variable name="Initialize"> + <type> + <BOOL/> + </type> + <initialValue> + <simpleValue value="TRUE"/> + </initialValue> + </variable> + <variable name="power"> + <type> + <BOOL/> + </type> + <initialValue> + <simpleValue value="TRUE"/> + </initialValue> + </variable> + </globalVars> + </resource> + </configuration> + </configurations> + </instances> +</project>