Tests: Add preliminary IEC-61131 language test, to be continued.
Test sets BEREMIZ_TEST_CYCLES in order to speed-up TON duration test.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/cli_tests/iec61131_lang_test.bash Mon Mar 27 10:19:14 2023 +0200
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+# Run IEC61131 language test through command line, and check for success in output
+
+coproc setsid $BEREMIZPYTHONPATH $BEREMIZPATH/Beremiz_cli.py -k --project-home $BEREMIZPATH/tests/projects/iec61131_lang_test build transfer run;
+
+while read -t 5 -u ${COPROC[0]} line; do
+ echo "$line"
+ if [[ "$line" == *ALL\ TESTS\ OK* ]]; then
+ pkill INT -s $COPROC_PID
+ exit 0
+ fi
+done
+
+exit 42
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/projects/iec61131_lang_test/beremiz.xml Mon Mar 27 10:19:14 2023 +0200
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='utf-8'?>
+<BeremizRoot xmlns:xsd="http://www.w3.org/2001/XMLSchema" URI_location="LOCAL://">
+ <TargetType>
+ <Linux CFLAGS="-DBEREMIZ_TEST_CYCLES=1000"/>
+ </TargetType>
+</BeremizRoot>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/projects/iec61131_lang_test/gen_conversion.py Mon Mar 27 10:19:14 2023 +0200
@@ -0,0 +1,37 @@
+
+# Naive code generator for type convesion function XX_TO_YY testing
+
+
+types = [
+ ("BOOL", "TRUE"),
+ ("SINT", "42"),
+ ("USINT", "42"),
+ ("BYTE", "42"),
+ ("STRING", "'42'"),
+ ("INT", "42"),
+ ("UINT", "42"),
+ ("WORD", "42"),
+ ("DINT", "42"),
+ ("UDINT", "42"),
+ ("DWORD", "42"),
+ ("LINT", "42"),
+ ("ULINT", "42"),
+ ("LWORD", "42"),
+ ("REAL", "42.0"),
+ ("LREAL", "42.0"),
+ #("TIME", "42"),
+ #("TOD", "42"),
+ #("DATE", "42"),
+ #("DT", "42"),
+]
+
+for tsrc, src_literal in types:
+ for tdest, dest_literal in types:
+ if tsrc == tdest: continue
+ s = f"""
+RESULT := '{tsrc}_TO_{tdest}';
+IF {tsrc}_TO_{tdest}({tsrc}#{src_literal}) <> {tdest}#{dest_literal} THEN RETURN; END_IF;
+"""
+ print(s)
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/projects/iec61131_lang_test/plc.xml Mon Mar 27 10:19:14 2023 +0200
@@ -0,0 +1,2183 @@
+<?xml version='1.0' encoding='utf-8'?>
+<project xmlns:ns1="http://www.plcopen.org/xml/tc6_0201" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.plcopen.org/xml/tc6_0201">
+ <fileHeader companyName="Unknown" productName="Unnamed" productVersion="1" creationDateTime="2023-03-11T14:33:27"/>
+ <contentHeader name="Unnamed" modificationDateTime="2023-03-27T09:12:21">
+ <coordinateInfo>
+ <fbd>
+ <scaling x="8" y="8"/>
+ </fbd>
+ <ld>
+ <scaling x="0" y="0"/>
+ </ld>
+ <sfc>
+ <scaling x="0" y="0"/>
+ </sfc>
+ </coordinateInfo>
+ </contentHeader>
+ <types>
+ <dataTypes/>
+ <pous>
+ <pou name="CONVERSION_TEST" pouType="functionBlock">
+ <interface>
+ <outputVars>
+ <variable name="RESULT">
+ <type>
+ <string/>
+ </type>
+ </variable>
+ </outputVars>
+ </interface>
+ <body>
+ <ST>
+ <xhtml:p><![CDATA[
+(* Code generated by gen_vonversion.py,
+ fixed by hand for corner cases *)
+
+(* 240 conversions from literals tested *)
+
+(* Tested types
+ BOOL, SINT, USINT, BYTE, STRING, INT, UINT,
+ WORD, DINT, UDINT, DWORD, LINT, ULINT, LWORD,
+ REAL, LREAL *)
+
+(* TODO: test TIME, TOD, DATE and DT *)
+(* TODO: similar test with values that tiggers overflow *)
+
+RESULT := 'BOOL_TO_SINT';
+IF BOOL_TO_SINT(BOOL#TRUE) <> SINT#1 THEN RETURN; END_IF;
+
+
+RESULT := 'BOOL_TO_USINT';
+IF BOOL_TO_USINT(BOOL#TRUE) <> USINT#1 THEN RETURN; END_IF;
+
+
+RESULT := 'BOOL_TO_BYTE';
+IF BOOL_TO_BYTE(BOOL#TRUE) <> BYTE#1 THEN RETURN; END_IF;
+
+
+RESULT := 'BOOL_TO_STRING';
+IF BOOL_TO_STRING(BOOL#TRUE) <> 'TRUE' THEN RETURN; END_IF;
+
+
+RESULT := 'BOOL_TO_INT';
+IF BOOL_TO_INT(BOOL#TRUE) <> INT#1 THEN RETURN; END_IF;
+
+
+RESULT := 'BOOL_TO_UINT';
+IF BOOL_TO_UINT(BOOL#TRUE) <> UINT#1 THEN RETURN; END_IF;
+
+
+RESULT := 'BOOL_TO_WORD';
+IF BOOL_TO_WORD(BOOL#TRUE) <> WORD#1 THEN RETURN; END_IF;
+
+
+RESULT := 'BOOL_TO_DINT';
+IF BOOL_TO_DINT(BOOL#TRUE) <> DINT#1 THEN RETURN; END_IF;
+
+
+RESULT := 'BOOL_TO_UDINT';
+IF BOOL_TO_UDINT(BOOL#TRUE) <> UDINT#1 THEN RETURN; END_IF;
+
+
+RESULT := 'BOOL_TO_DWORD';
+IF BOOL_TO_DWORD(BOOL#TRUE) <> DWORD#1 THEN RETURN; END_IF;
+
+
+RESULT := 'BOOL_TO_LINT';
+IF BOOL_TO_LINT(BOOL#TRUE) <> LINT#1 THEN RETURN; END_IF;
+
+
+RESULT := 'BOOL_TO_ULINT';
+IF BOOL_TO_ULINT(BOOL#TRUE) <> ULINT#1 THEN RETURN; END_IF;
+
+
+RESULT := 'BOOL_TO_LWORD';
+IF BOOL_TO_LWORD(BOOL#TRUE) <> LWORD#1 THEN RETURN; END_IF;
+
+
+RESULT := 'BOOL_TO_REAL';
+IF BOOL_TO_REAL(BOOL#TRUE) <> REAL#1.0 THEN RETURN; END_IF;
+
+
+RESULT := 'BOOL_TO_LREAL';
+IF BOOL_TO_LREAL(BOOL#TRUE) <> LREAL#1.0 THEN RETURN; END_IF;
+
+
+RESULT := 'SINT_TO_BOOL';
+IF SINT_TO_BOOL(SINT#42) <> BOOL#TRUE THEN RETURN; END_IF;
+
+
+RESULT := 'SINT_TO_USINT';
+IF SINT_TO_USINT(SINT#42) <> USINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'SINT_TO_BYTE';
+IF SINT_TO_BYTE(SINT#42) <> BYTE#42 THEN RETURN; END_IF;
+
+
+RESULT := 'SINT_TO_STRING';
+IF SINT_TO_STRING(SINT#42) <> '42' THEN RETURN; END_IF;
+
+
+RESULT := 'SINT_TO_INT';
+IF SINT_TO_INT(SINT#42) <> INT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'SINT_TO_UINT';
+IF SINT_TO_UINT(SINT#42) <> UINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'SINT_TO_WORD';
+IF SINT_TO_WORD(SINT#42) <> WORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'SINT_TO_DINT';
+IF SINT_TO_DINT(SINT#42) <> DINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'SINT_TO_UDINT';
+IF SINT_TO_UDINT(SINT#42) <> UDINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'SINT_TO_DWORD';
+IF SINT_TO_DWORD(SINT#42) <> DWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'SINT_TO_LINT';
+IF SINT_TO_LINT(SINT#42) <> LINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'SINT_TO_ULINT';
+IF SINT_TO_ULINT(SINT#42) <> ULINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'SINT_TO_LWORD';
+IF SINT_TO_LWORD(SINT#42) <> LWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'SINT_TO_REAL';
+IF SINT_TO_REAL(SINT#42) <> REAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'SINT_TO_LREAL';
+IF SINT_TO_LREAL(SINT#42) <> LREAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'USINT_TO_BOOL';
+IF USINT_TO_BOOL(USINT#42) <> BOOL#TRUE THEN RETURN; END_IF;
+
+
+RESULT := 'USINT_TO_SINT';
+IF USINT_TO_SINT(USINT#42) <> SINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'USINT_TO_BYTE';
+IF USINT_TO_BYTE(USINT#42) <> BYTE#42 THEN RETURN; END_IF;
+
+
+RESULT := 'USINT_TO_STRING';
+IF USINT_TO_STRING(USINT#42) <> '42' THEN RETURN; END_IF;
+
+
+RESULT := 'USINT_TO_INT';
+IF USINT_TO_INT(USINT#42) <> INT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'USINT_TO_UINT';
+IF USINT_TO_UINT(USINT#42) <> UINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'USINT_TO_WORD';
+IF USINT_TO_WORD(USINT#42) <> WORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'USINT_TO_DINT';
+IF USINT_TO_DINT(USINT#42) <> DINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'USINT_TO_UDINT';
+IF USINT_TO_UDINT(USINT#42) <> UDINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'USINT_TO_DWORD';
+IF USINT_TO_DWORD(USINT#42) <> DWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'USINT_TO_LINT';
+IF USINT_TO_LINT(USINT#42) <> LINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'USINT_TO_ULINT';
+IF USINT_TO_ULINT(USINT#42) <> ULINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'USINT_TO_LWORD';
+IF USINT_TO_LWORD(USINT#42) <> LWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'USINT_TO_REAL';
+IF USINT_TO_REAL(USINT#42) <> REAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'USINT_TO_LREAL';
+IF USINT_TO_LREAL(USINT#42) <> LREAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'BYTE_TO_BOOL';
+IF BYTE_TO_BOOL(BYTE#42) <> BOOL#TRUE THEN RETURN; END_IF;
+
+
+RESULT := 'BYTE_TO_SINT';
+IF BYTE_TO_SINT(BYTE#42) <> SINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'BYTE_TO_USINT';
+IF BYTE_TO_USINT(BYTE#42) <> USINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'BYTE_TO_STRING';
+IF BYTE_TO_STRING(BYTE#42) <> '16#2a' THEN RETURN; END_IF;
+
+
+RESULT := 'BYTE_TO_INT';
+IF BYTE_TO_INT(BYTE#42) <> INT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'BYTE_TO_UINT';
+IF BYTE_TO_UINT(BYTE#42) <> UINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'BYTE_TO_WORD';
+IF BYTE_TO_WORD(BYTE#42) <> WORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'BYTE_TO_DINT';
+IF BYTE_TO_DINT(BYTE#42) <> DINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'BYTE_TO_UDINT';
+IF BYTE_TO_UDINT(BYTE#42) <> UDINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'BYTE_TO_DWORD';
+IF BYTE_TO_DWORD(BYTE#42) <> DWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'BYTE_TO_LINT';
+IF BYTE_TO_LINT(BYTE#42) <> LINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'BYTE_TO_ULINT';
+IF BYTE_TO_ULINT(BYTE#42) <> ULINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'BYTE_TO_LWORD';
+IF BYTE_TO_LWORD(BYTE#42) <> LWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'BYTE_TO_REAL';
+IF BYTE_TO_REAL(BYTE#42) <> REAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'BYTE_TO_LREAL';
+IF BYTE_TO_LREAL(BYTE#42) <> LREAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'STRING_TO_BOOL';
+IF STRING_TO_BOOL('42') <> BOOL#FALSE THEN RETURN; END_IF;
+
+
+RESULT := 'STRING_TO_SINT';
+IF STRING_TO_SINT('42') <> SINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'STRING_TO_USINT';
+IF STRING_TO_USINT('42') <> USINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'STRING_TO_BYTE';
+IF STRING_TO_BYTE('42') <> BYTE#42 THEN RETURN; END_IF;
+
+
+RESULT := 'STRING_TO_INT';
+IF STRING_TO_INT('42') <> INT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'STRING_TO_UINT';
+IF STRING_TO_UINT('42') <> UINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'STRING_TO_WORD';
+IF STRING_TO_WORD('42') <> WORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'STRING_TO_DINT';
+IF STRING_TO_DINT('42') <> DINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'STRING_TO_UDINT';
+IF STRING_TO_UDINT('42') <> UDINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'STRING_TO_DWORD';
+IF STRING_TO_DWORD('42') <> DWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'STRING_TO_LINT';
+IF STRING_TO_LINT('42') <> LINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'STRING_TO_ULINT';
+IF STRING_TO_ULINT('42') <> ULINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'STRING_TO_LWORD';
+IF STRING_TO_LWORD('42') <> LWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'STRING_TO_REAL';
+IF STRING_TO_REAL('42') <> REAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'STRING_TO_LREAL';
+IF STRING_TO_LREAL('42') <> LREAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'INT_TO_BOOL';
+IF INT_TO_BOOL(INT#42) <> BOOL#TRUE THEN RETURN; END_IF;
+
+
+RESULT := 'INT_TO_SINT';
+IF INT_TO_SINT(INT#42) <> SINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'INT_TO_USINT';
+IF INT_TO_USINT(INT#42) <> USINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'INT_TO_BYTE';
+IF INT_TO_BYTE(INT#42) <> BYTE#42 THEN RETURN; END_IF;
+
+
+RESULT := 'INT_TO_STRING';
+IF INT_TO_STRING(INT#42) <> '42' THEN RETURN; END_IF;
+
+
+RESULT := 'INT_TO_UINT';
+IF INT_TO_UINT(INT#42) <> UINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'INT_TO_WORD';
+IF INT_TO_WORD(INT#42) <> WORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'INT_TO_DINT';
+IF INT_TO_DINT(INT#42) <> DINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'INT_TO_UDINT';
+IF INT_TO_UDINT(INT#42) <> UDINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'INT_TO_DWORD';
+IF INT_TO_DWORD(INT#42) <> DWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'INT_TO_LINT';
+IF INT_TO_LINT(INT#42) <> LINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'INT_TO_ULINT';
+IF INT_TO_ULINT(INT#42) <> ULINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'INT_TO_LWORD';
+IF INT_TO_LWORD(INT#42) <> LWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'INT_TO_REAL';
+IF INT_TO_REAL(INT#42) <> REAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'INT_TO_LREAL';
+IF INT_TO_LREAL(INT#42) <> LREAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'UINT_TO_BOOL';
+IF UINT_TO_BOOL(UINT#42) <> BOOL#TRUE THEN RETURN; END_IF;
+
+
+RESULT := 'UINT_TO_SINT';
+IF UINT_TO_SINT(UINT#42) <> SINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UINT_TO_USINT';
+IF UINT_TO_USINT(UINT#42) <> USINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UINT_TO_BYTE';
+IF UINT_TO_BYTE(UINT#42) <> BYTE#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UINT_TO_STRING';
+IF UINT_TO_STRING(UINT#42) <> '42' THEN RETURN; END_IF;
+
+
+RESULT := 'UINT_TO_INT';
+IF UINT_TO_INT(UINT#42) <> INT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UINT_TO_WORD';
+IF UINT_TO_WORD(UINT#42) <> WORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UINT_TO_DINT';
+IF UINT_TO_DINT(UINT#42) <> DINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UINT_TO_UDINT';
+IF UINT_TO_UDINT(UINT#42) <> UDINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UINT_TO_DWORD';
+IF UINT_TO_DWORD(UINT#42) <> DWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UINT_TO_LINT';
+IF UINT_TO_LINT(UINT#42) <> LINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UINT_TO_ULINT';
+IF UINT_TO_ULINT(UINT#42) <> ULINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UINT_TO_LWORD';
+IF UINT_TO_LWORD(UINT#42) <> LWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UINT_TO_REAL';
+IF UINT_TO_REAL(UINT#42) <> REAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'UINT_TO_LREAL';
+IF UINT_TO_LREAL(UINT#42) <> LREAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'WORD_TO_BOOL';
+IF WORD_TO_BOOL(WORD#42) <> BOOL#TRUE THEN RETURN; END_IF;
+
+
+RESULT := 'WORD_TO_SINT';
+IF WORD_TO_SINT(WORD#42) <> SINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'WORD_TO_USINT';
+IF WORD_TO_USINT(WORD#42) <> USINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'WORD_TO_BYTE';
+IF WORD_TO_BYTE(WORD#42) <> BYTE#42 THEN RETURN; END_IF;
+
+
+RESULT := 'WORD_TO_STRING';
+IF WORD_TO_STRING(WORD#42) <> '16#2a' THEN RETURN; END_IF;
+
+
+RESULT := 'WORD_TO_INT';
+IF WORD_TO_INT(WORD#42) <> INT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'WORD_TO_UINT';
+IF WORD_TO_UINT(WORD#42) <> UINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'WORD_TO_DINT';
+IF WORD_TO_DINT(WORD#42) <> DINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'WORD_TO_UDINT';
+IF WORD_TO_UDINT(WORD#42) <> UDINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'WORD_TO_DWORD';
+IF WORD_TO_DWORD(WORD#42) <> DWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'WORD_TO_LINT';
+IF WORD_TO_LINT(WORD#42) <> LINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'WORD_TO_ULINT';
+IF WORD_TO_ULINT(WORD#42) <> ULINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'WORD_TO_LWORD';
+IF WORD_TO_LWORD(WORD#42) <> LWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'WORD_TO_REAL';
+IF WORD_TO_REAL(WORD#42) <> REAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'WORD_TO_LREAL';
+IF WORD_TO_LREAL(WORD#42) <> LREAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'DINT_TO_BOOL';
+IF DINT_TO_BOOL(DINT#42) <> BOOL#TRUE THEN RETURN; END_IF;
+
+
+RESULT := 'DINT_TO_SINT';
+IF DINT_TO_SINT(DINT#42) <> SINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DINT_TO_USINT';
+IF DINT_TO_USINT(DINT#42) <> USINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DINT_TO_BYTE';
+IF DINT_TO_BYTE(DINT#42) <> BYTE#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DINT_TO_STRING';
+IF DINT_TO_STRING(DINT#42) <> '42' THEN RETURN; END_IF;
+
+
+RESULT := 'DINT_TO_INT';
+IF DINT_TO_INT(DINT#42) <> INT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DINT_TO_UINT';
+IF DINT_TO_UINT(DINT#42) <> UINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DINT_TO_WORD';
+IF DINT_TO_WORD(DINT#42) <> WORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DINT_TO_UDINT';
+IF DINT_TO_UDINT(DINT#42) <> UDINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DINT_TO_DWORD';
+IF DINT_TO_DWORD(DINT#42) <> DWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DINT_TO_LINT';
+IF DINT_TO_LINT(DINT#42) <> LINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DINT_TO_ULINT';
+IF DINT_TO_ULINT(DINT#42) <> ULINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DINT_TO_LWORD';
+IF DINT_TO_LWORD(DINT#42) <> LWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DINT_TO_REAL';
+IF DINT_TO_REAL(DINT#42) <> REAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'DINT_TO_LREAL';
+IF DINT_TO_LREAL(DINT#42) <> LREAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'UDINT_TO_BOOL';
+IF UDINT_TO_BOOL(UDINT#42) <> BOOL#TRUE THEN RETURN; END_IF;
+
+
+RESULT := 'UDINT_TO_SINT';
+IF UDINT_TO_SINT(UDINT#42) <> SINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UDINT_TO_USINT';
+IF UDINT_TO_USINT(UDINT#42) <> USINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UDINT_TO_BYTE';
+IF UDINT_TO_BYTE(UDINT#42) <> BYTE#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UDINT_TO_STRING';
+IF UDINT_TO_STRING(UDINT#42) <> '42' THEN RETURN; END_IF;
+
+
+RESULT := 'UDINT_TO_INT';
+IF UDINT_TO_INT(UDINT#42) <> INT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UDINT_TO_UINT';
+IF UDINT_TO_UINT(UDINT#42) <> UINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UDINT_TO_WORD';
+IF UDINT_TO_WORD(UDINT#42) <> WORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UDINT_TO_DINT';
+IF UDINT_TO_DINT(UDINT#42) <> DINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UDINT_TO_DWORD';
+IF UDINT_TO_DWORD(UDINT#42) <> DWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UDINT_TO_LINT';
+IF UDINT_TO_LINT(UDINT#42) <> LINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UDINT_TO_ULINT';
+IF UDINT_TO_ULINT(UDINT#42) <> ULINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UDINT_TO_LWORD';
+IF UDINT_TO_LWORD(UDINT#42) <> LWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'UDINT_TO_REAL';
+IF UDINT_TO_REAL(UDINT#42) <> REAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'UDINT_TO_LREAL';
+IF UDINT_TO_LREAL(UDINT#42) <> LREAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'DWORD_TO_BOOL';
+IF DWORD_TO_BOOL(DWORD#42) <> BOOL#TRUE THEN RETURN; END_IF;
+
+
+RESULT := 'DWORD_TO_SINT';
+IF DWORD_TO_SINT(DWORD#42) <> SINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DWORD_TO_USINT';
+IF DWORD_TO_USINT(DWORD#42) <> USINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DWORD_TO_BYTE';
+IF DWORD_TO_BYTE(DWORD#42) <> BYTE#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DWORD_TO_STRING';
+IF DWORD_TO_STRING(DWORD#42) <> '16#2a' THEN RETURN; END_IF;
+
+
+RESULT := 'DWORD_TO_INT';
+IF DWORD_TO_INT(DWORD#42) <> INT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DWORD_TO_UINT';
+IF DWORD_TO_UINT(DWORD#42) <> UINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DWORD_TO_WORD';
+IF DWORD_TO_WORD(DWORD#42) <> WORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DWORD_TO_DINT';
+IF DWORD_TO_DINT(DWORD#42) <> DINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DWORD_TO_UDINT';
+IF DWORD_TO_UDINT(DWORD#42) <> UDINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DWORD_TO_LINT';
+IF DWORD_TO_LINT(DWORD#42) <> LINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DWORD_TO_ULINT';
+IF DWORD_TO_ULINT(DWORD#42) <> ULINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DWORD_TO_LWORD';
+IF DWORD_TO_LWORD(DWORD#42) <> LWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'DWORD_TO_REAL';
+IF DWORD_TO_REAL(DWORD#42) <> REAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'DWORD_TO_LREAL';
+IF DWORD_TO_LREAL(DWORD#42) <> LREAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'LINT_TO_BOOL';
+IF LINT_TO_BOOL(LINT#42) <> BOOL#TRUE THEN RETURN; END_IF;
+
+
+RESULT := 'LINT_TO_SINT';
+IF LINT_TO_SINT(LINT#42) <> SINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LINT_TO_USINT';
+IF LINT_TO_USINT(LINT#42) <> USINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LINT_TO_BYTE';
+IF LINT_TO_BYTE(LINT#42) <> BYTE#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LINT_TO_STRING';
+IF LINT_TO_STRING(LINT#42) <> '42' THEN RETURN; END_IF;
+
+
+RESULT := 'LINT_TO_INT';
+IF LINT_TO_INT(LINT#42) <> INT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LINT_TO_UINT';
+IF LINT_TO_UINT(LINT#42) <> UINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LINT_TO_WORD';
+IF LINT_TO_WORD(LINT#42) <> WORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LINT_TO_DINT';
+IF LINT_TO_DINT(LINT#42) <> DINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LINT_TO_UDINT';
+IF LINT_TO_UDINT(LINT#42) <> UDINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LINT_TO_DWORD';
+IF LINT_TO_DWORD(LINT#42) <> DWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LINT_TO_ULINT';
+IF LINT_TO_ULINT(LINT#42) <> ULINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LINT_TO_LWORD';
+IF LINT_TO_LWORD(LINT#42) <> LWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LINT_TO_REAL';
+IF LINT_TO_REAL(LINT#42) <> REAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'LINT_TO_LREAL';
+IF LINT_TO_LREAL(LINT#42) <> LREAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'ULINT_TO_BOOL';
+IF ULINT_TO_BOOL(ULINT#42) <> BOOL#TRUE THEN RETURN; END_IF;
+
+
+RESULT := 'ULINT_TO_SINT';
+IF ULINT_TO_SINT(ULINT#42) <> SINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'ULINT_TO_USINT';
+IF ULINT_TO_USINT(ULINT#42) <> USINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'ULINT_TO_BYTE';
+IF ULINT_TO_BYTE(ULINT#42) <> BYTE#42 THEN RETURN; END_IF;
+
+
+RESULT := 'ULINT_TO_STRING';
+IF ULINT_TO_STRING(ULINT#42) <> '42' THEN RETURN; END_IF;
+
+
+RESULT := 'ULINT_TO_INT';
+IF ULINT_TO_INT(ULINT#42) <> INT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'ULINT_TO_UINT';
+IF ULINT_TO_UINT(ULINT#42) <> UINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'ULINT_TO_WORD';
+IF ULINT_TO_WORD(ULINT#42) <> WORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'ULINT_TO_DINT';
+IF ULINT_TO_DINT(ULINT#42) <> DINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'ULINT_TO_UDINT';
+IF ULINT_TO_UDINT(ULINT#42) <> UDINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'ULINT_TO_DWORD';
+IF ULINT_TO_DWORD(ULINT#42) <> DWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'ULINT_TO_LINT';
+IF ULINT_TO_LINT(ULINT#42) <> LINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'ULINT_TO_LWORD';
+IF ULINT_TO_LWORD(ULINT#42) <> LWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'ULINT_TO_REAL';
+IF ULINT_TO_REAL(ULINT#42) <> REAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'ULINT_TO_LREAL';
+IF ULINT_TO_LREAL(ULINT#42) <> LREAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'LWORD_TO_BOOL';
+IF LWORD_TO_BOOL(LWORD#42) <> BOOL#TRUE THEN RETURN; END_IF;
+
+
+RESULT := 'LWORD_TO_SINT';
+IF LWORD_TO_SINT(LWORD#42) <> SINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LWORD_TO_USINT';
+IF LWORD_TO_USINT(LWORD#42) <> USINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LWORD_TO_BYTE';
+IF LWORD_TO_BYTE(LWORD#42) <> BYTE#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LWORD_TO_STRING';
+IF LWORD_TO_STRING(LWORD#42) <> '16#2a' THEN RETURN; END_IF;
+
+
+RESULT := 'LWORD_TO_INT';
+IF LWORD_TO_INT(LWORD#42) <> INT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LWORD_TO_UINT';
+IF LWORD_TO_UINT(LWORD#42) <> UINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LWORD_TO_WORD';
+IF LWORD_TO_WORD(LWORD#42) <> WORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LWORD_TO_DINT';
+IF LWORD_TO_DINT(LWORD#42) <> DINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LWORD_TO_UDINT';
+IF LWORD_TO_UDINT(LWORD#42) <> UDINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LWORD_TO_DWORD';
+IF LWORD_TO_DWORD(LWORD#42) <> DWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LWORD_TO_LINT';
+IF LWORD_TO_LINT(LWORD#42) <> LINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LWORD_TO_ULINT';
+IF LWORD_TO_ULINT(LWORD#42) <> ULINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LWORD_TO_REAL';
+IF LWORD_TO_REAL(LWORD#42) <> REAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'LWORD_TO_LREAL';
+IF LWORD_TO_LREAL(LWORD#42) <> LREAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'REAL_TO_BOOL';
+IF REAL_TO_BOOL(REAL#42.0) <> BOOL#TRUE THEN RETURN; END_IF;
+
+
+RESULT := 'REAL_TO_SINT';
+IF REAL_TO_SINT(REAL#42.0) <> SINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'REAL_TO_USINT';
+IF REAL_TO_USINT(REAL#42.0) <> USINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'REAL_TO_BYTE';
+IF REAL_TO_BYTE(REAL#42.0) <> BYTE#42 THEN RETURN; END_IF;
+
+
+RESULT := 'REAL_TO_STRING';
+IF REAL_TO_STRING(REAL#42.0) <> '42' THEN RETURN; END_IF;
+
+
+RESULT := 'REAL_TO_INT';
+IF REAL_TO_INT(REAL#42.0) <> INT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'REAL_TO_UINT';
+IF REAL_TO_UINT(REAL#42.0) <> UINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'REAL_TO_WORD';
+IF REAL_TO_WORD(REAL#42.0) <> WORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'REAL_TO_DINT';
+IF REAL_TO_DINT(REAL#42.0) <> DINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'REAL_TO_UDINT';
+IF REAL_TO_UDINT(REAL#42.0) <> UDINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'REAL_TO_DWORD';
+IF REAL_TO_DWORD(REAL#42.0) <> DWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'REAL_TO_LINT';
+IF REAL_TO_LINT(REAL#42.0) <> LINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'REAL_TO_ULINT';
+IF REAL_TO_ULINT(REAL#42.0) <> ULINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'REAL_TO_LWORD';
+IF REAL_TO_LWORD(REAL#42.0) <> LWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'REAL_TO_LREAL';
+IF REAL_TO_LREAL(REAL#42.0) <> LREAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'LREAL_TO_BOOL';
+IF LREAL_TO_BOOL(LREAL#42.0) <> BOOL#TRUE THEN RETURN; END_IF;
+
+
+RESULT := 'LREAL_TO_SINT';
+IF LREAL_TO_SINT(LREAL#42.0) <> SINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LREAL_TO_USINT';
+IF LREAL_TO_USINT(LREAL#42.0) <> USINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LREAL_TO_BYTE';
+IF LREAL_TO_BYTE(LREAL#42.0) <> BYTE#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LREAL_TO_STRING';
+IF LREAL_TO_STRING(LREAL#42.0) <> '42' THEN RETURN; END_IF;
+
+
+RESULT := 'LREAL_TO_INT';
+IF LREAL_TO_INT(LREAL#42.0) <> INT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LREAL_TO_UINT';
+IF LREAL_TO_UINT(LREAL#42.0) <> UINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LREAL_TO_WORD';
+IF LREAL_TO_WORD(LREAL#42.0) <> WORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LREAL_TO_DINT';
+IF LREAL_TO_DINT(LREAL#42.0) <> DINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LREAL_TO_UDINT';
+IF LREAL_TO_UDINT(LREAL#42.0) <> UDINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LREAL_TO_DWORD';
+IF LREAL_TO_DWORD(LREAL#42.0) <> DWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LREAL_TO_LINT';
+IF LREAL_TO_LINT(LREAL#42.0) <> LINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LREAL_TO_ULINT';
+IF LREAL_TO_ULINT(LREAL#42.0) <> ULINT#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LREAL_TO_LWORD';
+IF LREAL_TO_LWORD(LREAL#42.0) <> LWORD#42 THEN RETURN; END_IF;
+
+
+RESULT := 'LREAL_TO_REAL';
+IF LREAL_TO_REAL(LREAL#42.0) <> REAL#42.0 THEN RETURN; END_IF;
+
+
+RESULT := 'OK';
+
+]]></xhtml:p>
+ </ST>
+ </body>
+ </pou>
+ <pou name="main_test" pouType="program">
+ <interface>
+ <localVars>
+ <variable name="RUN">
+ <type>
+ <BOOL/>
+ </type>
+ <initialValue>
+ <simpleValue value="TRUE"/>
+ </initialValue>
+ </variable>
+ <variable name="RESULT">
+ <type>
+ <string/>
+ </type>
+ </variable>
+ <variable name="CONVERSION_TEST0">
+ <type>
+ <derived name="CONVERSION_TEST"/>
+ </type>
+ </variable>
+ <variable name="R_TRIG0">
+ <type>
+ <derived name="R_TRIG"/>
+ </type>
+ </variable>
+ <variable name="LOGGER0">
+ <type>
+ <derived name="LOGGER"/>
+ </type>
+ </variable>
+ <variable name="TEMPO_TEST0">
+ <type>
+ <derived name="TEMPO_TEST"/>
+ </type>
+ </variable>
+ <variable name="LOGGER1">
+ <type>
+ <derived name="LOGGER"/>
+ </type>
+ </variable>
+ <variable name="SR0">
+ <type>
+ <derived name="SR"/>
+ </type>
+ </variable>
+ <variable name="SR1">
+ <type>
+ <derived name="SR"/>
+ </type>
+ </variable>
+ <variable name="LOGGER2">
+ <type>
+ <derived name="LOGGER"/>
+ </type>
+ </variable>
+ </localVars>
+ </interface>
+ <body>
+ <FBD>
+ <block localId="4" typeName="CONVERSION_TEST" instanceName="CONVERSION_TEST0" executionOrderId="0" height="72" width="136">
+ <position x="320" y="280"/>
+ <inputVariables>
+ <variable formalParameter="EN">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="5" formalParameter="Q">
+ <position x="320" y="312"/>
+ <position x="264" y="312"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="ENO">
+ <connectionPointOut>
+ <relPosition x="136" y="32"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="RESULT">
+ <connectionPointOut>
+ <relPosition x="136" y="56"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <block localId="5" typeName="R_TRIG" instanceName="R_TRIG0" executionOrderId="0" height="48" width="64">
+ <position x="200" y="280"/>
+ <inputVariables>
+ <variable formalParameter="CLK">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="6">
+ <position x="200" y="312"/>
+ <position x="168" y="312"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="Q">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <inVariable localId="6" executionOrderId="0" height="32" width="48" negated="false">
+ <position x="120" y="296"/>
+ <connectionPointOut>
+ <relPosition x="48" y="16"/>
+ </connectionPointOut>
+ <expression>TRUE</expression>
+ </inVariable>
+ <block localId="8" typeName="LOGGER" instanceName="LOGGER0" executionOrderId="0" height="112" width="64">
+ <position x="848" y="304"/>
+ <inputVariables>
+ <variable formalParameter="TRIG">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="4" formalParameter="ENO">
+ <position x="848" y="336"/>
+ <position x="760" y="336"/>
+ <position x="760" y="312"/>
+ <position x="456" y="312"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="MSG">
+ <connectionPointIn>
+ <relPosition x="0" y="64"/>
+ <connection refLocalId="11" formalParameter="OUT">
+ <position x="848" y="368"/>
+ <position x="736" y="368"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="LEVEL">
+ <connectionPointIn>
+ <relPosition x="0" y="96"/>
+ <connection refLocalId="10">
+ <position x="848" y="400"/>
+ <position x="816" y="400"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables/>
+ </block>
+ <inVariable localId="9" executionOrderId="0" height="32" width="128" negated="false">
+ <position x="512" y="352"/>
+ <connectionPointOut>
+ <relPosition x="128" y="16"/>
+ </connectionPointOut>
+ <expression>'CONVERSION: '</expression>
+ </inVariable>
+ <inVariable localId="10" executionOrderId="0" height="32" width="56" negated="false">
+ <position x="760" y="384"/>
+ <connectionPointOut>
+ <relPosition x="56" y="16"/>
+ </connectionPointOut>
+ <expression>DEBUG</expression>
+ </inVariable>
+ <block localId="11" typeName="CONCAT" executionOrderId="0" height="64" width="64">
+ <position x="672" y="336"/>
+ <inputVariables>
+ <variable formalParameter="IN1">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="9">
+ <position x="672" y="368"/>
+ <position x="640" y="368"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN2">
+ <connectionPointIn>
+ <relPosition x="0" y="56"/>
+ <connection refLocalId="4" formalParameter="RESULT">
+ <position x="672" y="392"/>
+ <position x="480" y="392"/>
+ <position x="480" y="336"/>
+ <position x="456" y="336"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <comment localId="12" height="40" width="248">
+ <position x="88" y="216"/>
+ <content>
+ <xhtml:p><![CDATA[Execute only on first cycle]]></xhtml:p>
+ </content>
+ </comment>
+ <comment localId="1" height="40" width="248">
+ <position x="576" y="216"/>
+ <content>
+ <xhtml:p><![CDATA[Log when just executed]]></xhtml:p>
+ </content>
+ </comment>
+ <block localId="13" typeName="TEMPO_TEST" instanceName="TEMPO_TEST0" executionOrderId="0" height="64" width="96">
+ <position x="336" y="600"/>
+ <inputVariables>
+ <variable formalParameter="RUN">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="16">
+ <position x="336" y="632"/>
+ <position x="248" y="632"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="VALID">
+ <connectionPointOut>
+ <relPosition x="96" y="32"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="RESULT">
+ <connectionPointOut>
+ <relPosition x="96" y="56"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <block localId="2" typeName="LOGGER" instanceName="LOGGER1" executionOrderId="0" height="112" width="64">
+ <position x="824" y="624"/>
+ <inputVariables>
+ <variable formalParameter="TRIG">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="13" formalParameter="VALID">
+ <position x="824" y="656"/>
+ <position x="736" y="656"/>
+ <position x="736" y="632"/>
+ <position x="432" y="632"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="MSG">
+ <connectionPointIn>
+ <relPosition x="0" y="64"/>
+ <connection refLocalId="14" formalParameter="OUT">
+ <position x="824" y="688"/>
+ <position x="712" y="688"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="LEVEL">
+ <connectionPointIn>
+ <relPosition x="0" y="96"/>
+ <connection refLocalId="7">
+ <position x="824" y="720"/>
+ <position x="792" y="720"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables/>
+ </block>
+ <inVariable localId="3" executionOrderId="0" height="32" width="128" negated="false">
+ <position x="488" y="672"/>
+ <connectionPointOut>
+ <relPosition x="128" y="16"/>
+ </connectionPointOut>
+ <expression>'TEMPO: '</expression>
+ </inVariable>
+ <inVariable localId="7" executionOrderId="0" height="32" width="56" negated="false">
+ <position x="736" y="704"/>
+ <connectionPointOut>
+ <relPosition x="56" y="16"/>
+ </connectionPointOut>
+ <expression>DEBUG</expression>
+ </inVariable>
+ <block localId="14" typeName="CONCAT" executionOrderId="0" height="64" width="64">
+ <position x="648" y="656"/>
+ <inputVariables>
+ <variable formalParameter="IN1">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="3">
+ <position x="648" y="688"/>
+ <position x="616" y="688"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN2">
+ <connectionPointIn>
+ <relPosition x="0" y="56"/>
+ <connection refLocalId="13" formalParameter="RESULT">
+ <position x="648" y="712"/>
+ <position x="464" y="712"/>
+ <position x="464" y="656"/>
+ <position x="432" y="656"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <comment localId="15" height="40" width="248">
+ <position x="536" y="536"/>
+ <content>
+ <xhtml:p><![CDATA[Log when valid]]></xhtml:p>
+ </content>
+ </comment>
+ <inVariable localId="16" executionOrderId="0" height="32" width="48" negated="false">
+ <position x="200" y="616"/>
+ <connectionPointOut>
+ <relPosition x="48" y="16"/>
+ </connectionPointOut>
+ <expression>TRUE</expression>
+ </inVariable>
+ <block localId="17" typeName="AND" executionOrderId="0" height="64" width="64">
+ <position x="1016" y="568"/>
+ <inputVariables>
+ <variable formalParameter="IN1">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="13" formalParameter="VALID">
+ <position x="1016" y="600"/>
+ <position x="736" y="600"/>
+ <position x="736" y="632"/>
+ <position x="432" y="632"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN2">
+ <connectionPointIn>
+ <relPosition x="0" y="56"/>
+ <connection refLocalId="18" formalParameter="OUT">
+ <position x="1016" y="624"/>
+ <position x="990" y="624"/>
+ <position x="990" y="752"/>
+ <position x="976" y="752"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <block localId="18" typeName="EQ" executionOrderId="0" height="64" width="64">
+ <position x="912" y="720"/>
+ <inputVariables>
+ <variable formalParameter="IN1">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="13" formalParameter="RESULT">
+ <position x="912" y="752"/>
+ <position x="464" y="752"/>
+ <position x="464" y="656"/>
+ <position x="432" y="656"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN2">
+ <connectionPointIn>
+ <relPosition x="0" y="56"/>
+ <connection refLocalId="19">
+ <position x="912" y="776"/>
+ <position x="864" y="776"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <inVariable localId="19" executionOrderId="0" height="32" width="48" negated="false">
+ <position x="816" y="760"/>
+ <connectionPointOut>
+ <relPosition x="48" y="16"/>
+ </connectionPointOut>
+ <expression>'OK'</expression>
+ </inVariable>
+ <block localId="20" typeName="SR" instanceName="SR0" executionOrderId="0" height="64" width="48">
+ <position x="1120" y="568"/>
+ <inputVariables>
+ <variable formalParameter="S1">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="17" formalParameter="OUT">
+ <position x="1120" y="600"/>
+ <position x="1080" y="600"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="R">
+ <connectionPointIn>
+ <relPosition x="0" y="56"/>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="Q1">
+ <connectionPointOut>
+ <relPosition x="48" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <block localId="21" typeName="AND" executionOrderId="0" height="64" width="64">
+ <position x="1296" y="496"/>
+ <inputVariables>
+ <variable formalParameter="IN1">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="23" formalParameter="Q1">
+ <position x="1296" y="528"/>
+ <position x="1256" y="528"/>
+ <position x="1256" y="272"/>
+ <position x="1192" y="272"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN2">
+ <connectionPointIn>
+ <relPosition x="0" y="56"/>
+ <connection refLocalId="20" formalParameter="Q1">
+ <position x="1296" y="552"/>
+ <position x="1232" y="552"/>
+ <position x="1232" y="600"/>
+ <position x="1168" y="600"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <block localId="22" typeName="AND" executionOrderId="0" height="64" width="64">
+ <position x="1040" y="240"/>
+ <inputVariables>
+ <variable formalParameter="IN1">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="4" formalParameter="ENO">
+ <position x="1040" y="272"/>
+ <position x="760" y="272"/>
+ <position x="760" y="312"/>
+ <position x="456" y="312"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN2">
+ <connectionPointIn>
+ <relPosition x="0" y="56"/>
+ <connection refLocalId="24" formalParameter="OUT">
+ <position x="1040" y="296"/>
+ <position x="1014" y="296"/>
+ <position x="1014" y="424"/>
+ <position x="1000" y="424"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <block localId="23" typeName="SR" instanceName="SR1" executionOrderId="0" height="64" width="48">
+ <position x="1144" y="240"/>
+ <inputVariables>
+ <variable formalParameter="S1">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="22" formalParameter="OUT">
+ <position x="1144" y="272"/>
+ <position x="1104" y="272"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="R">
+ <connectionPointIn>
+ <relPosition x="0" y="56"/>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="Q1">
+ <connectionPointOut>
+ <relPosition x="48" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <block localId="24" typeName="EQ" executionOrderId="0" height="64" width="64">
+ <position x="936" y="392"/>
+ <inputVariables>
+ <variable formalParameter="IN1">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="4" formalParameter="RESULT">
+ <position x="936" y="424"/>
+ <position x="480" y="424"/>
+ <position x="480" y="336"/>
+ <position x="456" y="336"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN2">
+ <connectionPointIn>
+ <relPosition x="0" y="56"/>
+ <connection refLocalId="25">
+ <position x="936" y="448"/>
+ <position x="888" y="448"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <inVariable localId="25" executionOrderId="0" height="32" width="48" negated="false">
+ <position x="840" y="432"/>
+ <connectionPointOut>
+ <relPosition x="48" y="16"/>
+ </connectionPointOut>
+ <expression>'OK'</expression>
+ </inVariable>
+ <inVariable localId="26" executionOrderId="0" height="32" width="56" negated="false">
+ <position x="1464" y="576"/>
+ <connectionPointOut>
+ <relPosition x="56" y="16"/>
+ </connectionPointOut>
+ <expression>DEBUG</expression>
+ </inVariable>
+ <block localId="27" typeName="LOGGER" instanceName="LOGGER2" executionOrderId="0" height="112" width="64">
+ <position x="1552" y="496"/>
+ <inputVariables>
+ <variable formalParameter="TRIG">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="21" formalParameter="OUT">
+ <position x="1552" y="528"/>
+ <position x="1360" y="528"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="MSG">
+ <connectionPointIn>
+ <relPosition x="0" y="64"/>
+ <connection refLocalId="28">
+ <position x="1552" y="560"/>
+ <position x="1512" y="560"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="LEVEL">
+ <connectionPointIn>
+ <relPosition x="0" y="96"/>
+ <connection refLocalId="26">
+ <position x="1552" y="592"/>
+ <position x="1520" y="592"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables/>
+ </block>
+ <inVariable localId="28" executionOrderId="0" height="32" width="128" negated="false">
+ <position x="1384" y="544"/>
+ <connectionPointOut>
+ <relPosition x="128" y="16"/>
+ </connectionPointOut>
+ <expression>'ALL TESTS OK'</expression>
+ </inVariable>
+ <comment localId="29" height="144" width="504">
+ <position x="80" y="32"/>
+ <content>
+ <xhtml:p><![CDATA[This tests some IEC-61131 languages and standard library.
+
+BEREMIZ_TEST_CYCLES CFLAG is used here.
+- pre-defined PLC cycles all run with no pause
+- time is emulated]]></xhtml:p>
+ </content>
+ </comment>
+ </FBD>
+ </body>
+ </pou>
+ <pou name="TEMPO_TEST" pouType="functionBlock">
+ <interface>
+ <inputVars>
+ <variable name="RUN">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ </inputVars>
+ <outputVars>
+ <variable name="VALID">
+ <type>
+ <BOOL/>
+ </type>
+ </variable>
+ <variable name="RESULT">
+ <type>
+ <string/>
+ </type>
+ </variable>
+ </outputVars>
+ <localVars>
+ <variable name="TON0">
+ <type>
+ <derived name="TON"/>
+ </type>
+ </variable>
+ <variable name="R_TRIG0">
+ <type>
+ <derived name="R_TRIG"/>
+ </type>
+ </variable>
+ <variable name="R_TRIG1">
+ <type>
+ <derived name="R_TRIG"/>
+ </type>
+ </variable>
+ <variable name="RTC1">
+ <type>
+ <derived name="RTC"/>
+ </type>
+ </variable>
+ <variable name="START_TIME">
+ <type>
+ <DT/>
+ </type>
+ </variable>
+ <variable name="MEASURED_DURATION">
+ <type>
+ <TIME/>
+ </type>
+ </variable>
+ </localVars>
+ </interface>
+ <body>
+ <FBD>
+ <block localId="2" typeName="TON" instanceName="TON0" executionOrderId="0" height="64" width="48">
+ <position x="296" y="440"/>
+ <inputVariables>
+ <variable formalParameter="IN">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="9">
+ <position x="296" y="472"/>
+ <position x="256" y="472"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="PT">
+ <connectionPointIn>
+ <relPosition x="0" y="56"/>
+ <connection refLocalId="17">
+ <position x="296" y="496"/>
+ <position x="208" y="496"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="Q">
+ <connectionPointOut>
+ <relPosition x="48" y="32"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="ET">
+ <connectionPointOut>
+ <relPosition x="48" y="56"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <block localId="3" typeName="R_TRIG" instanceName="R_TRIG0" executionOrderId="0" height="48" width="64">
+ <position x="152" y="288"/>
+ <inputVariables>
+ <variable formalParameter="CLK">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="8">
+ <position x="152" y="320"/>
+ <position x="120" y="320"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="Q">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <block localId="4" typeName="R_TRIG" instanceName="R_TRIG1" executionOrderId="0" height="48" width="64">
+ <position x="384" y="440"/>
+ <inputVariables>
+ <variable formalParameter="CLK">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="2" formalParameter="Q">
+ <position x="384" y="472"/>
+ <position x="344" y="472"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="Q">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <block localId="5" typeName="RTC" instanceName="RTC1" executionOrderId="0" height="64" width="64">
+ <position x="80" y="184"/>
+ <inputVariables>
+ <variable formalParameter="IN">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="PDT">
+ <connectionPointIn>
+ <relPosition x="0" y="56"/>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="Q">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="CDT">
+ <connectionPointOut>
+ <relPosition x="64" y="56"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <connector name="now" localId="7" height="32" width="72">
+ <position x="176" y="224"/>
+ <connectionPointIn>
+ <relPosition x="0" y="16"/>
+ <connection refLocalId="5" formalParameter="CDT">
+ <position x="176" y="240"/>
+ <position x="144" y="240"/>
+ </connection>
+ </connectionPointIn>
+ </connector>
+ <continuation name="now" localId="1" height="32" width="72">
+ <position x="496" y="488"/>
+ <connectionPointOut>
+ <relPosition x="72" y="16"/>
+ </connectionPointOut>
+ </continuation>
+ <inVariable localId="8" executionOrderId="0" height="32" width="40" negated="false">
+ <position x="80" y="304"/>
+ <connectionPointOut>
+ <relPosition x="40" y="16"/>
+ </connectionPointOut>
+ <expression>RUN</expression>
+ </inVariable>
+ <inVariable localId="9" executionOrderId="0" height="32" width="40" negated="false">
+ <position x="216" y="456"/>
+ <connectionPointOut>
+ <relPosition x="40" y="16"/>
+ </connectionPointOut>
+ <expression>RUN</expression>
+ </inVariable>
+ <inVariable localId="10" executionOrderId="0" height="32" width="80" negated="false">
+ <position x="344" y="184"/>
+ <connectionPointOut>
+ <relPosition x="80" y="16"/>
+ </connectionPointOut>
+ <expression>TIME#10s</expression>
+ </inVariable>
+ <continuation name="now" localId="11" height="32" width="72">
+ <position x="232" y="328"/>
+ <connectionPointOut>
+ <relPosition x="72" y="16"/>
+ </connectionPointOut>
+ </continuation>
+ <block localId="12" typeName="MOVE" executionOrderId="0" height="64" width="56">
+ <position x="360" y="288"/>
+ <inputVariables>
+ <variable formalParameter="EN">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="3" formalParameter="Q">
+ <position x="360" y="320"/>
+ <position x="216" y="320"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN">
+ <connectionPointIn>
+ <relPosition x="0" y="56"/>
+ <connection refLocalId="11">
+ <position x="360" y="344"/>
+ <position x="304" y="344"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="ENO">
+ <connectionPointOut>
+ <relPosition x="56" y="32"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="56" y="56"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <outVariable localId="14" executionOrderId="0" height="32" width="96" negated="false">
+ <position x="464" y="328"/>
+ <connectionPointIn>
+ <relPosition x="0" y="16"/>
+ <connection refLocalId="12" formalParameter="OUT">
+ <position x="464" y="344"/>
+ <position x="416" y="344"/>
+ </connection>
+ </connectionPointIn>
+ <expression>START_TIME</expression>
+ </outVariable>
+ <block localId="15" typeName="SUB" executionOrderId="0" height="112" width="64">
+ <position x="616" y="440"/>
+ <inputVariables>
+ <variable formalParameter="EN">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="4" formalParameter="Q">
+ <position x="616" y="472"/>
+ <position x="448" y="472"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN1">
+ <connectionPointIn>
+ <relPosition x="0" y="64"/>
+ <connection refLocalId="1">
+ <position x="616" y="504"/>
+ <position x="568" y="504"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN2">
+ <connectionPointIn>
+ <relPosition x="0" y="96"/>
+ <connection refLocalId="6">
+ <position x="616" y="536"/>
+ <position x="568" y="536"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="ENO">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="64" y="64"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <inVariable localId="6" executionOrderId="0" height="32" width="96" negated="false">
+ <position x="472" y="520"/>
+ <connectionPointOut>
+ <relPosition x="96" y="16"/>
+ </connectionPointOut>
+ <expression>START_TIME</expression>
+ </inVariable>
+ <comment localId="21" height="120" width="552">
+ <position x="96" y="32"/>
+ <content>
+ <xhtml:p><![CDATA[Test that TON and TOFF work as expected]]></xhtml:p>
+ </content>
+ </comment>
+ <outVariable localId="22" executionOrderId="0" height="32" width="56" negated="false">
+ <position x="1384" y="456"/>
+ <connectionPointIn>
+ <relPosition x="0" y="16"/>
+ <connection refLocalId="26" formalParameter="ENO">
+ <position x="1384" y="472"/>
+ <position x="1328" y="472"/>
+ </connection>
+ </connectionPointIn>
+ <expression>VALID</expression>
+ </outVariable>
+ <block localId="13" typeName="SUB" executionOrderId="0" height="112" width="64">
+ <position x="856" y="440"/>
+ <inputVariables>
+ <variable formalParameter="EN">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="15" formalParameter="ENO">
+ <position x="856" y="472"/>
+ <position x="680" y="472"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN1">
+ <connectionPointIn>
+ <relPosition x="0" y="64"/>
+ <connection refLocalId="15" formalParameter="OUT">
+ <position x="856" y="504"/>
+ <position x="680" y="504"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN2">
+ <connectionPointIn>
+ <relPosition x="0" y="96"/>
+ <connection refLocalId="18">
+ <position x="856" y="536"/>
+ <position x="816" y="536"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="ENO">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="64" y="64"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <connector name="duration" localId="23" height="32" width="104">
+ <position x="496" y="184"/>
+ <connectionPointIn>
+ <relPosition x="0" y="16"/>
+ <connection refLocalId="10">
+ <position x="496" y="200"/>
+ <position x="424" y="200"/>
+ </connection>
+ </connectionPointIn>
+ </connector>
+ <continuation name="duration" localId="17" height="32" width="104">
+ <position x="104" y="480"/>
+ <connectionPointOut>
+ <relPosition x="104" y="16"/>
+ </connectionPointOut>
+ </continuation>
+ <continuation name="duration" localId="18" height="32" width="104">
+ <position x="712" y="520"/>
+ <connectionPointOut>
+ <relPosition x="104" y="16"/>
+ </connectionPointOut>
+ </continuation>
+ <block localId="24" typeName="LT" executionOrderId="0" height="104" width="64">
+ <position x="1048" y="440"/>
+ <inputVariables>
+ <variable formalParameter="EN">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="13" formalParameter="ENO">
+ <position x="1048" y="472"/>
+ <position x="920" y="472"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN1">
+ <connectionPointIn>
+ <relPosition x="0" y="64"/>
+ <connection refLocalId="13" formalParameter="OUT">
+ <position x="1048" y="504"/>
+ <position x="920" y="504"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN2">
+ <connectionPointIn>
+ <relPosition x="0" y="88"/>
+ <connection refLocalId="19">
+ <position x="1048" y="528"/>
+ <position x="1016" y="528"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="ENO">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="64" y="64"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <inVariable localId="19" executionOrderId="0" height="32" width="80" negated="false">
+ <position x="936" y="512"/>
+ <connectionPointOut>
+ <relPosition x="80" y="16"/>
+ </connectionPointOut>
+ <expression>TIME#1s</expression>
+ </inVariable>
+ <block localId="26" typeName="SEL" executionOrderId="0" height="144" width="64">
+ <position x="1264" y="440"/>
+ <inputVariables>
+ <variable formalParameter="EN">
+ <connectionPointIn>
+ <relPosition x="0" y="32"/>
+ <connection refLocalId="24" formalParameter="ENO">
+ <position x="1264" y="472"/>
+ <position x="1112" y="472"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="G">
+ <connectionPointIn>
+ <relPosition x="0" y="64"/>
+ <connection refLocalId="24" formalParameter="OUT">
+ <position x="1264" y="504"/>
+ <position x="1112" y="504"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN0">
+ <connectionPointIn>
+ <relPosition x="0" y="96"/>
+ <connection refLocalId="28">
+ <position x="1264" y="536"/>
+ <position x="1208" y="536"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ <variable formalParameter="IN1">
+ <connectionPointIn>
+ <relPosition x="0" y="128"/>
+ <connection refLocalId="27">
+ <position x="1264" y="568"/>
+ <position x="1208" y="568"/>
+ </connection>
+ </connectionPointIn>
+ </variable>
+ </inputVariables>
+ <inOutVariables/>
+ <outputVariables>
+ <variable formalParameter="ENO">
+ <connectionPointOut>
+ <relPosition x="64" y="32"/>
+ </connectionPointOut>
+ </variable>
+ <variable formalParameter="OUT">
+ <connectionPointOut>
+ <relPosition x="64" y="64"/>
+ </connectionPointOut>
+ </variable>
+ </outputVariables>
+ </block>
+ <inVariable localId="27" executionOrderId="0" height="32" width="56" negated="false">
+ <position x="1152" y="552"/>
+ <connectionPointOut>
+ <relPosition x="56" y="16"/>
+ </connectionPointOut>
+ <expression>'OK'</expression>
+ </inVariable>
+ <inVariable localId="28" executionOrderId="0" height="32" width="56" negated="false">
+ <position x="1152" y="520"/>
+ <connectionPointOut>
+ <relPosition x="56" y="16"/>
+ </connectionPointOut>
+ <expression>'BAD'</expression>
+ </inVariable>
+ <outVariable localId="29" executionOrderId="0" height="32" width="64" negated="false">
+ <position x="1384" y="488"/>
+ <connectionPointIn>
+ <relPosition x="0" y="16"/>
+ <connection refLocalId="26" formalParameter="OUT">
+ <position x="1384" y="504"/>
+ <position x="1328" y="504"/>
+ </connection>
+ </connectionPointIn>
+ <expression>RESULT</expression>
+ </outVariable>
+ </FBD>
+ </body>
+ </pou>
+ </pous>
+ </types>
+ <instances>
+ <configurations>
+ <configuration name="config">
+ <resource name="resource1">
+ <task name="task0" priority="0" interval="T#20ms">
+ <pouInstance name="instance0" typeName="main_test"/>
+ </task>
+ </resource>
+ </configuration>
+ </configurations>
+ </instances>
+</project>