This commit is contained in:
Tiago Batista Cardoso
2025-12-04 21:52:11 +01:00
parent faeed36e4d
commit e56dc5201b
2 changed files with 649 additions and 0 deletions

645
tp2/plc.xml Normal file
View File

@@ -0,0 +1,645 @@
<?xml version='1.0' encoding='utf-8'?>
<project xmlns="http://www.plcopen.org/xml/tc6_0201" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:ns1="http://www.plcopen.org/xml/tc6_0201">
<fileHeader companyName="Unknown" productName="Unnamed" productVersion="1" creationDateTime="2025-11-28T11:40:28"/>
<contentHeader name="tp2" modificationDateTime="2025-12-04T13:05:24">
<coordinateInfo>
<fbd>
<scaling x="10" y="10"/>
</fbd>
<ld>
<scaling x="10" y="10"/>
</ld>
<sfc>
<scaling x="10" y="10"/>
</sfc>
</coordinateInfo>
</contentHeader>
<types>
<dataTypes/>
<pous>
<pou name="motor" pouType="program">
<interface>
<localVars>
<variable name="START">
<type>
<BOOL/>
</type>
</variable>
<variable name="STOP">
<type>
<BOOL/>
</type>
</variable>
<variable name="DELAY">
<type>
<TIME/>
</type>
<initialValue>
<simpleValue value="T#100ms"/>
</initialValue>
</variable>
<variable name="RUNNING">
<type>
<BOOL/>
</type>
</variable>
<variable name="RS0">
<type>
<derived name="RS"/>
</type>
</variable>
<variable name="TON0">
<type>
<derived name="TON"/>
</type>
</variable>
</localVars>
</interface>
<body>
<LD>
<leftPowerRail localId="1" width="10" height="140">
<position x="180" y="100"/>
<connectionPointOut formalParameter="">
<relPosition x="10" y="20"/>
</connectionPointOut>
<connectionPointOut formalParameter="">
<relPosition x="10" y="120"/>
</connectionPointOut>
</leftPowerRail>
<contact localId="2" negated="false" width="21" height="20">
<position x="250" y="110"/>
<connectionPointIn>
<relPosition x="0" y="10"/>
<connection refLocalId="1">
<position x="250" y="120"/>
<position x="190" y="120"/>
</connection>
</connectionPointIn>
<connectionPointOut>
<relPosition x="21" y="10"/>
</connectionPointOut>
<variable>START</variable>
</contact>
<block localId="4" typeName="RS" instanceName="RS0" width="50" height="60">
<position x="390" y="90"/>
<inputVariables>
<variable formalParameter="S">
<connectionPointIn>
<relPosition x="0" y="30"/>
<connection refLocalId="8" formalParameter="Q">
<position x="390" y="120"/>
<position x="350" y="120"/>
</connection>
</connectionPointIn>
</variable>
<variable formalParameter="R1">
<connectionPointIn>
<relPosition x="0" y="50"/>
<connection refLocalId="5">
<position x="390" y="140"/>
<position x="370" y="140"/>
<position x="370" y="210"/>
<position x="271" y="210"/>
</connection>
</connectionPointIn>
</variable>
</inputVariables>
<inOutVariables/>
<outputVariables>
<variable formalParameter="Q1">
<connectionPointOut>
<relPosition x="50" y="30"/>
</connectionPointOut>
</variable>
</outputVariables>
</block>
<contact localId="5" negated="false" width="21" height="20">
<position x="250" y="200"/>
<connectionPointIn>
<relPosition x="0" y="10"/>
<connection refLocalId="1">
<position x="250" y="210"/>
<position x="220" y="210"/>
<position x="220" y="220"/>
<position x="190" y="220"/>
</connection>
</connectionPointIn>
<connectionPointOut>
<relPosition x="21" y="10"/>
</connectionPointOut>
<variable>STOP</variable>
</contact>
<coil localId="6" negated="false" width="21" height="20">
<position x="470" y="110"/>
<connectionPointIn>
<relPosition x="0" y="10"/>
<connection refLocalId="4" formalParameter="Q1">
<position x="470" y="120"/>
<position x="440" y="120"/>
</connection>
</connectionPointIn>
<connectionPointOut>
<relPosition x="21" y="10"/>
</connectionPointOut>
<variable>RUNNING</variable>
</coil>
<rightPowerRail localId="7" width="10" height="80">
<position x="540" y="100"/>
<connectionPointIn>
<relPosition x="0" y="20"/>
<connection refLocalId="6">
<position x="540" y="120"/>
<position x="490" y="120"/>
</connection>
</connectionPointIn>
<connectionPointIn>
<relPosition x="0" y="60"/>
</connectionPointIn>
</rightPowerRail>
<block localId="8" typeName="TON" instanceName="TON0" width="50" height="70">
<position x="300" y="90"/>
<inputVariables>
<variable formalParameter="IN">
<connectionPointIn>
<relPosition x="0" y="30"/>
<connection refLocalId="2">
<position x="300" y="120"/>
<position x="271" y="120"/>
</connection>
</connectionPointIn>
</variable>
<variable formalParameter="PT">
<connectionPointIn>
<relPosition x="0" y="60"/>
<connection refLocalId="9">
<position x="300" y="150"/>
<position x="280" y="150"/>
<position x="280" y="160"/>
<position x="260" y="160"/>
</connection>
</connectionPointIn>
</variable>
</inputVariables>
<inOutVariables/>
<outputVariables>
<variable formalParameter="Q">
<connectionPointOut>
<relPosition x="50" y="30"/>
</connectionPointOut>
</variable>
<variable formalParameter="ET">
<connectionPointOut>
<relPosition x="50" y="60"/>
</connectionPointOut>
</variable>
</outputVariables>
</block>
<inVariable localId="9" width="60" height="30" negated="false">
<position x="200" y="140"/>
<connectionPointOut>
<relPosition x="60" y="20"/>
</connectionPointOut>
<expression>DELAY</expression>
</inVariable>
</LD>
</body>
</pou>
<pou name="fan" pouType="program">
<interface>
<localVars>
<variable name="START">
<type>
<BOOL/>
</type>
</variable>
<variable name="STOP">
<type>
<BOOL/>
</type>
</variable>
<variable name="MOTOR1">
<type>
<BOOL/>
</type>
</variable>
<variable name="TEMPO">
<type>
<BOOL/>
</type>
</variable>
</localVars>
</interface>
<body>
<SFC>
<step localId="1" name="Step0" initialStep="true" width="60" height="30">
<position x="550" y="100"/>
<connectionPointOut formalParameter="">
<relPosition x="30" y="30"/>
</connectionPointOut>
</step>
<leftPowerRail localId="2" width="10" height="80">
<position x="370" y="130"/>
<connectionPointOut formalParameter="">
<relPosition x="10" y="20"/>
</connectionPointOut>
<connectionPointOut formalParameter="">
<relPosition x="10" y="60"/>
</connectionPointOut>
</leftPowerRail>
<contact localId="3" negated="false" edge="rising" width="21" height="20">
<position x="420" y="140"/>
<connectionPointIn>
<relPosition x="0" y="10"/>
<connection refLocalId="2">
<position x="420" y="150"/>
<position x="380" y="150"/>
</connection>
</connectionPointIn>
<connectionPointOut>
<relPosition x="21" y="10"/>
</connectionPointOut>
<variable>START</variable>
</contact>
<contact localId="4" negated="false" width="21" height="20" edge="rising">
<position x="420" y="180"/>
<connectionPointIn>
<relPosition x="0" y="10"/>
<connection refLocalId="2">
<position x="420" y="190"/>
<position x="380" y="190"/>
</connection>
</connectionPointIn>
<connectionPointOut>
<relPosition x="21" y="10"/>
</connectionPointOut>
<variable>STOP</variable>
</contact>
<step localId="5" name="Step1" initialStep="false" width="50" height="30">
<position x="560" y="180"/>
<connectionPointIn>
<relPosition x="20" y="0"/>
<connection refLocalId="6">
<position x="580" y="180"/>
<position x="580" y="160"/>
</connection>
</connectionPointIn>
<connectionPointOut formalParameter="">
<relPosition x="20" y="30"/>
</connectionPointOut>
<connectionPointOutAction formalParameter="">
<relPosition x="50" y="20"/>
</connectionPointOutAction>
</step>
<transition localId="6" width="20" height="10">
<position x="570" y="150"/>
<connectionPointIn>
<relPosition x="10" y="0"/>
<connection refLocalId="1">
<position x="580" y="150"/>
<position x="580" y="130"/>
</connection>
</connectionPointIn>
<connectionPointOut>
<relPosition x="10" y="10"/>
</connectionPointOut>
<condition>
<connectionPointIn>
<connection refLocalId="3">
<position x="570" y="150"/>
<position x="441" y="150"/>
</connection>
</connectionPointIn>
</condition>
</transition>
<actionBlock localId="8" width="100" height="30">
<position x="670" y="170"/>
<connectionPointIn>
<relPosition x="0" y="20"/>
<connection refLocalId="5">
<position x="670" y="190"/>
<position x="640" y="190"/>
<position x="640" y="200"/>
<position x="610" y="200"/>
</connection>
</connectionPointIn>
<action localId="0" qualifier="D" duration="t#2s">
<relPosition x="0" y="0"/>
<reference name="TEMPO"/>
</action>
</actionBlock>
<step localId="10" name="Step2" initialStep="false" width="50" height="30">
<position x="560" y="260"/>
<connectionPointIn>
<relPosition x="20" y="0"/>
<connection refLocalId="11">
<position x="580" y="260"/>
<position x="580" y="240"/>
</connection>
</connectionPointIn>
<connectionPointOut formalParameter="">
<relPosition x="20" y="30"/>
</connectionPointOut>
<connectionPointOutAction formalParameter="">
<relPosition x="50" y="20"/>
</connectionPointOutAction>
</step>
<transition localId="11" width="20" height="10">
<position x="570" y="230"/>
<connectionPointIn>
<relPosition x="10" y="0"/>
<connection refLocalId="5">
<position x="580" y="230"/>
<position x="580" y="210"/>
</connection>
</connectionPointIn>
<connectionPointOut>
<relPosition x="10" y="10"/>
</connectionPointOut>
<condition>
<inline name="">
<ST>
<xhtml:p><![CDATA[TEMPO]]></xhtml:p>
</ST>
</inline>
</condition>
</transition>
<jumpStep localId="12" targetName="Step0" width="20" height="20">
<position x="570" y="340"/>
<connectionPointIn>
<relPosition x="10" y="0"/>
<connection refLocalId="13">
<position x="580" y="340"/>
<position x="580" y="320"/>
</connection>
</connectionPointIn>
</jumpStep>
<transition localId="13" width="20" height="10">
<position x="570" y="310"/>
<connectionPointIn>
<relPosition x="10" y="0"/>
<connection refLocalId="10">
<position x="580" y="310"/>
<position x="580" y="290"/>
</connection>
</connectionPointIn>
<connectionPointOut>
<relPosition x="10" y="10"/>
</connectionPointOut>
<condition>
<connectionPointIn>
<connection refLocalId="4">
<position x="570" y="310"/>
<position x="546" y="310"/>
<position x="546" y="190"/>
<position x="441" y="190"/>
</connection>
</connectionPointIn>
</condition>
</transition>
<actionBlock localId="14" width="100" height="30">
<position x="668" y="260"/>
<connectionPointIn>
<relPosition x="0" y="20"/>
<connection refLocalId="10">
<position x="668" y="280"/>
<position x="610" y="280"/>
</connection>
</connectionPointIn>
<action localId="0">
<relPosition x="0" y="0"/>
<reference name="MOTOR1"/>
</action>
</actionBlock>
</SFC>
</body>
</pou>
<pou name="street_light" pouType="program">
<interface>
<localVars>
<variable name="RED">
<type>
<BOOL/>
</type>
</variable>
<variable name="YELLOW">
<type>
<BOOL/>
</type>
</variable>
<variable name="GREEN">
<type>
<BOOL/>
</type>
</variable>
<variable name="WAIT">
<type>
<BOOL/>
</type>
</variable>
</localVars>
</interface>
<body>
<SFC>
<step localId="1" name="show_green" initialStep="true" width="100" height="30">
<position x="500" y="80"/>
<connectionPointOut formalParameter="">
<relPosition x="50" y="30"/>
</connectionPointOut>
<connectionPointOutAction formalParameter="">
<relPosition x="100" y="10"/>
</connectionPointOutAction>
</step>
<actionBlock localId="2" width="110" height="60">
<position x="630" y="70"/>
<connectionPointIn>
<relPosition x="0" y="10"/>
<connection refLocalId="1">
<position x="630" y="80"/>
<position x="615" y="80"/>
<position x="615" y="100"/>
<position x="600" y="100"/>
</connection>
</connectionPointIn>
<action localId="0" qualifier="SL" duration="t#30s">
<relPosition x="0" y="0"/>
<reference name="GREEN"/>
</action>
<action localId="0" qualifier="SD" duration="t#28s">
<relPosition x="0" y="0"/>
<reference name="YELLOW"/>
</action>
</actionBlock>
<step localId="4" name="show_yellow" initialStep="false" width="100" height="30">
<position x="500" y="250"/>
<connectionPointIn>
<relPosition x="50" y="0"/>
<connection refLocalId="5">
<position x="550" y="250"/>
<position x="550" y="210"/>
</connection>
</connectionPointIn>
<connectionPointOut formalParameter="">
<relPosition x="50" y="30"/>
</connectionPointOut>
<connectionPointOutAction formalParameter="">
<relPosition x="100" y="10"/>
</connectionPointOutAction>
</step>
<transition localId="5" width="20" height="10">
<position x="540" y="200"/>
<connectionPointIn>
<relPosition x="10" y="0"/>
<connection refLocalId="1">
<position x="550" y="200"/>
<position x="550" y="110"/>
</connection>
</connectionPointIn>
<connectionPointOut>
<relPosition x="10" y="10"/>
</connectionPointOut>
<condition>
<inline name="">
<ST>
<xhtml:p><![CDATA[GREEN = false]]></xhtml:p>
</ST>
</inline>
</condition>
</transition>
<jumpStep localId="7" targetName="show_green" width="20" height="20">
<position x="540" y="440"/>
<connectionPointIn>
<relPosition x="10" y="0"/>
<connection refLocalId="10">
<position x="550" y="440"/>
<position x="550" y="410"/>
</connection>
</connectionPointIn>
</jumpStep>
<transition localId="8" width="20" height="10">
<position x="540" y="310"/>
<connectionPointIn>
<relPosition x="10" y="0"/>
<connection refLocalId="4">
<position x="550" y="310"/>
<position x="550" y="280"/>
</connection>
</connectionPointIn>
<connectionPointOut>
<relPosition x="10" y="10"/>
</connectionPointOut>
<condition>
<inline name="">
<ST>
<xhtml:p><![CDATA[YELLOW = false]]></xhtml:p>
</ST>
</inline>
</condition>
</transition>
<step localId="9" name="show_red" initialStep="false" width="80" height="30">
<position x="510" y="350"/>
<connectionPointIn>
<relPosition x="40" y="0"/>
<connection refLocalId="8">
<position x="550" y="350"/>
<position x="550" y="320"/>
</connection>
</connectionPointIn>
<connectionPointOut formalParameter="">
<relPosition x="40" y="30"/>
</connectionPointOut>
<connectionPointOutAction formalParameter="">
<relPosition x="80" y="10"/>
</connectionPointOutAction>
</step>
<transition localId="10" width="20" height="10">
<position x="540" y="400"/>
<connectionPointIn>
<relPosition x="10" y="0"/>
<connection refLocalId="9">
<position x="550" y="400"/>
<position x="550" y="380"/>
</connection>
</connectionPointIn>
<connectionPointOut>
<relPosition x="10" y="10"/>
</connectionPointOut>
<condition>
<inline name="">
<ST>
<xhtml:p><![CDATA[RED = false]]></xhtml:p>
</ST>
</inline>
</condition>
</transition>
<comment localId="3" height="100" width="310">
<position x="760" y="60"/>
<content>
<xhtml:p><![CDATA[REQ2 : Green lit for at least 30s
REQ3 : Lighting up Yellow 2s before Green turns off to ensure it ligths up within 0.2s.]]></xhtml:p>
</content>
</comment>
<actionBlock localId="13" width="90" height="30">
<position x="620" y="340"/>
<connectionPointIn>
<relPosition x="0" y="20"/>
<connection refLocalId="9">
<position x="620" y="360"/>
<position x="590" y="360"/>
</connection>
</connectionPointIn>
<action localId="0" qualifier="SL" duration="t#10s">
<relPosition x="0" y="0"/>
<reference name="RED"/>
</action>
</actionBlock>
<actionBlock localId="14" width="100" height="30">
<position x="640" y="240"/>
<connectionPointIn>
<relPosition x="0" y="20"/>
<connection refLocalId="4">
<position x="640" y="260"/>
<position x="600" y="260"/>
</connection>
</connectionPointIn>
<action localId="0" qualifier="P">
<relPosition x="0" y="0"/>
<reference name="YELLOW"/>
</action>
</actionBlock>
<comment localId="15" height="40" width="350">
<position x="680" y="180"/>
<content>
<xhtml:p><![CDATA[REQ1 : After Green, next step is yellow.]]></xhtml:p>
</content>
</comment>
<comment localId="16" height="40" width="350">
<position x="730" y="340"/>
<content>
<xhtml:p><![CDATA[REQ5 : Red stays active for at least 10s.]]></xhtml:p>
</content>
</comment>
<comment localId="17" height="40" width="220">
<position x="690" y="290"/>
<content>
<xhtml:p><![CDATA[REQ4 : Next step is Red.]]></xhtml:p>
</content>
</comment>
</SFC>
</body>
</pou>
</pous>
</types>
<instances>
<configurations>
<configuration name="Config0">
<resource name="Res0">
<task name="task0" priority="0" interval="T#20ms">
<pouInstance name="instance0" typeName="motor"/>
<pouInstance name="instance2" typeName="street_light"/>
<pouInstance name="instance1" typeName="fan"/>
</task>
</resource>
</configuration>
</configurations>
</instances>
</project>