--- a/py_ext/pous.xml Fri Feb 07 10:52:09 2025 +0100
+++ b/py_ext/pous.xml Fri Feb 07 11:21:15 2025 +0100
@@ -1,7 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.plcopen.org/xml/tc6_0201" xmlns:xhtml="http://www.w3.org/1999/xhtml" xsi:schemaLocation="http://www.plcopen.org/xml/tc6_0201">
<fileHeader companyName="Beremiz" productName="Beremiz" productVersion="0.0" creationDateTime="2008-12-14T16:53:26"/>
- <contentHeader name="Beremiz non-standard POUs library" modificationDateTime="2024-12-06T15:13:47">
+ <contentHeader name="Beremiz non-standard POUs library" modificationDateTime="2025-02-03T14:57:54">
<coordinateInfo>
<fbd>
<scaling x="8" y="8"/>
@@ -17,6 +17,512 @@
<types>
<dataTypes/>
<pous>
+ <pou name="csv_write_by_string" pouType="functionBlock">
+ <interface>
+ <outputVars>
+ <variable name="ACK">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ <variable name="ERROR">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ <variable name="RESULT">
+ <type>
+ <string/>
+ </type>
+ </variable>
+ </outputVars>
+ <inputVars>
+ <variable name="FILE_NAME">
+ <type>
+ <string/>
+ </type>
+ </variable>
+ <variable name="ROW">
+ <type>
+ <string/>
+ </type>
+ </variable>
+ <variable name="COLUMN">
+ <type>
+ <string/>
+ </type>
+ </variable>
+ <variable name="CONTENT">
+ <type>
+ <string/>
+ </type>
+ </variable>
+ <variable name="SAVE">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ </inputVars>
+ <localVars>
+ <variable name="py_eval0">
+ <type>
+ <derived name="python_eval"/>
+ </type>
+ </variable>
+ <variable name="R_TRIG1">
+ <type>
+ <derived name="R_TRIG"/>
+ </type>
+ </variable>
+ <variable name="R_TRIG2">
+ <type>
+ <derived name="R_TRIG"/>
+ </type>
+ </variable>
+ <variable name="csv_refresh0">
+ <type>
+ <derived name="csv_refresh"/>
+ </type>
+ </variable>
+ </localVars>
+ </interface>
+ <body>
+ <FBD>
+ <inVariable localId="8" executionOrderId="0" height="27" width="112" negated="false">
+ <position x="384" y="128"/>
+ <connectionPointOut>
+ <relPosition x="112" y="16"/>
+ </connectionPointOut>
+ <expression>'CSVWrStr("'</expression>
+ </inVariable>
+ <inVariable localId="52" executionOrderId="0" height="32" width="112" negated="false">
+ <position x="216" y="296"/>
+ <connectionPointOut>
+ <relPosition x="112" y="16"/>
+ </connectionPointOut>
+ <expression>CONTENT</expression>
+ </inVariable>
+ <comment localId="29" height="40" width="232">
+ <position x="64" y="32"/>
+ <content>
+ <xhtml:p><![CDATA[Generate python code line]]></xhtml:p>
+ </content>
+ </comment>
+ <block localId="40" width="104" height="80" typeName="python_eval" instanceName="py_eval0" executionOrderId="0">
+ <position x="552" y="480"/>
+ <inputVariables>
+ <variable formalParameter="TRIG">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="46" formalParameter="Q">
+ <position x="552" y="512"/>
+ <position x="360" y="512"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="CODE">
+ <connectionPointIn>
+ <relPosition x="0" y="64"/>
+ <connection refLocalId="41">
+ <position x="552" y="544"/>
+ <position x="520" y="544"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="ACK">
+ <connectionPointOut>
+ <relPosition x="104" y="32"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="RESULT">
+ <connectionPointOut>
+ <relPosition x="104" y="64"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <continuation name="Code" localId="41" height="24" width="128">
+ <position x="392" y="528"/>
+ <connectionPointOut>
+ <relPosition x="128" y="16"/>
+ </connectionPointOut>
+ </continuation>
+ <inVariable localId="42" height="24" width="64" executionOrderId="0" negated="false">
+ <position x="208" y="496"/>
+ <connectionPointOut>
+ <relPosition x="64" y="16"/>
+ </connectionPointOut>
+ <expression>SAVE</expression>
+ </inVariable>
+ <outVariable localId="43" height="32" width="40" executionOrderId="0" negated="false">
+ <position x="736" y="400"/>
+ <connectionPointIn>
+ <relPosition x="0" y="16"/>
+ <connection refLocalId="40" formalParameter="ACK">
+ <position x="736" y="416"/>
+ <position x="688" y="416"/>
+ <position x="688" y="512"/>
+ <position x="656" y="512"/>
+ </connection>
+ </connectionPointIn>
+ <expression>ACK</expression>
+ </outVariable>
+ <outVariable localId="44" height="24" width="64" executionOrderId="0" negated="false">
+ <position x="688" y="584"/>
+ <connectionPointIn>
+ <relPosition x="0" y="8"/>
+ <connection refLocalId="40" formalParameter="RESULT">
+ <position x="688" y="592"/>
+ <position x="672" y="592"/>
+ <position x="672" y="544"/>
+ <position x="656" y="544"/>
+ </connection>
+ </connectionPointIn>
+ <expression>RESULT</expression>
+ </outVariable>
+ <block localId="46" typeName="R_TRIG" instanceName="R_TRIG1" executionOrderId="0" height="48" width="64">
+ <position x="296" y="480"/>
+ <inputVariables>
+ <variable formalParameter="CLK">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="42">
+ <position x="296" y="512"/>
+ <position x="272" y="512"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="Q">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <block localId="33" typeName="LEFT" executionOrderId="0" height="64" width="56">
+ <position x="736" y="512"/>
+ <inputVariables>
+ <variable formalParameter="IN">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="40" formalParameter="RESULT">
+ <position x="736" y="544"/>
+ <position x="656" y="544"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="L">
+ <connectionPointIn>
+ <relPosition x="0" y="56"/>
+ <connection refLocalId="35">
+ <position x="736" y="568"/>
+ <position x="724" y="568"/>
+ <position x="724" y="560"/>
+ <position x="712" y="560"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="56" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <block localId="34" typeName="EQ" executionOrderId="0" height="72" width="64">
+ <position x="880" y="512"/>
+ <inputVariables>
+ <variable formalParameter="IN1">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="33" formalParameter="OUT">
+ <position x="880" y="544"/>
+ <position x="792" y="544"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN2">
+ <connectionPointIn>
+ <relPosition x="0" y="56"/>
+ <connection refLocalId="36">
+ <position x="880" y="568"/>
+ <position x="848" y="568"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <inVariable localId="35" executionOrderId="0" height="24" width="24" negated="false">
+ <position x="688" y="552"/>
+ <connectionPointOut>
+ <relPosition x="24" y="8"/>
+ </connectionPointOut>
+ <expression>1</expression>
+ </inVariable>
+ <inVariable localId="36" executionOrderId="0" height="32" width="40" negated="false">
+ <position x="808" y="552"/>
+ <connectionPointOut>
+ <relPosition x="40" y="16"/>
+ </connectionPointOut>
+ <expression>'#'</expression>
+ </inVariable>
+ <block localId="37" typeName="R_TRIG" instanceName="R_TRIG2" executionOrderId="0" height="48" width="64">
+ <position x="736" y="456"/>
+ <inputVariables>
+ <variable formalParameter="CLK">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="40" formalParameter="ACK">
+ <position x="736" y="488"/>
+ <position x="688" y="488"/>
+ <position x="688" y="512"/>
+ <position x="656" y="512"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="Q">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <block localId="39" typeName="AND" executionOrderId="0" height="72" width="64">
+ <position x="984" y="456"/>
+ <inputVariables>
+ <variable formalParameter="IN1">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="37" formalParameter="Q">
+ <position x="984" y="488"/>
+ <position x="800" y="488"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN2" negated="true">
+ <connectionPointIn>
+ <relPosition x="0" y="56"/>
+ <connection refLocalId="34" formalParameter="OUT">
+ <position x="984" y="512"/>
+ <position x="974" y="512"/>
+ <position x="974" y="544"/>
+ <position x="944" y="544"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <block localId="53" typeName="csv_refresh" instanceName="csv_refresh0" executionOrderId="0" width="104" height="48">
+ <position x="1112" y="456"/>
+ <inputVariables>
+ <variable formalParameter="TRIG">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="39" formalParameter="OUT">
+ <position x="1112" y="488"/>
+ <position x="1048" y="488"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables/>
+ </block>
+ <outVariable localId="54" executionOrderId="0" width="56" height="32" negated="false">
+ <position x="1096" y="528"/>
+ <connectionPointIn>
+ <relPosition x="0" y="16"/>
+ <connection refLocalId="34" formalParameter="OUT">
+ <position x="1096" y="544"/>
+ <position x="944" y="544"/>
+ </connection>
+ </connectionPointIn>
+ <expression>ERROR</expression>
+ </outVariable>
+ <block localId="7" typeName="CONCAT" executionOrderId="0" height="240" width="67">
+ <position x="536" y="112"/>
+ <inputVariables>
+ <variable formalParameter="IN1">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="8">
+ <position x="536" y="144"/>
+ <position x="496" y="144"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN2">
+ <connectionPointIn>
+ <relPosition x="0" y="56"/>
+ <connection refLocalId="2">
+ <position x="536" y="168"/>
+ <position x="328" y="168"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN3">
+ <connectionPointIn>
+ <relPosition x="0" y="80"/>
+ <connection refLocalId="10">
+ <position x="536" y="192"/>
+ <position x="496" y="192"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN4">
+ <connectionPointIn>
+ <relPosition x="0" y="104"/>
+ <connection refLocalId="3">
+ <position x="536" y="216"/>
+ <position x="328" y="216"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN5">
+ <connectionPointIn>
+ <relPosition x="0" y="128"/>
+ <connection refLocalId="12">
+ <position x="536" y="240"/>
+ <position x="496" y="240"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN6">
+ <connectionPointIn>
+ <relPosition x="0" y="152"/>
+ <connection refLocalId="4">
+ <position x="536" y="264"/>
+ <position x="328" y="264"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN7">
+ <connectionPointIn>
+ <relPosition x="0" y="176"/>
+ <connection refLocalId="1">
+ <position x="536" y="288"/>
+ <position x="496" y="288"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN8">
+ <connectionPointIn>
+ <relPosition x="0" y="200"/>
+ <connection refLocalId="52">
+ <position x="536" y="312"/>
+ <position x="328" y="312"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN9">
+ <connectionPointIn>
+ <relPosition x="0" y="224"/>
+ <connection refLocalId="14">
+ <position x="536" y="336"/>
+ <position x="496" y="336"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="67" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <inVariable localId="2" executionOrderId="0" height="32" width="112" negated="false">
+ <position x="216" y="152"/>
+ <connectionPointOut>
+ <relPosition x="112" y="16"/>
+ </connectionPointOut>
+ <expression>FILE_NAME</expression>
+ </inVariable>
+ <inVariable localId="10" executionOrderId="0" height="24" width="112" negated="false">
+ <position x="384" y="184"/>
+ <connectionPointOut>
+ <relPosition x="112" y="8"/>
+ </connectionPointOut>
+ <expression>'","'</expression>
+ </inVariable>
+ <inVariable localId="3" executionOrderId="0" height="32" width="112" negated="false">
+ <position x="216" y="200"/>
+ <connectionPointOut>
+ <relPosition x="112" y="16"/>
+ </connectionPointOut>
+ <expression>ROW</expression>
+ </inVariable>
+ <inVariable localId="12" executionOrderId="0" height="24" width="112" negated="false">
+ <position x="384" y="224"/>
+ <connectionPointOut>
+ <relPosition x="112" y="16"/>
+ </connectionPointOut>
+ <expression>'","'</expression>
+ </inVariable>
+ <inVariable localId="4" executionOrderId="0" height="32" width="112" negated="false">
+ <position x="216" y="248"/>
+ <connectionPointOut>
+ <relPosition x="112" y="16"/>
+ </connectionPointOut>
+ <expression>COLUMN</expression>
+ </inVariable>
+ <inVariable localId="14" executionOrderId="0" height="24" width="112" negated="false">
+ <position x="384" y="320"/>
+ <connectionPointOut>
+ <relPosition x="112" y="16"/>
+ </connectionPointOut>
+ <expression>'")'</expression>
+ </inVariable>
+ <connector name="Code" localId="19" height="24" width="128">
+ <position x="656" y="136"/>
+ <connectionPointIn>
+ <relPosition x="0" y="8"/>
+ <connection refLocalId="7" formalParameter="OUT">
+ <position x="656" y="144"/>
+ <position x="603" y="144"/>
+ </connection>
+ </connectionPointIn>
+ </connector>
+ <inVariable localId="1" executionOrderId="0" height="24" width="112" negated="false">
+ <position x="384" y="272"/>
+ <connectionPointOut>
+ <relPosition x="112" y="16"/>
+ </connectionPointOut>
+ <expression>'","'</expression>
+ </inVariable>
+ </FBD>
+ </body>
+ </pou>
<pou name="_csv_update" pouType="functionBlock">
<interface>
<externalVars>
@@ -1058,7 +1564,7 @@
<connectionPointOut>
<relPosition x="176" y="16"/>
</connectionPointOut>
- <expression>'pyext_csv_reload()'</expression>
+ <expression>'CSVReload()'</expression>
</inVariable>
<block localId="15" typeName="csv_refresh" instanceName="csv_refresh0" executionOrderId="0" width="104" height="64">
<position x="568" y="32"/>
@@ -1930,9 +2436,9 @@
</outputVariables>
</block>
<inVariable localId="8" executionOrderId="0" height="24" width="160" negated="false">
- <position x="352" y="112"/>
- <connectionPointOut>
- <relPosition x="160" y="8"/>
+ <position x="352" y="104"/>
+ <connectionPointOut>
+ <relPosition x="160" y="16"/>
</connectionPointOut>
<expression>'CSVWrInt("'</expression>
</inVariable>
@@ -1944,9 +2450,9 @@
<expression>FILE_NAME</expression>
</inVariable>
<inVariable localId="10" executionOrderId="0" height="24" width="112" negated="false">
- <position x="504" y="152"/>
- <connectionPointOut>
- <relPosition x="112" y="16"/>
+ <position x="504" y="160"/>
+ <connectionPointOut>
+ <relPosition x="112" y="8"/>
</connectionPointOut>
<expression>'",'</expression>
</inVariable>
@@ -1958,9 +2464,9 @@
<expression>ROW</expression>
</inVariable>
<inVariable localId="12" executionOrderId="0" height="24" width="112" negated="false">
- <position x="504" y="208"/>
- <connectionPointOut>
- <relPosition x="112" y="8"/>
+ <position x="504" y="200"/>
+ <connectionPointOut>
+ <relPosition x="112" y="16"/>
</connectionPointOut>
<expression>','</expression>
</inVariable>
@@ -1972,9 +2478,9 @@
<expression>COLUMN</expression>
</inVariable>
<inVariable localId="51" executionOrderId="0" height="24" width="112" negated="false">
- <position x="504" y="256"/>
- <connectionPointOut>
- <relPosition x="112" y="8"/>
+ <position x="504" y="248"/>
+ <connectionPointOut>
+ <relPosition x="112" y="16"/>
</connectionPointOut>
<expression>',"'</expression>
</inVariable>
@@ -1986,18 +2492,12 @@
<expression>CONTENT</expression>
</inVariable>
<inVariable localId="14" executionOrderId="0" height="24" width="112" negated="false">
- <position x="504" y="304"/>
+ <position x="504" y="296"/>
<connectionPointOut>
<relPosition x="112" y="16"/>
</connectionPointOut>
<expression>'")'</expression>
</inVariable>
- <comment localId="28" height="48" width="520">
- <position x="48" y="400"/>
- <content>
- <xhtml:p><![CDATA[Execute python code on change or globally when CSV is updated]]></xhtml:p>
- </content>
- </comment>
<comment localId="29" height="40" width="232">
<position x="64" y="32"/>
<content>
@@ -2005,9 +2505,9 @@
</content>
</comment>
<connector name="Code" localId="30" height="24" width="128">
- <position x="856" y="112"/>
+ <position x="856" y="104"/>
<connectionPointIn>
- <relPosition x="0" y="8"/>
+ <relPosition x="0" y="16"/>
<connection refLocalId="7" formalParameter="OUT">
<position x="856" y="120"/>
<position x="752" y="120"/>