diff --git a/conformance-tests/.gitignore b/conformance-tests/.gitignore new file mode 100644 index 0000000..ca7ef8c --- /dev/null +++ b/conformance-tests/.gitignore @@ -0,0 +1,7 @@ +testResults/ +build +.gradle/ +.idea/ +allure-results/ +.venv/ +testtool-out/ diff --git a/conformance-tests/LICENSE b/conformance-tests/LICENSE new file mode 100644 index 0000000..9ad0a7b --- /dev/null +++ b/conformance-tests/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2023 Fraunhofer ISE + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/conformance-tests/NOTICE b/conformance-tests/NOTICE new file mode 100644 index 0000000..d4ae3d8 --- /dev/null +++ b/conformance-tests/NOTICE @@ -0,0 +1,18 @@ +Der-scheduling conformance tests +Copyright 2023 Fraunhofer ISE + +This project bundles several dependencies. The project includes: + +- asn1bean without modification. It is distributed under Apache-2.0 license. + The license can be found under licenses/asn1bean. +- iec61850bean without modification. It is distributed under Apache-2.0 license. + The license can be found under licenses/iec61850bean. +- commons-io without modification. It is distributed under Apache-2.0 license. + The license can be found under licenses/commons-io. +- slf4j-api without modification. It is distributed under the MIT license. The license can be found under licenses/SLF4J. +- logback-core without modification. It is distributed under a dual EPL v1.0/LGPL 2.1 license. + It is included into this project under EPL v1.0 The license can be found under licenses/LOGBACK. +- logback-classic without modification. It is distributed under a dual EPL v1.0/LGPL 2.1 license. + It is included into this project under EPL v1.0 The license can be found under licenses/LOGBACK. + +For the exact (maven) references, see build.gradle file under 'dependencies'. diff --git a/conformance-tests/README.md b/conformance-tests/README.md new file mode 100644 index 0000000..883e576 --- /dev/null +++ b/conformance-tests/README.md @@ -0,0 +1,49 @@ +# Alliander rfg+ conformance tests + +This project is aiming for testing the scheduling functions of an existing implementation against +the [requirements](../REQUIREMENTS.md). + +To link the [tests](main/src/test/java/org/openmuc/fnn/steuerbox/) +to their requirements, the requirements are being copied +into [a java class](src/main/java/org/openmuc/fnn/steuerbox/models/Requirement.java) +such that they can be referenced in the javadoc of the tests. A java IDE ( +e.g. [intelliJ](https://www.jetbrains.com/idea/)) will render this in a way that references can be followed +bidirectionally. + +## License + +This test framework is licensed under Apache 2.0 license. It uses dependencies licensed under + +- Eclipse Public license 1.0 +- MIT license +- Apache 2.0 license + +see [NOTICE](NOTICE) for details. + +## Running the tests + +The tests will later on run with JUnit, a common testing framework for java. They can be started by +calling `./gradlew test` for linux systems or `gradlew.bat test` in Windows. + +# Test setup + +Tested runtime environment is openjdk 11. The test assumes the test device is running on localhost (127.0.0.1) and +accessible on port 102. [This is currently hard coded.](test/tests/src/main/java/org/openmuc/fnn/steuerbox/models/AllianderDER.java#L17) + +## Test results + +[Allure](https://github.com/allure-framework) will be used to create readable test reports with more information. + +Also, the testResults folder contains the logs of all tests, these might be useful for debugging. + +## Getting started + +For a first impression, it probably makes sense to have a look in the very +incomplete [requirements](src/main/java/org/openmuc/fnn/steuerbox/models/Requirement.java) +and the +general [IEC 61850 scheduling execution tests](tests/src/test/java/org/openmuc/fnn/steuerbox/ScheduleExecutionTest.java) +, tests on existing IEC 61850 +nodes [of schedule controller](src/test/java/org/openmuc/fnn/steuerbox/ScheduleControllerNodeTests.java) +and [schedule](src/test/java/org/openmuc/fnn/steuerbox/ScheduleNodeTests.java) and more +[Alliander spcific tests](main/src/test/java/org/openmuc/fnn/steuerbox/AllianderTests.java) +. diff --git a/conformance-tests/ReLevENT_IEC_61850_Conformance_Test_v0.9.pdf b/conformance-tests/ReLevENT_IEC_61850_Conformance_Test_v0.9.pdf new file mode 100644 index 0000000..6bb7b13 Binary files /dev/null and b/conformance-tests/ReLevENT_IEC_61850_Conformance_Test_v0.9.pdf differ diff --git a/conformance-tests/allowed-licenses.json b/conformance-tests/allowed-licenses.json new file mode 100644 index 0000000..9f9b8d8 --- /dev/null +++ b/conformance-tests/allowed-licenses.json @@ -0,0 +1,38 @@ +{ + "allowedLicenses": [ + { + "moduleLicense": "The Apache License, Version 2.0" + }, + { + "moduleLicense": "Apache License, Version 2.0" + }, + { + "moduleLicense": "Apache 2.0" + }, + { + "moduleLicense": "The Apache Software License, Version 2.0" + }, + { + "comment": "MIT can be included into Apache 2.0 according https://www.apache.org/legal/resolved.html#category-a (31.1.23)", + "moduleLicense": "MIT License", + "moduleVersion": "2.0.13", + "moduleName": "org.slf4j:slf4j-api" + }, + { + "comment": "uses dual license, we use Eclipse Public License - v 1.0 which can be included into Apache 2.0 according to https://www.apache.org/legal/resolved.html#category-b (31.1.23)", + "moduleVersion": "1.5.6", + "moduleName": "ch.qos.logback:logback-core" + }, + { + "comment": "uses dual license, we use Eclipse Public License - v 1.0 which can be included into Apache 2.0 according to https://www.apache.org/legal/resolved.html#category-b (31.1.23)", + "moduleVersion": "1.5.6", + "moduleName": "ch.qos.logback:logback-classic" + }, + { + "comment": "MIT can be included into Apache 2.0 according https://www.apache.org/legal/resolved.html#category-a (03.06.2024)", + "moduleLicense": "MIT-0", + "moduleVersion": "1.0.4", + "moduleName": "org.reactivestreams:reactive-streams" + } + ] +} diff --git a/conformance-tests/build.gradle b/conformance-tests/build.gradle new file mode 100755 index 0000000..d0b8206 --- /dev/null +++ b/conformance-tests/build.gradle @@ -0,0 +1,55 @@ +//############################################################################# +//Global configuration +//############################################################################# + + +plugins { + id 'java-library' + id 'com.github.jk1.dependency-license-report' version '2.8' +} +repositories { + mavenCentral() +} +dependencies { + implementation 'ch.qos.logback:logback-classic:1.5.6' + implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.13' + + implementation("com.fasterxml.jackson.core:jackson-databind:2.17.1") + + implementation group: 'com.beanit', name: 'iec61850bean', version: '1.9.0' + implementation group: 'commons-io', name: 'commons-io', version: '2.16.1' + + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.2' + testImplementation 'org.junit.jupiter:junit-jupiter-params:5.10.2' + + implementation("com.hivemq:hivemq-mqtt-client:1.3.3") +} + +jar { + manifest { + attributes( + 'Main-Class': 'org.openmuc.fnn.steuerbox.ScheduleWriterExample' + ) + } + from { + configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } + } +} + +test { + useJUnitPlatform() +} + + +import com.github.jk1.license.render.XmlReportRenderer + +licenseReport { + outputDir = "$projectDir/build/licenses" + configurations = ['runtimeClasspath'] + excludeOwnGroup = true + excludeBoms = false + renderers = [new XmlReportRenderer('third-party-libs.xml', 'Back-End Libraries')] + allowedLicensesFile = new File("$projectDir/allowed-licenses.json") +} + diff --git a/conformance-tests/checkLicense.sh b/conformance-tests/checkLicense.sh new file mode 100755 index 0000000..2ab1411 --- /dev/null +++ b/conformance-tests/checkLicense.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# Skript to check proper licensing setup + +./gradlew clean checkLicense + +# check that java files have Apache2.0 license header +APACHE_2_LICENSE="Licensed under the Apache License, Version 2.0" +echo "the following files do not have a proper header:" +find ./ -iname "*.java" -print | xargs grep -L "$APACHE_2_LICENSE" +echo "" diff --git a/conformance-tests/gradle/wrapper/gradle-wrapper.jar b/conformance-tests/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..e708b1c Binary files /dev/null and b/conformance-tests/gradle/wrapper/gradle-wrapper.jar differ diff --git a/conformance-tests/gradle/wrapper/gradle-wrapper.properties b/conformance-tests/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..3994438 --- /dev/null +++ b/conformance-tests/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/conformance-tests/gradlew b/conformance-tests/gradlew new file mode 100755 index 0000000..4f906e0 --- /dev/null +++ b/conformance-tests/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/conformance-tests/gradlew.bat b/conformance-tests/gradlew.bat new file mode 100644 index 0000000..ac1b06f --- /dev/null +++ b/conformance-tests/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/conformance-tests/licenses/LOGBACK b/conformance-tests/licenses/LOGBACK new file mode 100644 index 0000000..d349fc0 --- /dev/null +++ b/conformance-tests/licenses/LOGBACK @@ -0,0 +1,11 @@ +Logback: the reliable, generic, fast and flexible logging framework. +Copyright (C) 1999-2022, QOS.ch. All rights reserved. + +This program and the accompanying materials are dual-licensed under +either the terms of the Eclipse Public License v1.0 as published by +the Eclipse Foundation + + or (per the licensee's choosing) + +under the terms of the GNU Lesser General Public License version 2.1 +as published by the Free Software Foundation. \ No newline at end of file diff --git a/conformance-tests/licenses/SLF4J b/conformance-tests/licenses/SLF4J new file mode 100644 index 0000000..d2b54b1 --- /dev/null +++ b/conformance-tests/licenses/SLF4J @@ -0,0 +1,21 @@ +Copyright (c) 2004-2017 QOS.ch + All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/conformance-tests/licenses/asn1bean b/conformance-tests/licenses/asn1bean new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/conformance-tests/licenses/asn1bean @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/conformance-tests/licenses/commons-io b/conformance-tests/licenses/commons-io new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/conformance-tests/licenses/commons-io @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/conformance-tests/licenses/iec61850bean b/conformance-tests/licenses/iec61850bean new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/conformance-tests/licenses/iec61850bean @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/conformance-tests/run-all-tests.sh b/conformance-tests/run-all-tests.sh new file mode 100755 index 0000000..aa85a95 --- /dev/null +++ b/conformance-tests/run-all-tests.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +./gradlew checkLicense + +echo TODO: start the below as screen sessions, stop after tests! +echo "cd ../deployments/n61850-smqtt-ubuntu2004/ && docker-compose up" +echo "cd ../hedera-61850-gateway/ && docker-compose up" +echo mosquitto_sub -t fledge/south-schedule -i schedule-subscriber +echo mosquitto_sub -t fledge/south-command -i cmd-subscriber + +./gradlew test +echo "All tests run. Please see the logs in testResults/ directory for details" diff --git a/conformance-tests/src/main/java/de/fhg/ise/testtool/utils/annotations/label/Description.java b/conformance-tests/src/main/java/de/fhg/ise/testtool/utils/annotations/label/Description.java new file mode 100644 index 0000000..2a96b8e --- /dev/null +++ b/conformance-tests/src/main/java/de/fhg/ise/testtool/utils/annotations/label/Description.java @@ -0,0 +1,25 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package de.fhg.ise.testtool.utils.annotations.label; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Custom Label for test methods to a description + */ +@Target({ ElementType.METHOD }) +public @interface Description { + String value() default ""; +} diff --git a/conformance-tests/src/main/java/de/fhg/ise/testtool/utils/annotations/label/Requirements.java b/conformance-tests/src/main/java/de/fhg/ise/testtool/utils/annotations/label/Requirements.java new file mode 100644 index 0000000..6e7d044 --- /dev/null +++ b/conformance-tests/src/main/java/de/fhg/ise/testtool/utils/annotations/label/Requirements.java @@ -0,0 +1,27 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package de.fhg.ise.testtool.utils.annotations.label; + +import org.openmuc.fnn.steuerbox.models.Requirement; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Custom Label for test methods to link to requirements + */ +@Target({ ElementType.METHOD }) +public @interface Requirements { + Requirement[] value() default Requirement.NONE; +} diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/Context.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/Context.java new file mode 100644 index 0000000..056f631 --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/Context.java @@ -0,0 +1,36 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.openmuc.fnn.steuerbox; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import javax.xml.parsers.DocumentBuilderFactory; + +/** + * Holds shared objects + */ +public class Context { + + private static final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + + private static final ObjectMapper objectMapper = new ObjectMapper(); + + public static DocumentBuilderFactory getDocumentBuilderFactory() { + return factory; + } + + public static ObjectMapper getObjectMapper() { + return objectMapper; + } +} diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/IEC61850MissconfiguredException.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/IEC61850MissconfiguredException.java new file mode 100644 index 0000000..4ae7366 --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/IEC61850MissconfiguredException.java @@ -0,0 +1,23 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.openmuc.fnn.steuerbox; + +/** + * Is thrown if a IEC61850 device is configured in a way that is not expected + */ +public class IEC61850MissconfiguredException extends Exception { + public IEC61850MissconfiguredException(String message) { + super(message); + } +} diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/models/AllianderDER.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/models/AllianderDER.java new file mode 100644 index 0000000..520e680 --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/models/AllianderDER.java @@ -0,0 +1,80 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.openmuc.fnn.steuerbox.models; + +import com.beanit.iec61850bean.ServiceError; +import org.openmuc.fnn.steuerbox.scheduling.ScheduleDefinitions; +import org.openmuc.fnn.steuerbox.scheduling.ScheduleType; +import org.openmuc.fnn.steuerbox.testutils.IEC61850Utility; + +import java.io.IOException; + +public class AllianderDER extends IEC61850Utility { + + public AllianderDER(String host, int port) throws ServiceError, IOException { + super(host, port); + } + + public static AllianderDER getWithDefaultSettings() throws ServiceError, IOException { + return new AllianderDER("127.0.0.1", 102); + } + + public final ScheduleDefinitions powerSchedules = ScheduleType.ASG.withScheduleDefinitions(this, + "active power schedules",// + "DER_Scheduler_Control/ActPow_GGIO1",// + "DER_Scheduler_Control/ActPow_FSCC1",// + "DER_Scheduler_Control/ActPow_Res_FSCH01",// + "DER_Scheduler_Control/ActPow_FSCH01", // + "DER_Scheduler_Control/ActPow_FSCH02", // + "DER_Scheduler_Control/ActPow_FSCH03", // + "DER_Scheduler_Control/ActPow_FSCH04", // + "DER_Scheduler_Control/ActPow_FSCH05", // + "DER_Scheduler_Control/ActPow_FSCH06", // + "DER_Scheduler_Control/ActPow_FSCH07", // + "DER_Scheduler_Control/ActPow_FSCH08", // + "DER_Scheduler_Control/ActPow_FSCH09", // + "DER_Scheduler_Control/ActPow_FSCH10"); + + public final ScheduleDefinitions maxPowerSchedules = ScheduleType.ASG.withScheduleDefinitions(this, + "max power schedules",// + "DER_Scheduler_Control/MaxPow_GGIO1",// + "DER_Scheduler_Control/MaxPow_FSCC1",// + "DER_Scheduler_Control/MaxPow_Res_FSCH01",// + "DER_Scheduler_Control/MaxPow_FSCH01", // + "DER_Scheduler_Control/MaxPow_FSCH02", // + "DER_Scheduler_Control/MaxPow_FSCH03", // + "DER_Scheduler_Control/MaxPow_FSCH04", // + "DER_Scheduler_Control/MaxPow_FSCH05", // + "DER_Scheduler_Control/MaxPow_FSCH06", // + "DER_Scheduler_Control/MaxPow_FSCH07", // + "DER_Scheduler_Control/MaxPow_FSCH08", // + "DER_Scheduler_Control/MaxPow_FSCH09", // + "DER_Scheduler_Control/MaxPow_FSCH10"); + + public final ScheduleDefinitions onOffSchedules = ScheduleType.SPG.withScheduleDefinitions(this, + "on/off schedules",// + "DER_Scheduler_Control/OnOff_GGIO1",// + "DER_Scheduler_Control/OnOff_FSCC1",// + "DER_Scheduler_Control/OnOff_Res_FSCH01",// + "DER_Scheduler_Control/OnOff_FSCH01", // + "DER_Scheduler_Control/OnOff_FSCH02", // + "DER_Scheduler_Control/OnOff_FSCH03", // + "DER_Scheduler_Control/OnOff_FSCH04", // + "DER_Scheduler_Control/OnOff_FSCH05", // + "DER_Scheduler_Control/OnOff_FSCH06", // + "DER_Scheduler_Control/OnOff_FSCH07", // + "DER_Scheduler_Control/OnOff_FSCH08", // + "DER_Scheduler_Control/OnOff_FSCH09", // + "DER_Scheduler_Control/OnOff_FSCH10"); +} diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/models/Requirement.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/models/Requirement.java new file mode 100644 index 0000000..7da0a69 --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/models/Requirement.java @@ -0,0 +1,244 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + + +package org.openmuc.fnn.steuerbox.models; + +/** + * These requirements are meant to be linked from the JavaDoc of unit tests covering them. This way, requirements + * *should* be linked easily to their tests and vice versa. + *

+ * All requirements are taken from the main github at https://github.com/alliander-opensource/der-scheduling/blob/main/REQUIREMENTS.md + * . + *

+ * Adding the description as JavaDoc helps to quickly identify what a requirement stands for. + */ +public enum Requirement { + + /** + * Just a placeholder + */ + NONE, + + // CONFIGURATION + + /** + * Basic configuration of DER default shall be stored inside a SCL File + */ + C01, + + /** + * Reserve schedules shall be stored inside a SCL File + */ + C01a, + + /** + * Number of available schedules (maximum 10 schedules per logical Node, less can be configured) shall be stored + * inside a SCL File + */ + C01b, + + /** + * Number of devices to be controlled (limited to 1 for evaluation, extension shall be foreseen) shall be stored + * inside a SCL File + */ + C01c, + + /** + * Parameters of schedules other than the reserve schedule are to be stored in a key-value manner + */ + C02, + + /** + * Parameters of schedules other than the reserve schedule are persisted to a separate file (e.g. as JSON) + */ + C03, + + /** + * Changes in schedules are persisted into the file as soon as the schedule is validated + */ + C04, + + /** + * A interface to CoMPAS is not required. + */ + C05, + + /** + * A simple interface to notify about changes in SCL file is to be defined. + */ + C05a, + + /** + * A simple interface to notify about changes in key-value + */ + C05b, + + // LOGICAL NODES + + /** + * Map Logical Nodes and Common Data Classes to configuration values, allow reading and writing according to + * 61850-90-10 + */ + LN01, + + /** + * The control functions of the DER are modeled and implemented independently + */ + LN02, + + /** + * Absolute active power is controlled in 10 logical nodes ActPow_FSCH01 .. ActPow_FSCH10, with schedule controller + * ActPow_FSCC1 and actuator interface ActPow_GGIO1 + */ + LN02a, + + /** + * Maximum power is controlled in 10 logical nodes MaxPow_FSCH01 .. MaxPow_FSCH10, with schedule controller + * MaxPow_FSCC1 and actuator interface MaxPow_GGIO1 + */ + LN02b, + + /** + * On/Off state of the DER is controlled 10 logical nodes OnOff_FSCH01 .. OnOff_FSCH10, with schedule controller + * OnOff_FSCC1 and actuator interface OnOff_GGIO1 + */ + LN02c, + + /** + * The scheduling nodes and their children are to be modeled according to 61850-90-10 + */ + LN03, + + // SCHEDULING + + /** + * A set of 10 schedules per logical node must be supported + */ + S01, + + /** + * Support time based schedules + */ + S02, + + /** + * Triggers other than time based may be supported + */ + S03, + + /** + * Periodical schedules must be supported + */ + S04, + + /** + * Support of absolute schedules of absolute power setpoints + */ + S05a, + + /** + * Support of absolute schedules of maximum power setpoints + */ + S05b, + + /** + * Support of schedules to turn DER on and off + */ + S05c, + + /** + * Validation of Schedules according to 61850-90-10 + */ + S08, + + /** + * Schedules for maximum generation values and absolute power values are modeled in the same way (using the same + * DTO) + */ + S09, + + /** + * Each schedule must store a sequence of max. 100 values + */ + S10, + + /** + * There are three Reserve Schedules: Active Power Reserve Schedule, Maximum Power Reserve Schedule and On/Off + * Reserve Schedule + */ + S11, + + /** + * Each Reserve Schedule holds 100 values + */ + S12, + + /** + * Reserve Schedules are always active and cannot be deactivated + */ + S13, + + /** + * Reserve Schedules have the lowest priority (10). This cannot be changed. + */ + S14, + + /** + * Reserve Schedules have a fixed start date of 01.01.1970 00:00:01 (UTC). This cannot be changed. + */ + S15, + + /** + * Reserve Schedules are set to cyclic execution. This cannot be changed. + */ + S16, + + /** + * If two schedules are configured with the same pirority and start time, the schedule that comes first in the + * schedule controller's schedule reference is executed. + */ + S17, + + // SCHEDULE EXECUTION + + /** + * Execution of schedules must regard schedule priority according to 61850-10 + */ + E01, + + /** + * Resolution time base: >= 1 second + */ + E02, + + // INTERFACES + + /** + * The Active power Actuator Interface contains the current value (a double) and the source schedule priority (an + * integer) + */ + I01, + + /** + * The Maximum Power Actuator Interface contains the current value (a double) and the source schedule priority (an + * integer) + */ + I02, + + /** + * The On/Off Actuator Interface contains the current value (a double) and the source schedule priority (an + * integer). The mapping is 0 - off / 1 - on. + */ + I03; +} diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/mqtt/Command.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/mqtt/Command.java new file mode 100644 index 0000000..e33febe --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/mqtt/Command.java @@ -0,0 +1,60 @@ +package org.openmuc.fnn.steuerbox.mqtt; + +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; +import java.time.Instant; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import static org.openmuc.fnn.steuerbox.mqtt.ParsingUtil.parseMqttMessages; + +/** + * A command payload representing a control signal intended for the EMS. + *

+ * Only relevant parameters will be parsed, most of the JSON fields are FLEDGE defaults and not relevant for the + * ReLevENT use cases. + */ +public class Command { + public Command(long epochSecond, double controlValue) { + this.epochSecond = epochSecond; + this.controlValue = controlValue; + } + + public final long epochSecond; + public final double controlValue; + + public static Command fromJsonString(String command) + throws ParserConfigurationException, IOException, SAXException { + List> entries = parseMqttMessages(command); + if (entries.size() != 1) { + throw new IllegalArgumentException( + "Expected exactly 1 element to be returned. Are you trying to parse a schedule as a command?"); + } + Map.Entry instantDoubleEntry = entries.get(0); + return new Command(instantDoubleEntry.getKey().getEpochSecond(), instantDoubleEntry.getValue()); + } + + @Override + public String toString() { + return "Command{" + "epochSecond=" + epochSecond + "(equivalent to " + Instant.ofEpochSecond(epochSecond) + + "), controlValue=" + controlValue + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + Command command = (Command) o; + return epochSecond == command.epochSecond && Double.compare(controlValue, command.controlValue) == 0; + } + + @Override + public int hashCode() { + return Objects.hash(epochSecond, controlValue); + } +} diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/mqtt/ParsingUtil.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/mqtt/ParsingUtil.java new file mode 100644 index 0000000..66cb63e --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/mqtt/ParsingUtil.java @@ -0,0 +1,71 @@ +package org.openmuc.fnn.steuerbox.mqtt; + +import com.fasterxml.jackson.databind.JsonNode; +import org.openmuc.fnn.steuerbox.Context; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.time.Duration; +import java.time.Instant; +import java.util.AbstractMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * Utilities to parse JSON messages + */ +public class ParsingUtil { + + private final static Logger log = LoggerFactory.getLogger(ParsingUtil.class); + + private ParsingUtil() { + // prevent calling constructor: utility class with no members + } + + /** + * Deserialize a schedule for communication with HEDERA-61850-interface. + *

+ * Will use a switch to not communicate the request to HEDERA but instead immediately forward it to the IEC 61850 + * FLEDGE scheduling server + */ + public static String scheduleToJson(List values, Duration interval, Instant start) { + ScheduleResolution scheduleResolution = ScheduleResolution.from(interval); + return String.format("{\"skipHedera\":true," // + + "\"direction\":\"IMPORT\","// + + "\"start\":{\"seconds\":%s,\"nanos\":%s},"// + + "\"resolution\":\"%s\"," // + + "\"values\":[%s]}", start.getEpochSecond(), start.getNano(), scheduleResolution.name(), + values.stream().map(Object::toString).collect(Collectors.joining(","))); + } + + /** + * Utility to parse command or schedule parameters from a JSON message (command and schedules are very alike: a + * schedule is like an array of commands) + */ + static List> parseMqttMessages(String commandOrScheduleJson) { + List> entities = new LinkedList<>(); + try { + Iterator parameters = Context.getObjectMapper() + .readTree(commandOrScheduleJson) + .get("parameters") + .elements(); + while (parameters.hasNext()) { + JsonNode parameter = parameters.next(); + JsonNode apcTypNode = parameter.get("value").get("GTIC").get("ApcTyp"); + JsonNode tNode = apcTypNode.get("t"); + long epochSeconds = tNode.get("SecondSinceEpoch").longValue(); + double controlValue = apcTypNode.get("ctlVal").asDouble(); + long nanos = 0; // could be created from FractionOfSecond, but testing does not make sense on that base.. + log.trace("Ignoring FractionOfSecond, testing on that base does not make sense"); + entities.add(new AbstractMap.SimpleEntry<>(Instant.ofEpochSecond(epochSeconds, nanos), controlValue)); + } + return entities; + } catch (Exception e) { + throw new RuntimeException( + "Unable deserialize command from '" + commandOrScheduleJson + "': Required elements not found.", e); + } + } +} diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/mqtt/Schedule.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/mqtt/Schedule.java new file mode 100644 index 0000000..29d0008 --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/mqtt/Schedule.java @@ -0,0 +1,89 @@ +package org.openmuc.fnn.steuerbox.mqtt; + +import java.time.Instant; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import static org.openmuc.fnn.steuerbox.mqtt.ParsingUtil.parseMqttMessages; + +/** + * A command payload representing a result schedule intended for the EMS to facilitate optimization of the energy + * system. + *

+ * Only relevant parameters will be parsed, most of the JSON fields are FLEDGE defaults and not relevant for the + * ReLevENT use cases. + */ +public class Schedule { + private List scheduleEntries = new LinkedList<>(); + + public Schedule(ScheduleEntry... entries) { + for (ScheduleEntry entry : entries) { + this.scheduleEntries.add(entry); + } + } + + public List getScheduleEntries() { + return Collections.unmodifiableList(this.scheduleEntries); + } + + public static Schedule parse(String scheduleString) { + List> entries = parseMqttMessages(scheduleString); + Schedule schedule = new Schedule(); + entries.forEach( + e -> schedule.scheduleEntries.add(new ScheduleEntry(e.getKey().getEpochSecond(), e.getValue()))); + return schedule; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + Schedule schedule = (Schedule) o; + return Objects.equals(scheduleEntries, schedule.scheduleEntries); + } + + @Override + public int hashCode() { + return Objects.hashCode(scheduleEntries); + } + + public static class ScheduleEntry { + public final long startEpochSecond; + public final double controlValue; + + public ScheduleEntry(long startEpochSecond, double controlValue) { + this.startEpochSecond = startEpochSecond; + this.controlValue = controlValue; + } + + @Override + public String toString() { + return "ScheduleEntry{" + "startEpochSecond=" + startEpochSecond + ", controlValue=" + controlValue + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + ScheduleEntry that = (ScheduleEntry) o; + return startEpochSecond == that.startEpochSecond && Double.compare(controlValue, that.controlValue) == 0; + } + + @Override + public int hashCode() { + return Objects.hash(startEpochSecond, controlValue); + } + } + + @Override + public String toString() { + return "Schedule{" + "scheduleEntries=" + scheduleEntries + '}'; + } +} diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/mqtt/ScheduleResolution.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/mqtt/ScheduleResolution.java new file mode 100644 index 0000000..5ee059d --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/mqtt/ScheduleResolution.java @@ -0,0 +1,34 @@ +package org.openmuc.fnn.steuerbox.mqtt; + +import java.time.Duration; +import java.util.Arrays; +import java.util.stream.Collectors; + +/** + * Schedule resolutions as supported by HEDERA API. + *

+ * At the state of implementation, this only covered only 5 minute and 15 minute resolutions. + */ +public enum ScheduleResolution { + FIVE_MINUTES(Duration.ofMinutes(5)), + FIFTEEN_MINUTES(Duration.ofMinutes(15)); + + private final Duration duration; + + ScheduleResolution(Duration duration) { + this.duration = duration; + } + + static ScheduleResolution from(Duration duration) { + return Arrays.stream(ScheduleResolution.values()) + .filter(rs -> rs.duration.equals(duration)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException( + "Unable to map " + duration + " to a schedule resolution. Valid values are: " + Arrays.stream( + values()).map(ScheduleResolution::name).collect(Collectors.toList()))); + } + + public Duration getAsDuration() { + return duration; + } +} diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/PreparedSchedule.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/PreparedSchedule.java new file mode 100644 index 0000000..ec5cd8c --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/PreparedSchedule.java @@ -0,0 +1,48 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.openmuc.fnn.steuerbox.scheduling; + +import com.beanit.iec61850bean.ServiceError; +import org.openmuc.fnn.steuerbox.testutils.ScheduleWriter; + +import java.io.IOException; +import java.time.Duration; +import java.time.Instant; +import java.util.List; + +/** + * A schedule, ready to be written to the IEC 61850 device + */ +public interface PreparedSchedule { + /** + * Writes and enables the schedule on the device + */ + void writeAndEnable(ScheduleWriter utility) throws ServiceError, IOException; + + /** + * Representation of schedule values ready to be written to the 61850 server. Implementations of + * {@link PreparedScheduleValues} are available in {@link ValueAccess}. + */ + interface PreparedScheduleValues { + void writeValues() throws ServiceError, IOException; + + int size(); + + String getScheduleName(); + + PreparedSchedule asSchedule(Duration interval, Instant start, int prio); + + List getValues(); + } +} \ No newline at end of file diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/ScheduleDefinitions.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/ScheduleDefinitions.java new file mode 100644 index 0000000..a5fc5df --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/ScheduleDefinitions.java @@ -0,0 +1,80 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.openmuc.fnn.steuerbox.scheduling; + +import java.time.Duration; +import java.time.Instant; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * Contains 61850 references to essential nodes of a schedule + */ +public interface ScheduleDefinitions { + + /** + * Returns access to schedule values such that these can be modified on the 61850 device + */ + ValueAccess getValueAccess(); + + /** + * Prepare a schedule to be + */ + default PreparedSchedule prepareSchedule(List values, int scheduleNumber, Duration interval, Instant start, + int prio) { + ValueAccess valueAccess = getValueAccess(); + return valueAccess.prepareSchedule(values, scheduleNumber, interval, start, prio); + } + + /** + * Get the schedule name from the number + * + * @throws IllegalArgumentException + * if no schedule with that number is known + */ + String getScheduleName(int scheduleNumber) throws IllegalArgumentException; + + /** + * Get the number of a schedule from its name. + * + * @throws IllegalArgumentException + * if no scheudle with that name is known + */ + int getScheduleNumber(String scheduleName) throws IllegalArgumentException; + + String getControlledGGIO(); + + String getGGIOValueReference(); + + String getController(); + + String getReserveSchedule(); + + Collection getAllScheduleNames(); + + ScheduleType getScheduleType(); + + T getDefaultValue(); + + default List getDefaultValues(int numberOfValues) { + if (numberOfValues < 1) { + throw new IllegalArgumentException( + "numberOfValues (the size of the returned collection) needs to be at least 1"); + } + final T defaultValue = getDefaultValue(); + return Stream.generate(() -> defaultValue).limit(numberOfValues).collect(Collectors.toList()); + } +} diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/ScheduleEnablingErrorKind.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/ScheduleEnablingErrorKind.java new file mode 100644 index 0000000..fcd1ef8 --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/ScheduleEnablingErrorKind.java @@ -0,0 +1,44 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.openmuc.fnn.steuerbox.scheduling; + +/** + * Representation of error codes ("ScheduleEnablingErrorKind") defined in IEC61850-90-10 ed 2017, Table 9 (page 28) + */ +public enum ScheduleEnablingErrorKind { + NONE(1), + MISSING_VALID_NUMENTR(2), + MISSING_VALID_SCHDINTV(3), + MISSING_VALID_SCHEDULE_VALUES(4); + + private final int value; + + ScheduleEnablingErrorKind(int value) { + this.value = value; + } + + public static ScheduleEnablingErrorKind parse(String valueString) { + try { + Integer value = Integer.parseInt(valueString); + for (ScheduleEnablingErrorKind errorKind : ScheduleEnablingErrorKind.values()) { + if (errorKind.value == value) { + return errorKind; + } + } + } catch (Exception e) { + return NONE; + } + return NONE; + } +} diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/ScheduleState.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/ScheduleState.java new file mode 100644 index 0000000..fa60252 --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/ScheduleState.java @@ -0,0 +1,48 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.openmuc.fnn.steuerbox.scheduling; + +/** + * Schedule states defined in IEC61850-90-10 ed 2017, Table 8 (page 28) + */ +public enum ScheduleState { + /** + * Fallback state for error cases + */ + UNKNOWN(0), + NOT_READY(1), + START_TIME_REQUIRED(2), + READY(3), + RUNNING(4); + + private final int value; + + private ScheduleState(int value) { + this.value = value; + } + + public static ScheduleState parse(String valueString) { + try { + Integer value = Integer.parseInt(valueString); + for (ScheduleState state : ScheduleState.values()) { + if (state.value == value) { + return state; + } + } + } catch (Exception e) { + return UNKNOWN; + } + return UNKNOWN; + } +} diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/ScheduleType.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/ScheduleType.java new file mode 100644 index 0000000..c557bcc --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/ScheduleType.java @@ -0,0 +1,131 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.openmuc.fnn.steuerbox.scheduling; + +import org.openmuc.fnn.steuerbox.testutils.IEC61850Utility; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.function.BiFunction; + +/** + * Represents different types of schedules regarding the values they represent, or in other words what type of GGIO (for + * now analogue values, boolean values) they control. + */ +public enum ScheduleType { + /** + * Used to schedule analogue values (that are mapped as floats) such as power schedules + */ + ASG((device, schedule) -> ValueAccess.asgAccess(device, schedule)) { + @Override + public ScheduleDefinitions withScheduleDefinitions(IEC61850Utility device, String displayName, + String ggio, String controller, String reserveSchedule, String... schedules) { + return ASG.createScheduleDefinitionsFrom(device, displayName, ggio, controller, reserveSchedule, 0f, + schedules); + } + }, + /** + * Used to schedule boolean values, such as OnOff schedules + */ + SPG((device, schedule) -> ValueAccess.spgAccess(device, schedule)) { + @Override + public ScheduleDefinitions withScheduleDefinitions(IEC61850Utility device, String displayName, + String ggio, String controller, String reserveSchedule, String... schedules) { + return SPG.createScheduleDefinitionsFrom(device, displayName, ggio, controller, reserveSchedule, false, + schedules); + } + }; + + private BiFunction valueAccessFunction; + + ScheduleType(BiFunction valueAccessFunction) { + this.valueAccessFunction = valueAccessFunction; + } + + public abstract ScheduleDefinitions withScheduleDefinitions(IEC61850Utility device, String displayName, + String ggio, String controller, String reserveSchedule, String... schedules); + + private ScheduleDefinitions createScheduleDefinitionsFrom(IEC61850Utility device, String displayName, + String ggio, String controller, String reserveSchedule, T defaultValue, String... schedules) { + + List scheduleNames = Arrays.asList(schedules); + + return new ScheduleDefinitions() { + @Override + public String getScheduleName(int scheduleNumber) { + if (scheduleNumber <= 0 || scheduleNumber > scheduleNames.size()) { + throw new IllegalArgumentException("Schedule number must be between 1 and " + scheduleNames.size()); + } + return scheduleNames.get(scheduleNumber - 1); + } + + @Override + public int getScheduleNumber(String scheduleName) throws IllegalArgumentException { + for (int i = 0; i < scheduleNames.size(); i++) { + if (scheduleNames.get(i).equals(scheduleName)) { + int scheduleNumber = i + 1; + return scheduleNumber; + } + } + throw new IllegalArgumentException("No schedule with name '" + scheduleName + "' configured"); + } + + @Override + public String getControlledGGIO() { + return ggio; + } + + @Override + public String getGGIOValueReference() { + return getControlledGGIO() + getValueAccess().getGGIOValueSuffix(); + } + + @Override + public Collection getAllScheduleNames() { + return scheduleNames; + } + + @Override + public ValueAccess getValueAccess() { + return valueAccessFunction.apply(device, this); + } + + @Override + public org.openmuc.fnn.steuerbox.scheduling.ScheduleType getScheduleType() { + return org.openmuc.fnn.steuerbox.scheduling.ScheduleType.this; + } + + @Override + public T getDefaultValue() { + return defaultValue; + } + + @Override + public String getController() { + return controller; + } + + @Override + public String getReserveSchedule() { + return reserveSchedule; + } + + @Override + public String toString() { + return displayName; + } + }; + } +} diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/ValueAccess.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/ValueAccess.java new file mode 100644 index 0000000..23585f6 --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/scheduling/ValueAccess.java @@ -0,0 +1,202 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.openmuc.fnn.steuerbox.scheduling; + +import com.beanit.iec61850bean.BdaBoolean; +import com.beanit.iec61850bean.BdaFloat32; +import com.beanit.iec61850bean.FcModelNode; +import com.beanit.iec61850bean.ServiceError; +import org.openmuc.fnn.steuerbox.testutils.IEC61850Utility; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.time.Duration; +import java.time.Instant; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +/** + * Provides access to the Values that are stored inside a ScheduleDefinition. This access is using generics to support + * differrent {@link ScheduleType}s. + */ +public interface ValueAccess { + + String getValueAccessString(int valueIndex, String scheduleName); + + String getGGIOValueSuffix(); + + PreparedSchedule.PreparedScheduleValues prepareWriting(List values, String scheduleName); + + default PreparedSchedule.PreparedScheduleValues prepareWriting(T singleValue, String scheduleName) { + return prepareWriting(Arrays.asList(singleValue), scheduleName); + } + + PreparedSchedule prepareSchedule(List values, int scheduleNumber, Duration interval, Instant start, int prio); + + /** + * Write a default value to this schedule. Useful if several types of schedules are to be processed. + */ + PreparedSchedule.PreparedScheduleValues activateScheduleWithDefaultValue(String scheduleName); + + T readToTargetValue(FcModelNode node) throws ServiceError, IOException; + + private static PreparedSchedule valueWriterToScheduleWriter(PreparedSchedule.PreparedScheduleValues vw, + Duration interval, Instant start, int prio) { + return utility -> utility.writeAndEnableSchedule(vw, interval, start, prio); + } + + static ValueAccess asgAccess(IEC61850Utility utility, ScheduleDefinitions schedule) { + + Logger log = LoggerFactory.getLogger(ValueAccess.class.getName() + ".asgAccess"); + + return new ValueAccess() { + + @Override + public String getValueAccessString(int valueIndex, String scheduleName) { + return String.format("%s.ValASG%03d.setMag.f", scheduleName, valueIndex); + } + + @Override + public String getGGIOValueSuffix() { + return ".AnOut1.mxVal.f"; + } + + @Override + public PreparedSchedule prepareSchedule(List values, int scheduleNumber, Duration interval, + Instant start, int prio) { + return prepareWriting(values, schedule.getScheduleName(scheduleNumber)).asSchedule(interval, start, + prio); + } + + @Override + public PreparedSchedule.PreparedScheduleValues prepareWriting(List values, String scheduleName) { + return new PreparedSchedule.PreparedScheduleValues() { + @Override + public void writeValues() throws ServiceError, IOException { + int index = 1; + for (Number value : values) { + String valueBasicDataAttribute = getValueAccessString(index++, scheduleName); + log.debug("Writing {} to {}", value, valueBasicDataAttribute); + utility.setDataValues(valueBasicDataAttribute, null, value.toString()); + } + } + + @Override + public int size() { + return values.size(); + } + + @Override + public String getScheduleName() { + return scheduleName; + } + + @Override + public PreparedSchedule asSchedule(Duration interval, Instant start, int prio) { + return valueWriterToScheduleWriter(this, interval, start, prio); + } + + @Override + public List getValues() { + return Collections.unmodifiableList(values); + } + }; + } + + @Override + public PreparedSchedule.PreparedScheduleValues activateScheduleWithDefaultValue(String scheduleName) { + return prepareWriting(Arrays.asList(0), scheduleName); + } + + @Override + public Number readToTargetValue(FcModelNode node) throws ServiceError, IOException { + return ((BdaFloat32) node).getFloat(); + } + + }; + } + + static ValueAccess spgAccess(IEC61850Utility utility, ScheduleDefinitions schedules) { + + Logger log = LoggerFactory.getLogger(ValueAccess.class.getName() + ".spgAccess"); + + return new ValueAccess() { + @Override + public String getValueAccessString(int valueIndex, String scheduleName) { + return String.format("%s.ValSPG%03d.setVal", scheduleName, valueIndex); + } + + @Override + public String getGGIOValueSuffix() { + return ".SPCSO1.stVal"; + } + + @Override + public PreparedSchedule prepareSchedule(List values, int scheduleNumber, Duration interval, + Instant start, int prio) { + return prepareWriting(values, schedules.getScheduleName(scheduleNumber)).asSchedule(interval, start, + prio); + } + + @Override + public PreparedSchedule.PreparedScheduleValues prepareWriting(List values, + String scheduleName) { + return new PreparedSchedule.PreparedScheduleValues() { + @Override + public void writeValues() throws ServiceError, IOException { + int index = 1; + for (Boolean value : values) { + String valueBasicDataAttribute = getValueAccessString(index++, scheduleName); + log.debug("Writing {} to {}", value, valueBasicDataAttribute); + utility.setDataValues(valueBasicDataAttribute, null, value.toString()); + } + } + + @Override + public int size() { + return values.size(); + } + + @Override + public String getScheduleName() { + return scheduleName; + } + + @Override + public PreparedSchedule asSchedule(Duration interval, Instant start, int prio) { + return valueWriterToScheduleWriter(this, interval, start, prio); + } + + @Override + public List getValues() { + return Collections.unmodifiableList(values); + } + }; + } + + @Override + public PreparedSchedule.PreparedScheduleValues activateScheduleWithDefaultValue(String scheduleName) { + return prepareWriting(Arrays.asList(false), scheduleName); + } + + @Override + public Boolean readToTargetValue(FcModelNode node) throws ServiceError, IOException { + return ((BdaBoolean) node).getValue(); + } + }; + } + +} diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/testutils/IEC61850Utility.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/testutils/IEC61850Utility.java new file mode 100644 index 0000000..9ac2c9f --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/testutils/IEC61850Utility.java @@ -0,0 +1,439 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.openmuc.fnn.steuerbox.testutils; + +import com.beanit.iec61850bean.BasicDataAttribute; +import com.beanit.iec61850bean.BdaBoolean; +import com.beanit.iec61850bean.BdaFloat32; +import com.beanit.iec61850bean.BdaFloat64; +import com.beanit.iec61850bean.BdaInt16; +import com.beanit.iec61850bean.BdaInt16U; +import com.beanit.iec61850bean.BdaInt32; +import com.beanit.iec61850bean.BdaInt32U; +import com.beanit.iec61850bean.BdaInt64; +import com.beanit.iec61850bean.BdaInt8; +import com.beanit.iec61850bean.BdaInt8U; +import com.beanit.iec61850bean.BdaTimestamp; +import com.beanit.iec61850bean.BdaVisibleString; +import com.beanit.iec61850bean.ClientAssociation; +import com.beanit.iec61850bean.ClientSap; +import com.beanit.iec61850bean.Fc; +import com.beanit.iec61850bean.FcModelNode; +import com.beanit.iec61850bean.ModelNode; +import com.beanit.iec61850bean.ServerModel; +import com.beanit.iec61850bean.ServiceError; +import org.apache.commons.io.IOUtils; +import org.openmuc.fnn.steuerbox.Context; +import org.openmuc.fnn.steuerbox.IEC61850MissconfiguredException; +import org.openmuc.fnn.steuerbox.scheduling.PreparedSchedule.PreparedScheduleValues; +import org.openmuc.fnn.steuerbox.scheduling.ScheduleDefinitions; +import org.openmuc.fnn.steuerbox.scheduling.ScheduleEnablingErrorKind; +import org.openmuc.fnn.steuerbox.scheduling.ScheduleState; +import org.openmuc.fnn.steuerbox.scheduling.ValueAccess; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.ParserConfigurationException; +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStream; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.nio.charset.Charset; +import java.time.Duration; +import java.time.Instant; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLong; + +public class IEC61850Utility implements Closeable, ScheduleWriter { + + private final static Logger log = LoggerFactory.getLogger(IEC61850Utility.class); + + private final ClientAssociation association; + private final ServerModel serverModel; + + public ScheduleEnablingErrorKind getSchdEnaErr(String scheduleName) throws ServiceError, IOException { + BasicDataAttribute errorKind = (BasicDataAttribute) serverModel.findModelNode( + scheduleName + ".SchdEnaErr.stVal", null); + association.getDataValues((FcModelNode) errorKind); + return ScheduleEnablingErrorKind.parse(errorKind.getValueString()); + } + + public ScheduleState getScheduleState(String scheduleName) throws ServiceError, IOException { + BasicDataAttribute state = (BasicDataAttribute) serverModel.findModelNode(scheduleName + ".SchdSt.stVal", null); + association.getDataValues((FcModelNode) state); + return ScheduleState.parse(state.getValueString()); + } + + public String getNodeEntryasString(String scheduleName, String specificNode, String dataType) + throws ServiceError, IOException { + BasicDataAttribute nodeEntry = (BasicDataAttribute) serverModel.findModelNode( + scheduleName + "." + specificNode + "." + dataType, null); + association.getDataValues((FcModelNode) nodeEntry); + return nodeEntry.getValueString(); + } + + protected IEC61850Utility(String host, int port) throws UnknownHostException, IOException, ServiceError { + this(InetAddress.getByName(host), port); + } + + protected IEC61850Utility(InetAddress host, int port) throws IOException, ServiceError { + log.info("Connecting to {}:{}", host, port); + ClientSap clientSap = new ClientSap(); + + this.association = clientSap.associate(host, port, null, null); + log.debug("loading server model"); + this.serverModel = this.association.retrieveModel(); + log.debug("done loading server model"); + } + + @Override + public void close() { + this.association.disconnect(); + } + + public static float readConstantSystemReservePowerFromConfigXml(String xml) + throws ParserConfigurationException, IOException, SAXException, IEC61850MissconfiguredException { + DocumentBuilder documentBuilder = Context.getDocumentBuilderFactory().newDocumentBuilder(); + + InputStream asStream = IOUtils.toInputStream(xml, Charset.defaultCharset()); + + Document configDocument = documentBuilder.parse(asStream); + configDocument.getDocumentElement().normalize(); + NodeList reserve = configDocument.getElementsByTagName("reserve"); + + if (reserve.getLength() != 1) { + throw new IEC61850MissconfiguredException( + "Expected to find exactly one element 'reserve' but found: " + reserve + + ". Maybe there is more than one CLS configured?"); + } + + NodeList systemReserveScheduleEntries = reserve.item(0).getChildNodes(); + int valueCount = 0; + String powerAsString = ""; + for (int i = 0; i < systemReserveScheduleEntries.getLength(); i++) { + Node item = systemReserveScheduleEntries.item(i); + // only interested in elements! + if (Node.ELEMENT_NODE == item.getNodeType()) { + valueCount++; + powerAsString = item.getAttributes().getNamedItem("power").getNodeValue(); + } + } + + if (valueCount != 1) { + throw new IEC61850MissconfiguredException( + "Expected exactly 1 power value in system reserve Schedule but got " + + systemReserveScheduleEntries.getLength() + ". Please reconfigure the device."); + } + + float power = Float.parseFloat(powerAsString); + + return power; + } + + /** + * Reads the reserve schedule from the IED Node and returns the constant power. Throws + * {@link IEC61850MissconfiguredException} if the reserve schedule is set up to hold more than one value + */ + public T readConstantValueFromSysResScheduleFromModelNode(ValueAccess valueAccess, + String reserveScheduleName) throws ServiceError, IOException, IEC61850MissconfiguredException { + + // read Number of Entrys + BdaInt32 NumEntrNode = (BdaInt32) serverModel.findModelNode(reserveScheduleName + ".NumEntr.setVal", null); + association.getDataValues(NumEntrNode); + int numEntrValue = NumEntrNode.getValue(); + + //reserve schedule ist just allowed to have one entry, so throw exception if this is not the case + if (numEntrValue != 1) { + throw new IEC61850MissconfiguredException( + "Expected exactly 1 power value in system reserve Schedule but got " + numEntrValue + + ". Please reconfigure the device."); + } + + String valNodeName = valueAccess.getValueAccessString(1, reserveScheduleName); + FcModelNode node = (FcModelNode) serverModel.findModelNode(valNodeName, null); + association.getDataValues(node); + return valueAccess.readToTargetValue(node); + } + + @Override + public void writeAndEnableSchedule(PreparedScheduleValues values, Duration interval, Instant start, int prio) + throws ServiceError, IOException { + + String scheduleName = writeScheduleValues(values); + + Long intervalInSeconds = interval.getSeconds(); + + if (intervalInSeconds < 1) { + throw new IllegalArgumentException("interval must be larger than one second"); + } + + setDataValues(scheduleName + ".SchdIntv.setVal", null, intervalInSeconds.toString()); + setSchedulePrio(scheduleName, prio); + + setScheduleStart(scheduleName, start); + BasicDataAttribute disableOp = findAndAssignValue(scheduleName + ".DsaReq.Oper.ctlVal", Fc.CO, "false"); + BasicDataAttribute enableOp = findAndAssignValue(scheduleName + ".EnaReq.Oper.ctlVal", Fc.CO, "true"); + + operate((FcModelNode) disableOp.getParent().getParent()); + operate((FcModelNode) enableOp.getParent().getParent()); + } + + public void setScheduleStart(String scheduleName, Instant start) throws ServiceError, IOException { + log.info("setting {} start to {}", scheduleName, start); + setDataValues(scheduleName + ".StrTm01.setTm", null, Long.toString(start.toEpochMilli())); + } + + public Instant getScheduleStart(String scheduleName) throws ServiceError, IOException { + BasicDataAttribute schedulePrio = (BasicDataAttribute) serverModel.findModelNode( + scheduleName + ".StrTm01.setTm", null); + association.getDataValues(schedulePrio); + return Instant.parse(schedulePrio.getValueString()); + } + + public void setSchedulePrio(String scheduleName, int prio) throws ServiceError, IOException { + setDataValues(scheduleName + ".SchdPrio.setVal", null, Long.toString(prio)); + } + + public int readSchedulePrio(String scheduleName) throws ServiceError, IOException { + BasicDataAttribute schedulePrio = (BasicDataAttribute) serverModel.findModelNode( + scheduleName + ".SchdPrio.setVal", null); + association.getDataValues(schedulePrio); + return Integer.valueOf(schedulePrio.getValueString()); + } + + /** + * Writes a previously specified Schedule to the device. + */ + public String writeScheduleValues(PreparedScheduleValues values) throws ServiceError, IOException { + String scheduleName = values.getScheduleName(); + + if (values.size() < 1) { + throw new IllegalArgumentException("At least one value required."); + } + + values.writeValues(); + + setDataValues(scheduleName + ".NumEntr.setVal", null, String.valueOf(values.size())); + return scheduleName; + } + + public void disableSchedule(String scheduleNames) throws ServiceError, IOException { + + BasicDataAttribute disableOp = findAndAssignValue(scheduleNames + ".DsaReq.Oper.ctlVal", Fc.CO, "true"); + + operate((FcModelNode) disableOp.getParent().getParent()); + } + + public void operate(FcModelNode node) throws ServiceError, IOException { + try { + association.operate(node); + } catch (ServiceError e) { + throw new ServiceError(e.getErrorCode(), "Unable to operate " + node.getReference().toString(), e); + } + } + + /** + * Reads the main power, that should be controlled by our schedule + */ + public T readGGIOOutput(ScheduleDefinitions constants) throws ServiceError, IOException { + String valueNodeName = constants.getGGIOValueReference(); + ModelNode ggioValue = serverModel.findModelNode(valueNodeName, null); + association.getDataValues((FcModelNode) ggioValue); + ValueAccess valueAccess = constants.getValueAccess(); + T monitoredValue = valueAccess.readToTargetValue((FcModelNode) ggioValue); + log.trace("Got output value '{}' at {} UTC", monitoredValue, Instant.now()); + return monitoredValue; + } + + /** + * Monitors the main power of the 61850 DUT by polling in monitoring interval over the duration of + * monitoringDuration. + *

+ * The result list contains a list of polled values. The first value is the polled value at the start. + */ + public List monitor(Instant start, Duration monitoringDuration, Duration monitoringInterval, + ScheduleDefinitions constants) throws InterruptedException { + + log.info("setting up monitoring"); + if (monitoringDuration.minus(Duration.ofSeconds(1)).isNegative()) { + throw new RuntimeException("Duration is too small, needs to be at least 1s"); + } + + if (start.plus(monitoringDuration).getEpochSecond() < Instant.now().getEpochSecond()) { + throw new RuntimeException("Nothing to monitor, start is in the past"); + } + + AtomicLong counter = new AtomicLong(monitoringDuration.getSeconds() / monitoringInterval.getSeconds()); + + ScheduledExecutorService service = new ScheduledThreadPoolExecutor(1); + + List monitoredValues = new LinkedList<>(); + Runnable monitoringTask = () -> { + try { + if (counter.getAndDecrement() > 0) { + T monitoredValue = readGGIOOutput(constants); + log.debug("Read value '{}' from {}", monitoredValue, constants.getControlledGGIO()); + monitoredValues.add(monitoredValue); + } + else { + service.shutdown(); + } + } catch (ServiceError | IOException e) { + log.error("Unable to read value", e); + } + }; + + long millisUntilStart = Duration.between(Instant.now(), start).toMillis(); + service.scheduleWithFixedDelay(monitoringTask, millisUntilStart, monitoringInterval.toMillis(), + TimeUnit.MILLISECONDS); + + service.awaitTermination(monitoringDuration.getSeconds() + millisUntilStart / 1000 + 5, TimeUnit.SECONDS); + + return monitoredValues; + } + + public BasicDataAttribute setDataValues(String objectReference, Fc fc, String value) + throws ServiceError, IOException { + log.debug("Setting {} to {}", objectReference, value); + BasicDataAttribute bda = findAndAssignValue(objectReference, fc, value); + try { + association.setDataValues(bda); + return bda; + } catch (ServiceError se) { + throw new ServiceError(se.getErrorCode(), + String.format("Unable to set '%s' to '%s'", objectReference, value), se); + } + } + + public BasicDataAttribute findAndAssignValue(String objectReference, Fc fc, String value) { + ModelNode node = serverModel.findModelNode(objectReference, fc); + if (node == null) { + throw new RuntimeException("Could not find node with name " + objectReference); + } + if (!(node instanceof BasicDataAttribute)) { + throw new RuntimeException( + String.format("Unable to assign a value to node '%s' with type '%s'.", node.getName(), + node.getClass().getSimpleName())); + } + else { + BasicDataAttribute attribute = (BasicDataAttribute) node; + setBda(value, attribute); + return attribute; + } + } + + private static void setBda(String valueString, BasicDataAttribute modelNode) { + if (modelNode instanceof BdaFloat32) { + float value = Float.parseFloat(valueString); + ((BdaFloat32) modelNode).setFloat(value); + } + else if (modelNode instanceof BdaFloat64) { + double value = Float.parseFloat(valueString); + ((BdaFloat64) modelNode).setDouble(value); + } + else if (modelNode instanceof BdaInt8) { + byte value = Byte.parseByte(valueString); + ((BdaInt8) modelNode).setValue(value); + } + else if (modelNode instanceof BdaInt8U) { + short value = Short.parseShort(valueString); + ((BdaInt8U) modelNode).setValue(value); + } + else if (modelNode instanceof BdaInt16) { + short value = Short.parseShort(valueString); + ((BdaInt16) modelNode).setValue(value); + } + else if (modelNode instanceof BdaInt16U) { + int value = Integer.parseInt(valueString); + ((BdaInt16U) modelNode).setValue(value); + } + else if (modelNode instanceof BdaInt32) { + int value = Integer.parseInt(valueString); + ((BdaInt32) modelNode).setValue(value); + } + else if (modelNode instanceof BdaInt32U) { + long value = Long.parseLong(valueString); + ((BdaInt32U) modelNode).setValue(value); + } + else if (modelNode instanceof BdaInt64) { + long value = Long.parseLong(valueString); + ((BdaInt64) modelNode).setValue(value); + } + else if (modelNode instanceof BdaBoolean) { + boolean value = Boolean.parseBoolean(valueString); + ((BdaBoolean) modelNode).setValue(value); + } + else if (modelNode instanceof BdaVisibleString) { + ((BdaVisibleString) modelNode).setValue(valueString); + } + else if (modelNode instanceof BdaTimestamp) { + ((BdaTimestamp) modelNode).setInstant(Instant.ofEpochMilli(Long.parseLong(valueString))); + } + else { + throw new IllegalArgumentException(); + } + } + + /** + * Reads the active schedule reference from the schedule controller + */ + public String readActiveSchedule(String scheduleController) throws ServiceError, IOException { + BdaVisibleString activeSchedule = (BdaVisibleString) serverModel.findModelNode( + scheduleController + ".ActSchdRef.stVal", null); + association.getDataValues((FcModelNode) activeSchedule); + String activeScheduleString = activeSchedule.getValueString(); + log.debug("Got active Schedule {} at {} UTC", activeScheduleString, Instant.now()); + return activeScheduleString; + } + + public void disableSchedules(String scheduleNames) throws ServiceError, IOException { + BasicDataAttribute disableOp = findAndAssignValue(scheduleNames + ".DsaReq.Oper.ctlVal", Fc.CO, "true"); + operate((FcModelNode) disableOp.getParent().getParent()); + } + + public boolean nodeExists(String nodeName) { + ModelNode node = getNode(nodeName); + // node is null if it does not exist + return node != null; + } + + public ModelNode getNode(String nodeName) { + return serverModel.findModelNode(nodeName, null); + } + + public ModelNode getNodeWithValues(String nodeName) throws ServiceError, IOException { + ModelNode modelNode = serverModel.findModelNode(nodeName, null); + for (ModelNode child : modelNode.getChildren()) { + if (child instanceof FcModelNode) { + log.trace("getting value for {}", child.getName()); + association.getDataValues((FcModelNode) child); + } + else { + log.trace("Ignoring {}", child.getName()); + } + } + return modelNode; + } + +} diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/testutils/MqttUtility.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/testutils/MqttUtility.java new file mode 100644 index 0000000..28307cf --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/testutils/MqttUtility.java @@ -0,0 +1,180 @@ +package org.openmuc.fnn.steuerbox.testutils; + +import com.beanit.iec61850bean.ServiceError; +import com.hivemq.client.mqtt.mqtt3.Mqtt3Client; +import io.reactivex.Single; +import org.openmuc.fnn.steuerbox.mqtt.Command; +import org.openmuc.fnn.steuerbox.mqtt.Schedule; +import org.openmuc.fnn.steuerbox.scheduling.PreparedSchedule; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.Closeable; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.time.Instant; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; +import java.util.function.Supplier; + +import static org.openmuc.fnn.steuerbox.mqtt.ParsingUtil.scheduleToJson; + +public class MqttUtility implements Closeable, ScheduleWriter { + + public static final String SCHEDULE_TOPIC = "fledge/south-schedule"; + public static final String CMD_TOPIC = "fledge/south-command"; + + private final static Logger log = LoggerFactory.getLogger(MqttUtility.class); + private final Mqtt3Client client; + private Consumer commandConsumer = ignore("command"); + private Consumer scheduleConsumer = ignore("schedule"); + + private Consumer ignore(String itemname) { + return cmdPayload -> log.trace("ignoring {} {}", itemname, cmdPayload); + } + + public MqttUtility() throws ExecutionException, InterruptedException { + client = Mqtt3Client.builder() + .identifier("Junit conformance test started @" + Instant.now()) + .automaticReconnect() + .maxDelay(60, TimeUnit.SECONDS) + .applyAutomaticReconnect() + .serverHost("127.0.0.1") + .serverPort(1883) + .build(); + + client.toBlocking().connectWith().simpleAuth().username("") // no user required in local container + .password("".getBytes(StandardCharsets.UTF_8)) // no password required + .applySimpleAuth().send(); + + subscribeTopic(CMD_TOPIC, () -> this.commandConsumer); + subscribeTopic(SCHEDULE_TOPIC, () -> this.scheduleConsumer); + } + + private void publishSchedule(String schedule) { + String s = "hedera-requests"; + client.toBlocking().publishWith().topic(s).payload(schedule.getBytes(StandardCharsets.UTF_8)).send(); + } + + private void subscribeTopic(String topic, Supplier> payloadConsumer) + throws ExecutionException, InterruptedException { + client.toAsync().subscribeWith().topicFilter(topic).callback(payload -> { + String payloadString = new String(payload.getPayloadAsBytes()); + log.trace("Received payload '{}' on topic '{}'", payloadString, topic); + payloadConsumer.get().accept(payloadString); + }).send().get(); + } + + @Override + public void close() throws IOException { + client.toBlocking().disconnect(); + } + + public static void main(String[] args) throws InterruptedException, ExecutionException { + MqttUtility mqttClient = new MqttUtility(); + while (true) { + mqttClient.publishSchedule( + "{\"skipHedera\":true,\"direction\":\"IMPORT\",\"start\":{\"seconds\":" + Instant.now() + .plusSeconds(1) + .getEpochSecond() + + ",\"nanos\":0},\"resolution\":\"FIFTEEN_MINUTES\",\"values\":[42,1337]}"); + Thread.sleep(60_000); + } + } + + @Override + public void writeAndEnableSchedule(PreparedSchedule.PreparedScheduleValues values, Duration interval, Instant start, + int prio) throws ServiceError, IOException { + String json = scheduleToJson(values.getValues(), interval, start); + this.publishSchedule(json); + log.debug("Published schedule {}", json); + } + + public Single>> fetchScheduleUpdate(int updatesToObserve, Duration timeout) { + Instant start = Instant.now(); + List> ret = new LinkedList<>(); + scheduleConsumer = scheduleStr -> { + try { + Instant timestamp = Instant.now(); + Schedule schedule = Schedule.parse(scheduleStr); + ret.add(new Timestamped<>(schedule, timestamp)); + log.debug("added new schedule {} with ts {}", schedule, timestamp); + } catch (Exception e) { + log.error("Unable to parse schedule '{}' and add it as a result", scheduleStr, e); + } + }; + log.debug("Start fetching schedule updates @ {}", start); + ExecutorService exec = Executors.newSingleThreadExecutor(); + Future>> future = exec.submit(() -> { + while (ret.size() < updatesToObserve && Duration.between(start, Instant.now()) + .minus(timeout) + .isNegative()) { + log.trace("Sleeping"); + Thread.sleep(100); + } + log.info("Done fetching schedule updates @ {}", Instant.now()); + scheduleConsumer = ignore("schedule after fetch timed out/enough elements collected"); + return ret; + }); + return Single.fromFuture(future); + } + + public Single>> fetchCommandUpdate(int updatesToObserve, Duration timeout) { + Instant start = Instant.now(); + List> ret = new LinkedList<>(); + commandConsumer = cmdStr -> { + try { + Instant timestamp = Instant.now(); + Command command = Command.fromJsonString(cmdStr); + ret.add(new Timestamped<>(command, timestamp)); + log.debug("added new command {} with ts {}", command, timestamp); + } catch (Exception e) { + log.error("Unable to parse command '{}' and add it as a result", cmdStr, e); + } + }; + log.debug("Start fetching command updates @ {}", start); + ExecutorService exec = Executors.newSingleThreadExecutor(); + Future>> future = exec.submit(() -> { + while (ret.size() < updatesToObserve && Duration.between(start, Instant.now()) + .minus(timeout) + .isNegative()) { + log.trace("Sleeping"); + Thread.sleep(100); + } + log.info("Done fetching command updates @ {}", Instant.now()); + commandConsumer = ignore("command after fetch timed out/enough elements collected"); + return ret; + }); + return Single.fromFuture(future); + } + + public static class Timestamped { + T object; + Instant timestamp; + + public Timestamped(T object, Instant timestamp) { + this.object = object; + this.timestamp = timestamp; + } + + public T getObject() { + return object; + } + + public Instant getTimestamp() { + return timestamp; + } + + @Override + public String toString() { + return object.toString() + " timestamped @ " + timestamp.toString(); + } + } +} diff --git a/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/testutils/ScheduleWriter.java b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/testutils/ScheduleWriter.java new file mode 100644 index 0000000..4cf1145 --- /dev/null +++ b/conformance-tests/src/main/java/org/openmuc/fnn/steuerbox/testutils/ScheduleWriter.java @@ -0,0 +1,22 @@ +package org.openmuc.fnn.steuerbox.testutils; + +import com.beanit.iec61850bean.ServiceError; +import org.openmuc.fnn.steuerbox.scheduling.PreparedSchedule; + +import java.io.IOException; +import java.time.Duration; +import java.time.Instant; + +/** + * Common interface for all utilities that are able to write a IEC 61850 schedule to a device + */ +public interface ScheduleWriter { + + void writeAndEnableSchedule(PreparedSchedule.PreparedScheduleValues values, Duration interval, Instant start, + int prio) throws ServiceError, IOException; + + default void writeAndEnableSchedule(PreparedSchedule preparedSchedule) throws ServiceError, IOException { + preparedSchedule.writeAndEnable(this); + } + +} diff --git a/conformance-tests/src/main/resources/logback.xml b/conformance-tests/src/main/resources/logback.xml new file mode 100644 index 0000000..aba86f9 --- /dev/null +++ b/conformance-tests/src/main/resources/logback.xml @@ -0,0 +1,19 @@ + + + + + + %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n + + + + + + + + + + + + + \ No newline at end of file diff --git a/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/AllianderBaseTest.java b/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/AllianderBaseTest.java new file mode 100644 index 0000000..eb5c2eb --- /dev/null +++ b/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/AllianderBaseTest.java @@ -0,0 +1,353 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.openmuc.fnn.steuerbox; + +import com.beanit.iec61850bean.Fc; +import com.beanit.iec61850bean.FcModelNode; +import com.beanit.iec61850bean.ModelNode; +import com.beanit.iec61850bean.ObjectReference; +import com.beanit.iec61850bean.ServiceError; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.openmuc.fnn.steuerbox.models.AllianderDER; +import org.openmuc.fnn.steuerbox.scheduling.ScheduleDefinitions; +import org.openmuc.fnn.steuerbox.scheduling.ScheduleType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * Common fields and methods for 61850 testing + */ +public abstract class AllianderBaseTest { + + private static final Logger logger = LoggerFactory.getLogger(ScheduleNodeTests.class); + + protected static AllianderDER dutAccess61850; + + @BeforeAll + public static void connectToDUT() throws ServiceError, IOException { + dutAccess61850 = AllianderDER.getWithDefaultSettings(); + } + + @BeforeEach + public void stopAllRunningSchedules() throws InterruptedException { + disableAllRunningSchedules(); + logger.debug("Disabled all schedules during init"); + Thread.sleep(500); + } + + @AfterAll + public static void shutdownConnection() { + dutAccess61850.close(); + } + + public static void disableAllRunningSchedules() { + getAllSchedules().forEach(scheduleType -> { + scheduleType.getAllScheduleNames().forEach(schedule -> { + try { + dutAccess61850.disableSchedules(schedule); + } catch (Exception e) { + Assertions.fail("error, could not disable schedule " + schedule); + logger.error("error, could not disable schedule " + schedule, e); + } + }); + }); + } + + /** + * These schedules use float values for scheduling + */ + protected static Stream> getPowerValueSchedules() { + return getAllSchedules().filter(s -> ScheduleType.ASG == s.getScheduleType()); + } + + /** + * These schedules use boolean values for scheduling + */ + protected static Stream> getOnOffSchedules() { + return getAllSchedules().filter(s -> ScheduleType.SPG == s.getScheduleType()); + } + + protected static Stream> getAllSchedules() { + return Stream.of(dutAccess61850.powerSchedules, dutAccess61850.maxPowerSchedules, dutAccess61850.onOffSchedules); + } + + public static void assertValuesMatch(List expectedValues, List actualValues, double withPercentage) { + Assertions.assertEquals(actualValues.size(), expectedValues.size()); + for (int i = 0; i < expectedValues.size(); i++) { + Float expected = expectedValues.get(i); + Float actual = actualValues.get(i).floatValue(); + Assertions.assertEquals(expected, actual, withPercentage, + "Array does not match at index " + i + ". " + "\nExpected values: " + expectedValues + "" + + "\nactual values : " + actualValues + "\n"); + } + } + + private static boolean areClose(Float actual, Float expected, double withPercentage) { + double lowerBound = expected * (1.0 - withPercentage / 100f); + double upperBound = expected * (1.0 + withPercentage / 100f); + return actual >= lowerBound && actual <= upperBound; + } + + public static void assertValuesMatch(List expectedValues, List actualValues) { + Assertions.assertEquals(actualValues.size(), expectedValues.size()); + for (int i = 0; i < expectedValues.size(); i++) { + boolean expected = expectedValues.get(i); + boolean actual = actualValues.get(i); + Assertions.assertEquals(expected, actual, + "Array does not match at index " + i + ". " + "\nExpected values: " + expectedValues + "" + + "\nactual values : " + actualValues + "\n"); + } + } + + protected void assertUntypedValuesMatch(List expectedValues, List actualValues) { + if (expectedValues.size() <= 0) { + if (expectedValues.size() == 0 && actualValues.size() == 0) { + + } + else { + Assertions.fail( + "Values do not match, different array sizes. Expected " + expectedValues.size() + " but got " + + actualValues.size()); + } + } + if (Float.class.equals(expectedValues.get(0).getClass())) { + assertValuesMatch((List) expectedValues, (List) actualValues, 0.1); + } + else if (Boolean.class.equals(expectedValues.get(0).getClass())) { + assertValuesMatch((List) expectedValues, (List) actualValues); + } + else { + throw new IllegalArgumentException("Expected Float or Boolean, got:" + expectedValues.get(0).getClass()); + } + } + + protected Collection testMandatoryNodes(Map mandatory, String parentNode) { + Collection violations = new LinkedList<>(); + + for (Map.Entry entry : mandatory.entrySet()) { + String fullNodeName = parentNode + "." + entry.getKey(); + + if (dutAccess61850.nodeExists(fullNodeName)) { + ModelNode node = dutAccess61850.getNode(fullNodeName); + + Fc actualFc = ((FcModelNode) node).getFc(); + if (!Objects.equals(entry.getValue(), actualFc)) { + violations.add("Mandatory requirement: node " + entry.getKey() + " is not the expected type " + + entry.getValue() + " but instead " + actualFc); + } + } + else { + violations.add("Mandatory requirement: node" + fullNodeName + "is not present"); + } + } + return violations; + } + + protected Collection testAtMostOnceNodes(Map atMostOne, String parentNode) { + + Collection violations = new LinkedList<>(); + + for (Map.Entry entry : atMostOne.entrySet()) { + ModelNode scheduleNode = dutAccess61850.getNode(parentNode); + if (scheduleNode == null) { + Assertions.fail("Unable to find node " + parentNode); + } + List occurencesThatContainKeyInName = scheduleNode.getChildren().stream()// + .filter(childNode -> childNode.getName().contains(entry.getKey()))// + .map(ModelNode::getReference)// + .map(ObjectReference::toString)// in order for distinct to work, ObjectReference does not implement equals() nor hashCode() + .distinct()// + .collect(Collectors.toList()); + + if (occurencesThatContainKeyInName.size() > 1) { + violations.add("atMostOnce requirement: Expected at most 1 occurence of nodes with '" + entry.getKey() + + "' in their name but found" + occurencesThatContainKeyInName.size() + ": " + + occurencesThatContainKeyInName); + } + } + return violations; + } + + protected Collection testOMulti(Map oMulti, String parentNode) { + Collection violations = new LinkedList<>(); + + for (Map.Entry entry : oMulti.entrySet()) { + List occurencesThatContainKeyInName = dutAccess61850.getNode(parentNode) + .getChildren() + .stream()// + .filter(childNode -> childNode.getName().contains(entry.getKey()))// + .filter(childNode -> entry.getKey().equals(removeNumbers(childNode.getName()))) + .collect(Collectors.toList()); + + for (ModelNode foundOptionalNode : occurencesThatContainKeyInName) { + Fc actualFc = ((FcModelNode) foundOptionalNode).getFc(); + + if (!Objects.equals(entry.getValue(), actualFc)) { + violations.add("Omulti requirement: Node " + foundOptionalNode.getReference() + + " does not have expected type " + entry.getValue() + " but instead " + actualFc); + } + + Optional number = extractNumberFromLastNodeName(foundOptionalNode.getName()); + if (number.isEmpty()) { + violations.add( + "Omulti requirement: Expected a instance number in node " + foundOptionalNode.getReference() + + " but found none."); + } + else if (number.get() < 1) { + violations.add("Omulti requirement: Expected a instance number larger than 0 but found " + number + + " in Omulti node " + foundOptionalNode.getReference()); + } + } + } + return violations; + } + + public static String removeNumbers(String stringWithNumbers) { + if (stringWithNumbers == null) { + return null; + } + return stringWithNumbers.replaceAll("[0-9]", ""); + } + + protected Collection testMMulti(Map mMulti, String parentNode) { + Collection violations = new LinkedList<>(); + + for (Map.Entry entry : mMulti.entrySet()) { + List occurencesThatContainKeyInName = dutAccess61850.getNode(parentNode) + .getChildren() + .stream()// + .filter(childNode -> childNode.getName().contains(entry.getKey()))// + .filter(childNode -> childNode instanceof FcModelNode) + .map(childNode -> (FcModelNode) childNode) + .collect(Collectors.toList()); + + if (occurencesThatContainKeyInName.isEmpty()) { + violations.add("Mmulti requirement: Expected a node that contains " + entry.getKey() + + " in its name but found none for parent " + parentNode); + continue; // just to make this clear, the further for loop will not be executed anyways... + } + + for (ModelNode foundOptionalNode : occurencesThatContainKeyInName) { + Fc actualFc = ((FcModelNode) foundOptionalNode).getFc(); + if (!Objects.equals(entry.getValue(), actualFc)) { + violations.add("Mmulti requirement: Node " + foundOptionalNode.getReference() + + " does not have expected type " + entry.getValue() + " but instead " + actualFc); + } + + Optional number = extractNumberFromLastNodeName(foundOptionalNode.getName()); + if (number.isEmpty()) { + violations.add( + "Omulti requirement: Expected a instance number in node " + foundOptionalNode.getReference() + + " but found none."); + } + else if (number.get() < 1) { + violations.add("Omulti requirement: Expected a instance number larger than 0 but found " + number + + " in Omulti node " + foundOptionalNode.getReference()); + } + } + } + return violations; + } + + public static Optional extractNumberFromLastNodeName(String foundNodeName) { + try { + String[] split = foundNodeName.split("\\."); + + String lastElement = foundNodeName; + if (split.length > 0) { + lastElement = split[split.length - 1]; + } + String numberAsString = lastElement.replaceAll("[^0-9]", ""); + return Optional.of(Integer.parseInt(numberAsString)); + } catch (Exception e) { + return Optional.empty(); + } + } + + protected Collection testMMultiF(Collection mMultiF, + String parentNode) { + Collection violations = new LinkedList<>(); + + for (AllianderTests.MandatoryOnCondition mandatoryOnCondition : mMultiF) { + String conditionNode = parentNode + mandatoryOnCondition.condition; + if (dutAccess61850.nodeExists(conditionNode)) { + + String nowMandatoryNode = parentNode + mandatoryOnCondition.mandatoryOnCondition; + if (!dutAccess61850.nodeExists(nowMandatoryNode)) { + violations.add("Node " + nowMandatoryNode + " is not present though it is required because node " + + conditionNode + " is present"); + } + } + else { + // condition not met, nothing more to check + } + } + return violations; + } + + protected Collection testOptionalNodes(Map optional, String parentNode) { + Collection violations = new LinkedList<>(); + for (Map.Entry entry : optional.entrySet()) { + String fullNodeName = parentNode + "." + entry.getKey(); + + if (dutAccess61850.nodeExists(fullNodeName)) { + ModelNode node = dutAccess61850.getNode(fullNodeName); + + Fc actualFc = ((FcModelNode) node).getFc(); + Fc expectedFc = entry.getValue(); + if (!Objects.equals(expectedFc, actualFc)) { + violations.add("Optional node " + fullNodeName + " does not have expected type " + expectedFc + + " but instead " + actualFc); + } + } + else { + // optional node is not present -> nothing more to do + } + } + return violations; + } + + protected static class MandatoryOnCondition { + final String condition; + final String mandatoryOnCondition; + final Fc fc; + + interface SpecifiedCondition { + MandatoryOnCondition thenMandatory(String nodeName, Fc fc); + } + + public static SpecifiedCondition ifPresent(String nodeName) { + return (thenMandatoryNode, fc) -> new MandatoryOnCondition(nodeName, thenMandatoryNode, fc); + } + + private MandatoryOnCondition(String condition, String mandatoryOnCondition, Fc fc) { + this.condition = condition; + this.mandatoryOnCondition = mandatoryOnCondition; + this.fc = fc; + } + } +} diff --git a/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/AllianderTests.java b/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/AllianderTests.java new file mode 100644 index 0000000..b336f45 --- /dev/null +++ b/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/AllianderTests.java @@ -0,0 +1,161 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.openmuc.fnn.steuerbox; + +import de.fhg.ise.testtool.utils.annotations.label.Requirements; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.openmuc.fnn.steuerbox.scheduling.ScheduleDefinitions; +import org.openmuc.fnn.steuerbox.scheduling.ScheduleType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import static org.openmuc.fnn.steuerbox.models.Requirement.LN02a; +import static org.openmuc.fnn.steuerbox.models.Requirement.LN02b; +import static org.openmuc.fnn.steuerbox.models.Requirement.LN02c; +import static org.openmuc.fnn.steuerbox.models.Requirement.S01; +import static org.openmuc.fnn.steuerbox.models.Requirement.S02; +import static org.openmuc.fnn.steuerbox.models.Requirement.S04; +import static org.openmuc.fnn.steuerbox.models.Requirement.S05a; +import static org.openmuc.fnn.steuerbox.models.Requirement.S05b; +import static org.openmuc.fnn.steuerbox.models.Requirement.S05c; +import static org.openmuc.fnn.steuerbox.models.Requirement.S10; +import static org.openmuc.fnn.steuerbox.models.Requirement.S11; +import static org.openmuc.fnn.steuerbox.models.Requirement.S12; + +/** + * Tests suiting the requirements in https://github.com/alliander-opensource/der-scheduling/blob/main/REQUIREMENTS.md + *

+ * Systemoverview available at https://github.com/alliander-opensource/der-scheduling/blob/main/images/system-overview.drawio.png + *

+ * General tests related to 61850 are to be found in {@link ScheduleExecutionTest} + */ +public class AllianderTests extends AllianderBaseTest { + + private static final Logger log = LoggerFactory.getLogger(AllianderTests.class); + + @DisplayName("tenSchedulesAreSupportedPerType") + @Requirements(S01) + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void tenSchedulesAreSupportedPerType(ScheduleDefinitions scheduleConstants) { + int j = 0; + for (String scheduleName : scheduleConstants.getAllScheduleNames()) { + boolean ScheduleExistsOrNot = dutAccess61850.nodeExists(scheduleName); + Assertions.assertTrue(ScheduleExistsOrNot, "Schedule " + scheduleName + " does not exist"); + if (ScheduleExistsOrNot) + j++; + } + log.info("There are {} existing schedules at this logical node", j); + } + + @DisplayName("scheduleSupports100values") + @Requirements(S10) + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void scheduleSupports100values(ScheduleDefinitions scheduleConstants) { + for (String scheduleName : scheduleConstants.getAllScheduleNames()) { + assert100ScheduleValuesAreSupported(scheduleConstants, scheduleName); + } + } + + @DisplayName("reserveScheduleSupports100values") + @Requirements(S12) + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void reserveScheduleSupports100values(ScheduleDefinitions scheduleConstants) { + assert100ScheduleValuesAreSupported(scheduleConstants, scheduleConstants.getReserveSchedule()); + } + + private void assert100ScheduleValuesAreSupported(ScheduleDefinitions scheduleConstants, String scheduleName) { + final String valNodeName; + if (scheduleConstants.getScheduleType() == ScheduleType.SPG) + valNodeName = ".ValSPG"; + else + valNodeName = ".ValASG"; + for (int i = 1; i <= 100; i++) { + String numberAsStringFilledUpWithZeros = String.format("%03d", i); + String valueConfigurationNode = scheduleName + valNodeName + numberAsStringFilledUpWithZeros; + boolean valueExists = dutAccess61850.nodeExists(valueConfigurationNode); + Assertions.assertTrue(valueExists, "Missing node " + valueConfigurationNode); + } + } + + @DisplayName("scheduleSupportsTimebasedScheduling") + @Requirements(S02) + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void scheduleSupportsTimebasedScheduling(ScheduleDefinitions scheduleConstants) { + for (int i = 1; i <= 10; i++) { + String aTimerNode = scheduleConstants.getScheduleName(i) + ".StrTm01"; + Assertions.assertTrue(dutAccess61850.nodeExists(aTimerNode), + "Node " + aTimerNode + " does not exist. Time based scheduling is not possible without this node"); + } + } + + @DisplayName("allExpectedSchedulesExist") + @Requirements({ LN02a, LN02b, LN02c }) + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void allExpectedSchedulesExist(ScheduleDefinitions scheduleConstants) { + for (String scheduleName : scheduleConstants.getAllScheduleNames()) { + Assertions.assertTrue(dutAccess61850.nodeExists(scheduleName), + "Expected schedule " + scheduleName + " to exist but did not find it"); + } + } + + @DisplayName("reserveSchedulesExist") + @Requirements(S04) + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void reserveSchedulesExist(ScheduleDefinitions scheduleConstants) { + Assertions.assertTrue(dutAccess61850.nodeExists(scheduleConstants.getReserveSchedule())); + } + + @Requirements(S05a) + @Test + void absolutePowerValueSchedulesAreSupported() { + for (String absolutePowerValueSchedule : dutAccess61850.powerSchedules.getAllScheduleNames()) { + Assertions.assertTrue(dutAccess61850.nodeExists(absolutePowerValueSchedule)); + } + } + + @Requirements(S05b) + @Test + void maxPowerValueSchedulesAreSupported() { + for (String absolutePowerValueSchedule : dutAccess61850.maxPowerSchedules.getAllScheduleNames()) { + Assertions.assertTrue(dutAccess61850.nodeExists(absolutePowerValueSchedule)); + } + } + + @Requirements(S05c) + @Test + void onOffSchedulesAreSupported() { + for (String absolutePowerValueSchedule : dutAccess61850.onOffSchedules.getAllScheduleNames()) { + Assertions.assertTrue(dutAccess61850.nodeExists(absolutePowerValueSchedule)); + } + } + + @Test + @Requirements(S11) + void threeReserveSchedulesExist() { + Assertions.assertTrue(dutAccess61850.nodeExists(dutAccess61850.onOffSchedules.getReserveSchedule())); + Assertions.assertTrue(dutAccess61850.nodeExists(dutAccess61850.maxPowerSchedules.getReserveSchedule())); + Assertions.assertTrue(dutAccess61850.nodeExists(dutAccess61850.powerSchedules.getReserveSchedule())); + } + +} diff --git a/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/EmsInterfacingTests.java b/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/EmsInterfacingTests.java new file mode 100644 index 0000000..862dbfb --- /dev/null +++ b/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/EmsInterfacingTests.java @@ -0,0 +1,313 @@ +package org.openmuc.fnn.steuerbox; + +import com.beanit.iec61850bean.ModelNode; +import com.beanit.iec61850bean.ServiceError; +import de.fhg.ise.testtool.utils.annotations.label.Description; +import io.reactivex.Single; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.openmuc.fnn.steuerbox.mqtt.Command; +import org.openmuc.fnn.steuerbox.mqtt.Schedule; +import org.openmuc.fnn.steuerbox.scheduling.PreparedSchedule; +import org.openmuc.fnn.steuerbox.testutils.MqttUtility; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.time.Duration; +import java.time.Instant; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static java.time.Duration.ofSeconds; +import static java.time.temporal.ChronoUnit.HOURS; +import static java.time.temporal.ChronoUnit.SECONDS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; + +/** + * Tests covering the (MQTT) interface to a local EMS to request new schedules, the forwarding of schedules and + * commands. + *

+ * These tests are tailored and limited to max power schedules, in line with the default FLEDGE settings. + */ +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class EmsInterfacingTests extends AllianderBaseTest { + + private static final Logger log = LoggerFactory.getLogger(EmsInterfacingTests.class); + + final int defaultScheduleValue; + final MqttUtility dutAccessMQTT; + + public EmsInterfacingTests() throws ExecutionException, InterruptedException, ServiceError, IOException, + IEC61850MissconfiguredException { + defaultScheduleValue = dutAccess61850.readConstantValueFromSysResScheduleFromModelNode( + dutAccess61850.maxPowerSchedules.getValueAccess(), + dutAccess61850.maxPowerSchedules.getReserveSchedule()).intValue(); + dutAccessMQTT = new MqttUtility(); + } + + @Description("Tests that a schedules values are forwarded as a command just in time. Check publishing time, " + + "control value and 'SecondsSinceEpoch' payload. Does not check 'FractionOfSecond' of published command." + + "For the test setup, a schedule is created using a IEC 61850 client. Then, the tests are carried out on" + + " MQTT messages that are created by FLEDGE." + + "WARNING: this test only works if it is executed first, if the order is switched this is broken. This seems to be related to FLEDEGE. " + + "This behaviour is documented in https://github.com/alliander-opensource/ReLevENT/issues/20") + @Test + @Order(1) + void commandsAreForwardedJustOnTime() throws ServiceError, IOException, ExecutionException, InterruptedException { + + Instant iec61850ScheduleStart = Instant.now().plus(5, SECONDS).truncatedTo(SECONDS); + List iec61850ScheduleValues = Arrays.asList(1d, 42d, 1337d); + Duration iec61850ScheduleInterval = ofSeconds(1); + + // set up observation: watch all values from the schedule and changing back to default + final int commandUpdatesToObserve = iec61850ScheduleValues.size() + 1; + Single>> commandUpdates = dutAccessMQTT.fetchCommandUpdate( + commandUpdatesToObserve, iec61850ScheduleInterval.multipliedBy(commandUpdatesToObserve) + .plus(Duration.between(Instant.now(), iec61850ScheduleStart).plus(ofSeconds(5)))); + // set up execution + PreparedSchedule iec61850schedule = dutAccess61850.maxPowerSchedules.prepareSchedule(// + iec61850ScheduleValues,// + 1,// fixed for the test: fledge setup tested and set up for this schedule + iec61850ScheduleInterval,// + iec61850ScheduleStart,// + 200);// schedule prio is arbitrary, needs to be something larger than default prio + dutAccess61850.writeAndEnableSchedule(iec61850schedule); + + // wait until command changes are observed + List> commands = commandUpdates.blockingGet(); + // do checks on 4 command updates: check values, publishing time of cmd and "sinceEpoch" of published payload + assertFalse(commands.isEmpty(), + "No MQTT commands where published localhost's MQTT broker @ topic " + dutAccessMQTT.CMD_TOPIC + "."); + assertEquals(4, commandUpdatesToObserve); + assertEquals(commandUpdatesToObserve, commands.size(), + "Expected exactly " + commandUpdatesToObserve + " MQTT command messages"); + + MqttUtility.Timestamped firstCmd = commands.get(0); + assertEquals(iec61850ScheduleStart, firstCmd.getTimestamp().truncatedTo(SECONDS)); + assertEquals(iec61850ScheduleStart.getEpochSecond(), firstCmd.getObject().epochSecond); + assertEquals(1d, firstCmd.getObject().controlValue); + + MqttUtility.Timestamped secondCmd = commands.get(1); + Instant secondStart = iec61850ScheduleStart.plus(iec61850ScheduleInterval); + assertEquals(secondStart, secondCmd.getTimestamp().truncatedTo(SECONDS)); + assertEquals(secondStart.getEpochSecond(), secondCmd.getObject().epochSecond); + assertEquals(42d, secondCmd.getObject().controlValue); + + MqttUtility.Timestamped thirdCmd = commands.get(2); + Instant thirdStart = iec61850ScheduleStart.plus(iec61850ScheduleInterval.multipliedBy(2)); + assertEquals(thirdStart, thirdCmd.getTimestamp().truncatedTo(SECONDS)); + assertEquals(thirdStart.getEpochSecond(), thirdCmd.getObject().epochSecond); + assertEquals(1337d, thirdCmd.getObject().controlValue); + + MqttUtility.Timestamped fourthCmd = commands.get(3); + Instant fourthStart = iec61850ScheduleStart.plus(iec61850ScheduleInterval.multipliedBy(3)); + assertEquals(fourthStart, fourthCmd.getTimestamp().truncatedTo(SECONDS)); + assertEquals(fourthStart.getEpochSecond(), fourthCmd.getObject().epochSecond); + assertEquals(defaultScheduleValue, commands.get(3).getObject().controlValue); + } + + @Description("Tests that a schedule transmitted via MQTT will be forwarded to the IEC 61850 server. " + + "Makes sure that schedule values and interval are maintained. Schedule priority is fixed to 20. " + + "For the test setup, a schedule is created using a MQTT interface, the actual tests are carried out using a IEC 61850 client.") + @Test + @Order(2) + void schedulesAreForwardedAsIEC61850() throws ServiceError, IOException, InterruptedException { + final Instant expectedStart = Instant.now().plus(Duration.ofMinutes(5)).truncatedTo(SECONDS); + final int scheduleNumber = 1; + List scheduleValues = Arrays.asList(42, 1337); + Duration scheduleInterval = Duration.ofMinutes(5); + + PreparedSchedule mqttSchedule = dutAccess61850.maxPowerSchedules.prepareSchedule(scheduleValues, scheduleNumber, + scheduleInterval, expectedStart, 200); + dutAccessMQTT.writeAndEnableSchedule(mqttSchedule); + + Thread.sleep(1_000); + + assertEquals(expectedStart, + dutAccess61850.getScheduleStart(dutAccess61850.maxPowerSchedules.getScheduleName(scheduleNumber))); + + ModelNode node = dutAccess61850.getNodeWithValues( + dutAccess61850.maxPowerSchedules.getScheduleName(scheduleNumber)); + String node1 = node.getChild("ValASG001").getBasicDataAttributes().get(0).getValueString(); // sollte 42 sein + assertEquals(42, Float.valueOf(node1)); + String node2 = node.getChild("ValASG002").getBasicDataAttributes().get(0).getValueString(); // sollte 1337 sein + assertEquals(1337, Float.valueOf(node2)); + String numberOfScheduleValues = node.getChild("NumEntr") + .getBasicDataAttributes() + .get(0) + .getValueString(); // sollte 2 sein! + assertEquals(2, Integer.valueOf(numberOfScheduleValues)); + + String schdIntv = node.getChild("SchdIntv") + .getBasicDataAttributes() + .get(0) + .getValueString(); // sollte 5min sein + assertEquals(scheduleInterval.toSeconds(), Long.valueOf(schdIntv)); + + String schdPrio = node.getChild("SchdPrio") + .getBasicDataAttributes() + .get(0) + .getValueString(); // sollte 20 sein, ist im hedera client hard gekodet! + assertEquals(20, Long.valueOf(schdPrio)); // given prio is ignored when transmitting via mqtt! + } + + @Description("Tests that a schedule that covers an entire day can be created and transmitted via MQTT interface." + + "For the test setup, a schedule is written using MQTT. The actual tests are carried out using a IEC 61850 client.") + @Test + @Order(3) + void oneDayCanBeCovered() throws ServiceError, IOException, InterruptedException { + + final Instant expectedStart = Instant.now().plus(Duration.ofMinutes(5)).truncatedTo(SECONDS); + final int scheduleNumber = 1; + List scheduleValues = Stream.iterate(1, i -> i + 1) + .limit(100) + .map(i -> (Number) i) + .collect(Collectors.toList()); + Duration scheduleInterval = Duration.ofMinutes(15); + + PreparedSchedule mqttSchedule = dutAccess61850.maxPowerSchedules.prepareSchedule(scheduleValues, scheduleNumber, + scheduleInterval, expectedStart, 200); + dutAccessMQTT.writeAndEnableSchedule(mqttSchedule); + + Thread.sleep(1_000); + + ModelNode node = dutAccess61850.getNodeWithValues( + dutAccess61850.maxPowerSchedules.getScheduleName(scheduleNumber)); + + int valuesChecked = 0; + for (int i = 1; i <= 100; i++) { + String valueAccessString = String.format("ValASG%03d", i); + assertEquals(i, + Float.valueOf(node.getChild(valueAccessString).getBasicDataAttributes().get(0).getValueString())); + log.debug("Value of node {} has expected value {}", valueAccessString, i); + valuesChecked++; + } + assertEquals(100, valuesChecked); + + String numberOfScheduleValues = node.getChild("NumEntr").getBasicDataAttributes().get(0).getValueString(); + assertEquals(100, Integer.valueOf(numberOfScheduleValues)); + log.info("Schedule value size set to {} as expected", numberOfScheduleValues); + + String schdIntv = node.getChild("SchdIntv") + .getBasicDataAttributes() + .get(0) + .getValueString(); // sollte 5min sein + assertEquals(Duration.ofMinutes(15).toSeconds(), Long.valueOf(schdIntv)); + + Duration maximalScheduleDuration = Duration.ofMinutes(15).multipliedBy(100); + assertFalse(maximalScheduleDuration.minus(Duration.ofDays(1)).isNegative()); + log.info("Maximal schedule duration of {} is larger than 1 day (24h)", maximalScheduleDuration); + } + + @Description("This test covers: Schedules are published via MQTT. " + "Publishing interval is 5 seconds. " + + "Format of the MQTT JSON payload is as expected. " + + "Schedule values and schedule timestamps have the expected values. " + + "Does not check 'FractionOfSecond' of published schedule." + + "For the test setup, a schedule is created using a IEC 61850 client. Then, the tests are carried out on MQTT messages that are created by FLEDGE") + @Test + @Order(4) + void schedulesAreForwardedInExpectedFormat() throws ServiceError, IOException, InterruptedException { + + Instant iec61850ScheduleStart = Instant.now().plus(3, HOURS).truncatedTo(SECONDS); + List iec61850ScheduleValues = Arrays.asList(1d, 42d, 1337d); + Duration iec61850ScheduleInterval = ofSeconds(1); + PreparedSchedule iec61850schedule = dutAccess61850.maxPowerSchedules.prepareSchedule(// + iec61850ScheduleValues,// + 1,// fixed for the test: fledge setup tested and set up for this schedule + iec61850ScheduleInterval,// + iec61850ScheduleStart,// + 200);// schedule prio is arbitrary, needs to be something larger than default prio + dutAccess61850.writeAndEnableSchedule(iec61850schedule); + Single>> result = dutAccessMQTT.fetchScheduleUpdate(1, + Duration.between(Instant.now(), iec61850ScheduleStart).plus(iec61850ScheduleInterval.multipliedBy(2))); + log.debug("Schedule written, awaiting publishing of result schedule (happens every 5 seconds))"); + List> timestampedObjects = result.blockingGet(); + + Schedule sched = timestampedObjects.get(0).getObject(); + + log.debug("Checking schedule {}", sched); + assertEquals(defaultScheduleValue, sched.getScheduleEntries().get(0).controlValue); + + assertEquals(1d, sched.getScheduleEntries().get(1).controlValue); + assertEquals(iec61850ScheduleValues.get(0), sched.getScheduleEntries().get(1).controlValue); + assertEquals(iec61850ScheduleStart.getEpochSecond(), sched.getScheduleEntries().get(1).startEpochSecond); + + assertEquals(42d, sched.getScheduleEntries().get(2).controlValue); + assertEquals(iec61850ScheduleValues.get(1), sched.getScheduleEntries().get(2).controlValue); + assertEquals(iec61850ScheduleStart.plus(iec61850ScheduleInterval).getEpochSecond(), + sched.getScheduleEntries().get(2).startEpochSecond); + + assertEquals(1337d, sched.getScheduleEntries().get(3).controlValue); + assertEquals(iec61850ScheduleValues.get(2), sched.getScheduleEntries().get(3).controlValue); + assertEquals(iec61850ScheduleStart.plus(iec61850ScheduleInterval.multipliedBy(2)).getEpochSecond(), + sched.getScheduleEntries().get(3).startEpochSecond); + + assertEquals(defaultScheduleValue, sched.getScheduleEntries().get(4).controlValue); + assertEquals(iec61850ScheduleStart.plus(iec61850ScheduleInterval.multipliedBy(3)).getEpochSecond(), + sched.getScheduleEntries().get(4).startEpochSecond); + } + + @Description( + "Schedules are published via MQTT. Publishing interval is 5 seconds. Schedule values and schedule timestamps have the expected values which do not change over time. Does not check 'FractionOfSecond' of published schedule." + + "For the test setup, a schedule is created using a IEC 61850 client. Then, the tests are carried out on MQTT messages that are created by FLEDGE") + @Test + @Order(5) + void schedulesArePublishedEvery5Seconds_valuesDoNotDiffer() throws ServiceError, IOException, InterruptedException { + + Instant iec61850ScheduleStart = Instant.now().plus(3, HOURS).truncatedTo(SECONDS); + List iec61850ScheduleValues = Arrays.asList(1d, 42d, 1337d); + Duration iec61850ScheduleInterval = ofSeconds(1); + PreparedSchedule iec61850schedule = dutAccess61850.maxPowerSchedules.prepareSchedule(// + iec61850ScheduleValues,// + 1,// fixed for the test: fledge setup tested and set up for this schedule + iec61850ScheduleInterval,// + iec61850ScheduleStart,// + 200);// schedule prio is arbitrary, needs to be something larger than default prio + dutAccess61850.writeAndEnableSchedule(iec61850schedule); + Single>> result = dutAccessMQTT.fetchScheduleUpdate(3, + Duration.between(Instant.now(), iec61850ScheduleStart).plus(iec61850ScheduleInterval.multipliedBy(4))); + log.debug("Schedule written, awaiting publishing of result schedule (happens every 5 seconds))"); + List> timestampedObjects = result.blockingGet(); + assertEquals(3, timestampedObjects.size()); + + Instant firstTimestamp = timestampedObjects.get(0).getTimestamp().truncatedTo(SECONDS); + Schedule firstSchedule = timestampedObjects.get(0).getObject(); + Instant secondTimestamp = timestampedObjects.get(1).getTimestamp().truncatedTo(SECONDS); + Schedule secondSchedule = timestampedObjects.get(1).getObject(); + Instant thirdTimestamp = timestampedObjects.get(2).getTimestamp().truncatedTo(SECONDS); + Schedule thirdSchedule = timestampedObjects.get(2).getObject(); + + assertEquals(firstTimestamp.plus(5, SECONDS), secondTimestamp); + assertEquals(firstTimestamp.plus(10, SECONDS), thirdTimestamp); + + for (Schedule sched : Arrays.asList(firstSchedule, secondSchedule, thirdSchedule)) { + log.debug("Checking schedule {}", sched); + assertEquals(defaultScheduleValue, sched.getScheduleEntries().get(0).controlValue); + + assertEquals(1d, sched.getScheduleEntries().get(1).controlValue); + assertEquals(iec61850ScheduleValues.get(0), sched.getScheduleEntries().get(1).controlValue); + assertEquals(iec61850ScheduleStart.getEpochSecond(), sched.getScheduleEntries().get(1).startEpochSecond); + + assertEquals(42d, sched.getScheduleEntries().get(2).controlValue); + assertEquals(iec61850ScheduleValues.get(1), sched.getScheduleEntries().get(2).controlValue); + assertEquals(iec61850ScheduleStart.plus(iec61850ScheduleInterval).getEpochSecond(), + sched.getScheduleEntries().get(2).startEpochSecond); + + assertEquals(1337d, sched.getScheduleEntries().get(3).controlValue); + assertEquals(iec61850ScheduleValues.get(2), sched.getScheduleEntries().get(3).controlValue); + assertEquals(iec61850ScheduleStart.plus(iec61850ScheduleInterval.multipliedBy(2)).getEpochSecond(), + sched.getScheduleEntries().get(3).startEpochSecond); + + assertEquals(defaultScheduleValue, sched.getScheduleEntries().get(4).controlValue); + assertEquals(iec61850ScheduleStart.plus(iec61850ScheduleInterval.multipliedBy(3)).getEpochSecond(), + sched.getScheduleEntries().get(4).startEpochSecond); + } + } +} diff --git a/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/ScheduleControllerNodeTests.java b/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/ScheduleControllerNodeTests.java new file mode 100644 index 0000000..bb13cc1 --- /dev/null +++ b/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/ScheduleControllerNodeTests.java @@ -0,0 +1,190 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.openmuc.fnn.steuerbox; + +import com.beanit.iec61850bean.Fc; +import com.beanit.iec61850bean.ServiceError; +import de.fhg.ise.testtool.utils.annotations.label.Requirements; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.openmuc.fnn.steuerbox.scheduling.ScheduleDefinitions; + +import java.io.IOException; +import java.time.Duration; +import java.time.Instant; +import java.util.Collection; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.openmuc.fnn.steuerbox.models.Requirement.E01; +import static org.openmuc.fnn.steuerbox.models.Requirement.LN01; +import static org.openmuc.fnn.steuerbox.models.Requirement.LN02; +import static org.openmuc.fnn.steuerbox.models.Requirement.LN02a; +import static org.openmuc.fnn.steuerbox.models.Requirement.LN02b; +import static org.openmuc.fnn.steuerbox.models.Requirement.LN02c; +import static org.openmuc.fnn.steuerbox.models.Requirement.LN03; + +/** + * Holds tests related to 61850 schedule controller node behaviour + */ +public class ScheduleControllerNodeTests extends AllianderBaseTest { + + /** + * Test if the scheduler has the required nodes with correct types as defined in IEC 61850-90-10:2017, table 6 (page + * 25) + **/ + @DisplayName("checkSubnodes") + @Requirements({ LN03, LN01, LN02 }) + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void checkSubnodes(ScheduleDefinitions scheduleConstants) { + + // relevant part of the table is the "non-derived-statistics" (nds) column + + Map optional = new HashMap<>(); + Map atMostOne = new HashMap<>(); + Map mandatory = new HashMap<>(); + Map mMulti = new HashMap<>(); + Map oMulti = new HashMap<>(); + + /** + * Descriptions (DC) + */ + optional.put("NamPlt", Fc.DC); + + /** + * Status Information (ST) + */ + mandatory.put("ActSchdRef", Fc.ST); + atMostOne.put("ValINS", Fc.ST); + atMostOne.put("ValSPS", Fc.ST); + atMostOne.put("ValENS", Fc.ST); + mandatory.put("Beh", Fc.ST); + optional.put("Health", Fc.ST); + optional.put("Mir", Fc.ST); + /** + * Measured and metered values (MX) + */ + atMostOne.put("ValMV", Fc.MX); + /** + * Controls + */ + optional.put("Mod", Fc.CO); + /** + * Settings (SP) + */ + mandatory.put("CtlEnt", Fc.SP); + for (int n = 1; n <= 10; n++) { + // n=001..010 is only valid for Alliander tests + String numberAsStringFilledUpWithZeros = String.format("%02d", n); + mMulti.put("Schd" + numberAsStringFilledUpWithZeros, Fc.SP); + } + oMulti.put("InRef", Fc.SP); + + /*** + * Replace this by usages of test + */ + + String controllerNode = scheduleConstants.getController(); + Collection violations = new LinkedList<>(); + violations.addAll(testOptionalNodes(optional, controllerNode)); + violations.addAll(testAtMostOnceNodes(atMostOne, controllerNode)); + violations.addAll(testMandatoryNodes(mandatory, controllerNode)); + violations.addAll(testMMulti(mMulti, controllerNode)); + violations.addAll(testOMulti(oMulti, controllerNode)); + + String delimiter = "\n - "; + String violationsList = delimiter + String.join(delimiter, violations); + + assertTrue(violations.isEmpty(), + "Found violations of node requirements for schedule controller " + controllerNode + ": " + + violationsList + "\n"); + } + + /** + * {@ link Requirements#LN02a} + */ + // TODO: fails only for maxpower schedules?! + @DisplayName("activeControllerIsUpdated") + @Requirements({ LN03, LN02a, LN02b, LN02c }) + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void activeControllerIsUpdated(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, InterruptedException { + + //initial state: no schedule active -> reserve schedule is working + //test, that ActSchdRef contains a reference of the reserve schedule + + assertEquals(scheduleConstants.getReserveSchedule(), dutAccess61850.readActiveSchedule(scheduleConstants.getController()), + "Expecting reserve schedules to run in initial state"); + + String schedule = scheduleConstants.getScheduleName(1); + //write and activate a schedule with a higher priority than the reserve schedule + Instant scheduleStart = Instant.now().plus(Duration.ofSeconds(1)); + dutAccess61850.writeAndEnableSchedule(scheduleConstants.getValueAccess().activateScheduleWithDefaultValue(schedule), + Duration.ofSeconds(2), scheduleStart, 100); + + while (Instant.now().isBefore(scheduleStart.plus(Duration.ofMillis(200)))) { + Thread.sleep(200); + } + + //test, that ActSchdRef contains a reference of the active schedule + assertEquals(schedule, dutAccess61850.readActiveSchedule(scheduleConstants.getController())); + + // wait until the active schedule finished service + Thread.sleep(2000); + + //make sure the reserve schedule is active again + assertEquals(scheduleConstants.getReserveSchedule(), dutAccess61850.readActiveSchedule(scheduleConstants.getController()), + "Did not return to system reserve schedule after execution time"); + } + + // TODO: fails only for maxpower schedules?! + @DisplayName("activeControllerIsUpdatedWithScheduleOfHighestPrio") + @Requirements({ LN03, E01 }) + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void activeControllerIsUpdatedWithScheduleOfHighestPrio(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, InterruptedException { + + // assertEquals(scheduleConstants.getReserveSchedule(), dut.readActiveSchedule(scheduleConstants.getController()), + // "Expecting reserve schedules to run in initial state"); + + Instant start = Instant.now().plus(Duration.ofMillis(500)); + // schedule 1 with low prio + String schedule1Name = scheduleConstants.getScheduleName(1); + dutAccess61850.writeAndEnableSchedule(scheduleConstants.getValueAccess().activateScheduleWithDefaultValue(schedule1Name), + Duration.ofSeconds(1), start, 20); + + // schedule 2 starts a bit after schedule 1 but with higher prio + String schedule2Name = scheduleConstants.getScheduleName(2); + dutAccess61850.writeAndEnableSchedule(scheduleConstants.getValueAccess().activateScheduleWithDefaultValue(schedule2Name), + Duration.ofSeconds(1), start.plus(Duration.ofSeconds(1)), 200); + + // wait until start (and a bit longer), then schedule 1 should be active + long millisUntilStart = Duration.between(Instant.now(), start).toMillis(); + Thread.sleep(millisUntilStart + 200); + assertEquals(dutAccess61850.readActiveSchedule(scheduleConstants.getController()), schedule1Name); + + // sleep 1s, after that schedule 2 should be active + Thread.sleep(1_000); + assertEquals(dutAccess61850.readActiveSchedule(scheduleConstants.getController()), schedule2Name); + + Thread.sleep(1000); + } +} diff --git a/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/ScheduleExecutionTest.java b/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/ScheduleExecutionTest.java new file mode 100644 index 0000000..1b8e91e --- /dev/null +++ b/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/ScheduleExecutionTest.java @@ -0,0 +1,343 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.openmuc.fnn.steuerbox; + +import com.beanit.iec61850bean.ServiceError; +import de.fhg.ise.testtool.utils.annotations.label.Description; +import de.fhg.ise.testtool.utils.annotations.label.Requirements; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.openmuc.fnn.steuerbox.scheduling.PreparedSchedule; +import org.openmuc.fnn.steuerbox.scheduling.ScheduleDefinitions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.time.Duration; +import java.time.Instant; +import java.util.Arrays; +import java.util.List; + +import static java.time.Duration.ofMillis; +import static java.time.Duration.ofSeconds; +import static java.time.Instant.now; +import static org.openmuc.fnn.steuerbox.models.Requirement.E01; +import static org.openmuc.fnn.steuerbox.models.Requirement.E02; +import static org.openmuc.fnn.steuerbox.models.Requirement.LN01; +import static org.openmuc.fnn.steuerbox.models.Requirement.S02; +import static org.openmuc.fnn.steuerbox.models.Requirement.S05c; +import static org.openmuc.fnn.steuerbox.models.Requirement.S09; +import static org.openmuc.fnn.steuerbox.models.Requirement.S17; + +/** + * Holds tests related to 61850 schedule execution + */ +public class ScheduleExecutionTest extends AllianderBaseTest { + + private static final Logger log = LoggerFactory.getLogger(ScheduleExecutionTest.class); + + @BeforeAll + public static void setDefaultValuesForReserveSchedules() throws ServiceError, IOException { + dutAccess61850.writeScheduleValues( + dutAccess61850.powerSchedules.getValueAccess().prepareWriting(0, dutAccess61850.powerSchedules.getReserveSchedule())); + dutAccess61850.writeScheduleValues( + dutAccess61850.maxPowerSchedules.getValueAccess().prepareWriting(0, dutAccess61850.maxPowerSchedules.getReserveSchedule())); + dutAccess61850.writeScheduleValues( + dutAccess61850.onOffSchedules.getValueAccess().prepareWriting(false, dutAccess61850.onOffSchedules.getReserveSchedule())); + log.info("Set default values for reserve schedules"); + } + + // TODO: fails + @DisplayName("test_prioritiesPowerSchedules") + @Requirements({ E02, S02, S05c, E01, LN01, S09 }) + @ParameterizedTest(name = " running {0}") + @MethodSource("getPowerValueSchedules") + public void test_prioritiesPowerSchedules(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, InterruptedException, IEC61850MissconfiguredException { + + // do not change the interval, this is demanded by a requirement! + final Duration interval = ofSeconds(1); + + final Instant testExecutionStart = now(); + final Instant schedulesStart = testExecutionStart.plus(ofSeconds(10)); + + //schedule 1: + dutAccess61850.writeAndEnableSchedule( + scheduleConstants.prepareSchedule(Arrays.asList(10, 30, 70, 100, 100, 100), 1, interval, + schedulesStart.plus(interval), 25)); + + // schedule 2: + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(11, 31, 71, 99, 99, 99), 2, interval, + schedulesStart.plus(interval.multipliedBy(5)), 40)); + + // schedule 3: + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(12, 32, 72, 98, 98), 3, interval, + schedulesStart.plus(interval.multipliedBy(9)), 60)); + + //schedule 4, ends after 44s: + dutAccess61850.writeAndEnableSchedule( + scheduleConstants.prepareSchedule(Arrays.asList(13, 33, 73, 97, 97, 97, 97, 97, 97, 97), 4, interval, + schedulesStart.plus(interval.multipliedBy(13)), 70)); + + //schedule 5, ends after 42s + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(70, 70, 70, 70, 70), 5, interval, + schedulesStart.plus(interval.multipliedBy(17)), 100)); + + //schedule 6, + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(90), 6, interval, + schedulesStart.plus(interval.multipliedBy(18)), 120)); + + //schedule 7, + + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(90), 7, interval, + schedulesStart.plus(interval.multipliedBy(20)), 120)); + + //schedule 8: + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(10), 8, interval, + schedulesStart.plus(interval.multipliedBy(22)), 80)); + + //schedule 9 + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(80), 9, interval, + schedulesStart.plus(interval.multipliedBy(23)), 20)); + + //schedule 10 + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(100), 10, interval, + schedulesStart.plus(interval.multipliedBy(24)), 11)); + + log.debug("Test setup took {}", Duration.between(testExecutionStart, now())); + + float sysResValue = dutAccess61850.readConstantValueFromSysResScheduleFromModelNode(scheduleConstants.getValueAccess(), + scheduleConstants.getReserveSchedule()).floatValue(); + + List expectedValues = Arrays.asList(sysResValue, 10f, 30f, 70f, 100f, 11f, 31f, 71f, 99f, 12f, 32f, 72f, + 98f, 13f, 33f, 73f, 97f, 70f, 90f, 70f, 90f, 70f, 10f, 80f, 100f, sysResValue); + + List actualValues = dutAccess61850.monitor(schedulesStart.plus(interval.dividedBy(2)), interval.multipliedBy(26), + interval, scheduleConstants); + + log.info("expected values {}", expectedValues); + log.info("observed values {}", actualValues); + + assertValuesMatch(expectedValues, actualValues, 0.01); + } + + @DisplayName("test_prioritiesOnOffSchedules") + @Requirements({ E02, S02, S05c, E01 }) + @ParameterizedTest(name = " running {0}") + @MethodSource("getOnOffSchedules") + public void test_prioritiesOnOffSchedules(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, IEC61850MissconfiguredException, InterruptedException { + + // do not change the interval, this is demanded by a requirement! + final Duration interval = ofSeconds(1); + + final Instant testExecutionStart = now(); + final Instant schedulesStart = testExecutionStart.plus(ofSeconds(5)); + + boolean sysResValue = dutAccess61850.readConstantValueFromSysResScheduleFromModelNode(scheduleConstants.getValueAccess(), + scheduleConstants.getReserveSchedule()); + + log.debug("Test setup took {}", Duration.between(testExecutionStart, now())); + + boolean s1 = false; + boolean s2 = true; + boolean s3 = false; + boolean s4 = true; + boolean s5 = false; + boolean s6 = true; + boolean s7 = false; + boolean s8 = true; + boolean s9 = false; + boolean s10 = true; + + // setting up schedules with increasing priorities, starting one after the other. exception: schedule 10 (is set up last) + + //schedule 1: + dutAccess61850.writeAndEnableSchedule( + scheduleConstants.prepareSchedule(Arrays.asList(s1, s1, s1), 1, interval, schedulesStart.plus(interval), + 15)); + //schedule 2: + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(s2, s2, s2), 2, interval, + schedulesStart.plus(interval.multipliedBy(2)), 20)); + //schedule 3: + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(s3, s3), 3, interval, + schedulesStart.plus(interval.multipliedBy(3)), 30)); + //schedule 4: + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(s4, s4), 4, interval, + schedulesStart.plus(interval.multipliedBy(4)), 40)); + //schedule 5: + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(s5, s5), 5, interval, + schedulesStart.plus(interval.multipliedBy(5)), 50)); + //schedule 6: + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(s6, s6), 6, interval, + schedulesStart.plus(interval.multipliedBy(6)), 60)); + //schedule 7: + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(s7, s7), 7, interval, + schedulesStart.plus(interval.multipliedBy(7)), 70)); + //schedule 8: + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(s8, s8), 8, interval, + schedulesStart.plus(interval.multipliedBy(8)), 80)); + //schedule 9: + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(s9), 9, interval, + schedulesStart.plus(interval.multipliedBy(9)), 90)); + //schedule 10: starts together with schedule 9 but with lower priority. lasts longer, so is activated after schedule 9 is stopped + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(s10, s10), 10, interval, + schedulesStart.plus(interval.multipliedBy(9)), 11)); + + List expectedValues = Arrays.asList(sysResValue, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, sysResValue); + List actualValues = dutAccess61850.monitor(schedulesStart.plus(interval.dividedBy(2)), interval.multipliedBy(12), + interval, scheduleConstants); + + log.info("expected values {}", expectedValues); + log.info("observed values {}", actualValues); + + assertValuesMatch(expectedValues, actualValues); + } + + // TODO: fails + + /** + * concerning IEC61850 a schedule with the same prio but later start time rules out the one with this prio but + * earlier start time, test for float schedules + */ + @DisplayName("testSamePriosDifferentStartPowerSchedules") + @Description("IEC61850-90-10 ed 2017 Schedule Controller Definitions, section 5.5.3") + @ParameterizedTest(name = " running {0}") + @MethodSource("getPowerValueSchedules") + public void testSamePriosDifferentStartPowerSchedules(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, InterruptedException, IEC61850MissconfiguredException { + + final Instant testExecutionStart = now().plus(ofSeconds(10)); + final Instant schedulesStart = testExecutionStart.plus(ofSeconds(4)); + + //schedule 5, start after 2s, duration 12s, Prio 40 + dutAccess61850.writeAndEnableSchedule( + scheduleConstants.prepareSchedule(Arrays.asList(10, 10, 10, 10, 10, 10), 5, ofSeconds(4), + schedulesStart, 40)); + //schedule 1, start after 4s, duration 4s, Prio 40 + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(70, 100), 1, ofSeconds(4), + schedulesStart.plus(ofSeconds(4)), 40)); + //schedule 2, start after 8s, duration 4s, Prio 40 + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(70, 70), 2, ofSeconds(4), + schedulesStart.plus(ofSeconds(12)), 40)); + //schedule 3, start after 14s, duration 2s, Prio 60 + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(100), 3, ofSeconds(4), + schedulesStart.plus(ofSeconds(24)), 60)); + + float sysResValue = (float) dutAccess61850.readConstantValueFromSysResScheduleFromModelNode( + scheduleConstants.getValueAccess(), scheduleConstants.getReserveSchedule()); + List expectedValues = Arrays.asList(sysResValue, 10f, 70f, 100f, 70f, 70f, 10f, 100f, sysResValue); + + Instant monitoringStart = testExecutionStart.plus(ofSeconds(2)); + List actualValues = dutAccess61850.monitor(monitoringStart, ofSeconds(36), ofSeconds(4), scheduleConstants); + log.info("expected values {}", expectedValues); + log.info("observed values {}", actualValues); + assertValuesMatch(expectedValues, actualValues, 0.01); + } + + /** + * concerning IEC61850 a schedule with the same prio but later start time rules out the one with this prio but + * earlier start time, test for boolean schedules + */ + @DisplayName("testSamePriosDifferentStartOnOffSchedule") + @Description("IEC61850-90-10 ed 2017 Schedule Controller Definitions, section 5.5.3") + @ParameterizedTest(name = " running {0}") + @MethodSource("getOnOffSchedules") + public void testSamePriosDifferentStartOnOffSchedule(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, InterruptedException, IEC61850MissconfiguredException { + + final Instant testExecutionStart = now(); + final Instant schedulesStart = testExecutionStart.plus(ofSeconds(2)); + + //schedule 1, start after 2s, duration 6s, Prio 40 + dutAccess61850.writeAndEnableSchedule( + scheduleConstants.prepareSchedule(Arrays.asList(true, true, true), 1, ofSeconds(2), schedulesStart, + 40)); + //schedule 2, start after 4s, duration 4s, Prio 40 + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule(Arrays.asList(false, false), 2, ofSeconds(2), + schedulesStart.plus(ofSeconds(2)), 40)); + + boolean sysResValue = (boolean) dutAccess61850.readConstantValueFromSysResScheduleFromModelNode( + scheduleConstants.getValueAccess(), scheduleConstants.getReserveSchedule()); + List expectedValues = Arrays.asList(sysResValue, true, false, false, sysResValue); + + Instant monitoringStart = testExecutionStart.plus(ofSeconds(1)); + List actualValues = dutAccess61850.monitor(monitoringStart, ofSeconds(10), ofSeconds(2), scheduleConstants); + log.info("expected values {}", expectedValues); + log.info("observed values {}", actualValues); + assertValuesMatch(expectedValues, actualValues); + } + + /** + * two schedules with the same prio and start: the one with the lower Number in its name rules out the other one, + * e.g. OnOffPow_FSCH04 rules put OnOffPow_FSCH10 IEC61850 does not determine a certain behavior in this case, this + * is just a detail that was fixed for implementation + */ + // TODO: fails + @DisplayName("test_samePrioAndStartFloatSchedule") + @Requirements({ S17 }) + @ParameterizedTest(name = " running {0}") + @MethodSource("getPowerValueSchedules") + public void test_samePrioAndStartFloatSchedule(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, IEC61850MissconfiguredException, InterruptedException { + + float sysResValue = (float) dutAccess61850.readConstantValueFromSysResScheduleFromModelNode( + scheduleConstants.getValueAccess(), scheduleConstants.getReserveSchedule()); + + Instant start = Instant.now(); + PreparedSchedule schedule1 = scheduleConstants.prepareSchedule(Arrays.asList(70f, 70f), 1, ofSeconds(3), + start.plus(ofSeconds(3)), 40); + PreparedSchedule schedule2 = scheduleConstants.prepareSchedule(Arrays.asList(100f, 100f, 100f), 2, ofSeconds(3), + start.plus(ofSeconds(3)), 40); + + dutAccess61850.writeAndEnableSchedule(schedule1); + dutAccess61850.writeAndEnableSchedule(schedule2); + + List expectedValues = Arrays.asList(sysResValue, 70f, 70f, 100f, sysResValue); + List actualValues = dutAccess61850.monitor(start.plus(ofMillis(1000)), ofSeconds(15), ofSeconds(3), + scheduleConstants); + assertValuesMatch(expectedValues, actualValues, 0.01); + } + + /** + * two schedules with the same prio and start: the one with the lower Number in its name rules out the other one, + * e.g. OnOffPow_FSCH04 rules put OnOffPow_FSCH10 IEC61850 does not determine a certain behavior in this case, this + * is just a detail that was fixed for implementation + */ + @DisplayName("test_samePrioAndStartOnOffSchedule") + @Requirements({ S17 }) + @ParameterizedTest(name = " running {0}") + @MethodSource("getOnOffSchedules") + public void test_samePrioAndStartOnOffSchedule(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, IEC61850MissconfiguredException, InterruptedException { + boolean sysResValue = dutAccess61850.readConstantValueFromSysResScheduleFromModelNode(scheduleConstants.getValueAccess(), + scheduleConstants.getReserveSchedule()); + + Instant start = Instant.now(); + PreparedSchedule schedule1 = scheduleConstants.prepareSchedule(Arrays.asList(true, true), 1, ofSeconds(3), + start.plus(ofSeconds(3)), 40); + PreparedSchedule schedule2 = scheduleConstants.prepareSchedule(Arrays.asList(false, false, false), 2, + ofSeconds(3), start.plus(ofSeconds(3)), 40); + + dutAccess61850.writeAndEnableSchedule(schedule1); + dutAccess61850.writeAndEnableSchedule(schedule2); + + List expectedValues = Arrays.asList(sysResValue, true, true, false, sysResValue); + List actualValues = dutAccess61850.monitor(start.plus(ofMillis(1000)), ofSeconds(15), ofSeconds(3), + scheduleConstants); + assertValuesMatch(expectedValues, actualValues); + } +} diff --git a/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/ScheduleNodeTests.java b/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/ScheduleNodeTests.java new file mode 100644 index 0000000..46d8641 --- /dev/null +++ b/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/ScheduleNodeTests.java @@ -0,0 +1,634 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.openmuc.fnn.steuerbox; + +import com.beanit.iec61850bean.BasicDataAttribute; +import com.beanit.iec61850bean.Fc; +import com.beanit.iec61850bean.FcModelNode; +import com.beanit.iec61850bean.ServiceError; +import de.fhg.ise.testtool.utils.annotations.label.Requirements; +import jdk.jfr.Description; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.function.Executable; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.openmuc.fnn.steuerbox.scheduling.PreparedSchedule; +import org.openmuc.fnn.steuerbox.scheduling.ScheduleDefinitions; +import org.openmuc.fnn.steuerbox.scheduling.ScheduleEnablingErrorKind; +import org.openmuc.fnn.steuerbox.scheduling.ScheduleState; +import org.openmuc.fnn.steuerbox.scheduling.ScheduleType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.time.Duration; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import static java.time.Duration.ofSeconds; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.openmuc.fnn.steuerbox.AllianderBaseTest.MandatoryOnCondition.ifPresent; +import static org.openmuc.fnn.steuerbox.models.Requirement.LN01; +import static org.openmuc.fnn.steuerbox.models.Requirement.LN03; +import static org.openmuc.fnn.steuerbox.models.Requirement.S08; +import static org.openmuc.fnn.steuerbox.models.Requirement.S13; +import static org.openmuc.fnn.steuerbox.models.Requirement.S14; +import static org.openmuc.fnn.steuerbox.models.Requirement.S15; + +/** + * Holds tests related to 61850 schedule node behaviour + */ +public class ScheduleNodeTests extends AllianderBaseTest { + + private static final Logger log = LoggerFactory.getLogger(ScheduleNodeTests.class); + + @DisplayName("hasRequiredSubNodes") + @Requirements(value = { LN03, LN01 }) + @Description("Test if the scheduler has the required nodes with correct types as defined in IEC 61850-90-10:2017, table 7 (page 26)") + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void hasRequiredSubNodes(ScheduleDefinitions scheduleConstants) { + + // relevant part of the table is the "non-derived-statistics" (nds) column as there are no derived-statistic + + for (String scheduleName : scheduleConstants.getAllScheduleNames()) { + log.info("Testing Schedule {}", scheduleName); + + // Collection of Optional nodes + Map optional = new HashMap<>(); + + // Collection of mandatory nodes that must be present + Map mandatory = new HashMap<>(); + + // Collection of 'AtMostOne' nodes + Map atMostOne = new HashMap<>(); + + //in IEC61850 90-10_2017_end.pdf , table 6, PresConds: MmultiF(), presence under condition + Collection mMultiF = new LinkedList<>(); + + // Collection of Omulti elements (one or several nodes may be present) + Map oMulti = new HashMap<>(); + + /** + * Descriptions (DC) + */ + optional.put("NamPlt", Fc.DC); + + /** + * Status information (ST) + */ + mandatory.put("SchdSt", Fc.ST); + optional.put("SchdEntr", Fc.ST); + atMostOne.put("ValINS", Fc.ST); + atMostOne.put("ValSPS", Fc.ST); + atMostOne.put("ValENS", Fc.ST); + optional.put("ActStrTm", Fc.ST); + mandatory.put("NxtStrTm", Fc.ST); + mandatory.put("SchdEnaErr", Fc.ST); + mandatory.put("Beh", Fc.ST); + optional.put("Health", Fc.ST); + optional.put("Mir", Fc.ST); + mandatory.put("EnaReq", Fc.ST); + mandatory.put("DsaReq", Fc.ST); + + /** + * Measured and metered values (MX) + */ + atMostOne.put("ValMV", Fc.MX); + + /** + * Controls (CO) + */ + optional.put("Mod", Fc.CO); + + /** + * Settings (SP) + */ + optional.put("SchdPrio", Fc.SP); + mandatory.put("NumEntr", Fc.SP); + mandatory.put("SchdIntv", Fc.SP); + //at least one element needs to be present if ValMV is present, otherwise forbidden + mMultiF.add(ifPresent("ValMV").thenMandatory("ValASG001", Fc.SP)); + //at least one element needs to be present if ValINS is present, otherwise forbidden + mMultiF.add(ifPresent("ValINS").thenMandatory("ValING001", Fc.SP)); + //at least one element needs to be present if ValISPS is present, otherwise forbidden + mMultiF.add(ifPresent("ValSPS").thenMandatory("ValSPG001", Fc.SP)); + //at least one element needs to be present if ValENS is present, otherwise forbidden + mMultiF.add(ifPresent("ValENS").thenMandatory("ValENG001", Fc.SP)); + oMulti.put("StrTm", Fc.SP); + optional.put("EvTrg", Fc.SP); + //needs to be present if EvTrg is present, otherwise optional + mMultiF.add(ifPresent("EvTrg").thenMandatory("InSyn", Fc.SP)); + mandatory.put("SchdReuse", Fc.SP); + oMulti.put("InRef", Fc.SP); + + Collection violations = new LinkedList<>(); + violations.addAll(testOptionalNodes(optional, scheduleName)); + violations.addAll(testMandatoryNodes(mandatory, scheduleName)); + violations.addAll(testAtMostOnceNodes(atMostOne, scheduleName)); + violations.addAll(testMMultiF(mMultiF, scheduleName)); + violations.addAll(testOMulti(oMulti, scheduleName)); + + String delimiter = "\n - "; + String violationsList = delimiter + String.join(delimiter, violations); + + assertTrue(violations.isEmpty(), + "Found violations of node requirements for schedule " + scheduleName + ": " + violationsList); + + } + } + + @DisplayName("SchdEntrIsUpdatedWithCurrentlyRunningScheduleIfPresent") + @Requirements(value = LN03) + @Description("Test that SchdEntr is present and is updated by the currently running schedule as described in IEC 61850-90-10:2017, table 7 (page 26)") + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void SchdEntrIsUpdatedWithCurrentlyRunningScheduleIfPresent(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, InterruptedException { + // test if SchdEntr is available + + // test all 10 schedules of one scheduleConstant one by one + for (String scheduleName : scheduleConstants.getAllScheduleNames()) { + + //disable the schedule and display the name + dutAccess61850.disableSchedule(scheduleName); + log.info(scheduleName); + + //check if optional SchEntr is present + boolean isPresent = dutAccess61850.nodeExists(scheduleName + ".SchdEntr"); + if (isPresent) { + + //display the state of the schedule + log.info("State of the schedule: " + dutAccess61850.getScheduleState(scheduleName).toString()); + + //if state of the schedule is not RUNNING SchdEntr might be 0 + if (dutAccess61850.getScheduleState(scheduleName) != ScheduleState.RUNNING) { + String notRunningSchdEntrValueAsString = dutAccess61850.getNodeEntryasString(scheduleName, "SchdEntr", + "stVal"); + Assertions.assertEquals("0", notRunningSchdEntrValueAsString, + "SchdEntry is not 0 although schedule is not running"); + } + + //now write a schedule and check if SchdEntry is not 0 + PreparedSchedule preparedSchedule = scheduleConstants.prepareSchedule( + scheduleConstants.getDefaultValues(1), scheduleConstants.getScheduleNumber(scheduleName), + ofSeconds(8), Instant.now().plusMillis(500), 20); + dutAccess61850.writeAndEnableSchedule(preparedSchedule); + Thread.sleep(4000); + String runningSchdEntrValueAsString = dutAccess61850.getNodeEntryasString(scheduleName, "SchdEntr", "stVal"); + Assertions.assertNotEquals("0", runningSchdEntrValueAsString, + "SchdEntry is 0 although schedule is running"); + } + else { + log.info("Optional node SchdEntr not found, skipping test"); + } + } + } + + /** + * INS = Integer status; we do not have integer schedules thus we ValINS should not be present Test that ValINS is + * not present (because it is not relevant for our use case thus we cannot/do not want to test the expected + * behaviour). IEC 61850-90-10:2017, table 7 (page 26) + **/ + @DisplayName("ValINSIsUpdatedWithCurrentlyRunningScheduleIfPresent") + @Requirements(value = LN03) + @Description("Test that ValINS is not available") + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void ValINSIsUpdatedWithCurrentlyRunningScheduleIfPresent(ScheduleDefinitions scheduleConstants) { + testOptionalNodeNotPresent(scheduleConstants, "ValINS"); + } + + /** + * SPS = single point status, we assume that it is the readout value of boolean schedules Test that ValSPS is + * present when having a boolean schedule, in this case it should behave like defined in IEC 61850-90-10:2017, table + * 7 (page 26) if we don't have a boolean schedule we have a float schedule; in this case test that ValMV is present + * and that it behaves like defined in the same table + **/ + @DisplayName("ValSpsOrValMvIsUpdatedWithCurrentlyRunningSchedule") + @Requirements(value = LN03) + @Description("Test ValSPS/ValMv behaves as defined in IEC 61850-90-10:2017, table 7 (page 26) ") + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void ValSpsOrValMvIsUpdatedWithCurrentlyRunningSchedule(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, InterruptedException { + + for (String scheduleName : scheduleConstants.getAllScheduleNames()) { + final Duration interval = ofSeconds(1); + final int anyPriorityHigherThanReserveSchedules = 20; + final PreparedSchedule schedule = scheduleConstants.prepareSchedule(scheduleConstants.getDefaultValues(1), + scheduleConstants.getScheduleNumber(scheduleName), interval, Instant.now().plusMillis(500), + anyPriorityHigherThanReserveSchedules); + + // initialize: enable schedule, then disable it again + dutAccess61850.writeAndEnableSchedule(schedule); + Thread.sleep(1500); + dutAccess61850.disableSchedules(scheduleName); + + final String spsValue = "ValSPS"; + final String mvValue = "ValMV"; + final String shouldExist; + final String shouldNotExist; + final List expectedValues = new LinkedList<>(scheduleConstants.getDefaultValues(1)); + + if (ScheduleType.SPG.equals(scheduleConstants.getScheduleType())) { + shouldExist = spsValue; + shouldNotExist = mvValue; + } + else { + shouldExist = mvValue; + shouldNotExist = spsValue; + } + + assertTrue(dutAccess61850.nodeExists(scheduleName + "." + shouldExist)); + testOptionalNodeNotPresent(scheduleConstants, shouldNotExist); + Assertions.assertEquals("INVALID", dutAccess61850.getNodeEntryasString(scheduleName, shouldExist, "q")); + + final Instant startSecondSchedule = Instant.now().plus(interval).truncatedTo(ChronoUnit.SECONDS); + final Instant startMonitoring = startSecondSchedule.plus(interval.dividedBy(2)); + final PreparedSchedule preparedSchedule = scheduleConstants.prepareSchedule( + scheduleConstants.getDefaultValues(1), scheduleConstants.getScheduleNumber(scheduleName), interval, + startSecondSchedule, anyPriorityHigherThanReserveSchedules); + dutAccess61850.writeAndEnableSchedule(preparedSchedule); + List actualValues = dutAccess61850.monitor(startMonitoring, interval, interval, scheduleConstants); + + assertUntypedValuesMatch(expectedValues, actualValues); + + log.debug("SUCCESSfully tested {}", scheduleName); + } + } + + /** + * ENS = enumerated status, we do not have a schedule with enumerated value thus we can not have the node ValENS + * Test that ValENS is not present (because it is not relevant for our use case thus we cannot/do not want to test + * the expected behaviour). IEC 61850-90-10:2017, table 7 (page 26) + **/ + @DisplayName("ValEnsIsUpdatedWithCurrentlyRunningScheduleIfPresent") + @Requirements(value = LN03) + @Description("Test that ValENS is not available") + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void ValEnsIsUpdatedWithCurrentlyRunningScheduleIfPresent(ScheduleDefinitions scheduleConstants) { + testOptionalNodeNotPresent(scheduleConstants, "ValENS"); + } + + @DisplayName("ActStrTmIsUpdatedProperly") + @Requirements(value = LN03) + @Description("Test if optional node ActStrTm is present it should behave like defined in IEC 61850-90-10:2017, table 7 (page 26)") + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void ActStrTmIsUpdatedProperly(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, InterruptedException { + for (String scheduleName : scheduleConstants.getAllScheduleNames()) { + if (dutAccess61850.nodeExists(scheduleName + ".ActStrTm")) { + PreparedSchedule schedule = scheduleConstants.prepareSchedule(scheduleConstants.getDefaultValues(1), + scheduleConstants.getScheduleNumber(scheduleName), ofSeconds(2), Instant.now().plusMillis(500), + 20); + + //initial status + dutAccess61850.writeAndEnableSchedule(schedule); + Thread.sleep(1500); + dutAccess61850.disableSchedules(scheduleName); + + //if schedule is disabled, quality of ActStrTm should be invalid + Assertions.assertEquals("INVALID", dutAccess61850.getNodeEntryasString(scheduleName, "ActStrTm", "q")); + + //if schedule is active, ActStrTm.stVal should have the timestamp the active schedule started + Instant timestamp = Instant.now().plusSeconds(2).truncatedTo(ChronoUnit.SECONDS); + PreparedSchedule preparedSchedule = scheduleConstants.prepareSchedule( + scheduleConstants.getDefaultValues(1), scheduleConstants.getScheduleNumber(scheduleName), + ofSeconds(4), timestamp, 20); + dutAccess61850.writeAndEnableSchedule(preparedSchedule); + Thread.sleep(3000); + Assertions.assertEquals(timestamp.toString(), + dutAccess61850.getNodeEntryasString(scheduleName, "ActStrTm", "stVal")); + } + } + } + + @DisplayName("NxtStrTmIsUpdatedProperly") + @Requirements(value = LN03) + @Description("Test if NxtStrTm is mandatory and should behave like defined in IEC 61850-90-10:2017, table 7 (page 26)") + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void NxtStrTmIsUpdatedProperly(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, InterruptedException { + for (String scheduleName : scheduleConstants.getAllScheduleNames()) { + // disable the schedule such that there is no planned execution + dutAccess61850.disableSchedules(scheduleName); + + // no planned execution -> NxtStrTm quality should be "INVALID" + Assertions.assertEquals("INVALID", dutAccess61850.getNodeEntryasString(scheduleName, "NxtStrTm", "q")); + + // create a schedule in future such that we have a planned execution + Instant timestamp = Instant.now().plusSeconds(10).truncatedTo(ChronoUnit.SECONDS); + PreparedSchedule preparedSchedule = scheduleConstants.prepareSchedule(scheduleConstants.getDefaultValues(1), + scheduleConstants.getScheduleNumber(scheduleName), ofSeconds(2), timestamp, 200); + dutAccess61850.writeAndEnableSchedule(preparedSchedule); + + //if schedule is active, ActStrTm.stVal should have the timestamp the active schedule started and NxtStrTm quality should be "GOOD" + Assertions.assertEquals(timestamp.toString(), dutAccess61850.getNodeEntryasString(scheduleName, "NxtStrTm", "stVal")); + Assertions.assertEquals("GOOD", dutAccess61850.getNodeEntryasString(scheduleName, "NxtStrTm", "q")); + } + } + + @DisplayName("EnaReq_operating") + @Requirements(value = LN03) + @Description("Test that EnaReq holds a reasonable error code after provoking errors whilst enabling schedules. " + + "See IEC 61850-90-10:2017, table 7 (page 26)") + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void EnaReq_operating(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, InterruptedException { + for (String scheduleName : scheduleConstants.getAllScheduleNames()) { + + // intial: schedule has valid values set + PreparedSchedule preparedSchedule = scheduleConstants.prepareSchedule(scheduleConstants.getDefaultValues(1), + scheduleConstants.getScheduleNumber(scheduleName), ofSeconds(1), Instant.now().plusSeconds(100), + 100); + dutAccess61850.writeAndEnableSchedule(preparedSchedule); + dutAccess61850.disableSchedule(scheduleName); + Thread.sleep(2000); + // test if intial state is correct: should be in inital state + Assertions.assertEquals(ScheduleState.NOT_READY, dutAccess61850.getScheduleState(scheduleName)); + + // test 1: operating with value false should be possible the status should ignore that + BasicDataAttribute enableOp = dutAccess61850.findAndAssignValue(scheduleName + ".EnaReq.Oper.ctlVal", Fc.CO, "false"); + dutAccess61850.operate((FcModelNode) enableOp.getParent().getParent()); + // still same state: + Assertions.assertEquals(ScheduleState.NOT_READY, dutAccess61850.getScheduleState(scheduleName)); + + // test2: when operating with value true on .EnaReq.Oper.ctlVal and when integrity check passes, schedule should be in ready state + enableOp = dutAccess61850.findAndAssignValue(scheduleName + ".EnaReq.Oper.ctlVal", Fc.CO, "true"); + dutAccess61850.operate((FcModelNode) enableOp.getParent().getParent()); + Assertions.assertEquals(ScheduleState.READY, dutAccess61850.getScheduleState(scheduleName)); + } + } + + @DisplayName("DsaReq_operating") + @Requirements(value = LN03) + @Description("Test that DsaReq behaves as described in IEC 61850-90-10:2017, table 7 (page 26)") + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void DsaReq_operating(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, InterruptedException { + + for (String scheduleName : scheduleConstants.getAllScheduleNames()) { + + // intial: schedule has valid values set + PreparedSchedule initialSchedule = scheduleConstants.prepareSchedule(scheduleConstants.getDefaultValues(1), + scheduleConstants.getScheduleNumber(scheduleName), ofSeconds(1), Instant.now().plusSeconds(2), 100); + dutAccess61850.writeAndEnableSchedule(initialSchedule); + dutAccess61850.disableSchedule(scheduleName); + Thread.sleep(2000); + // test if initial state is correct: should be in NOT_READY + Assertions.assertEquals(ScheduleState.NOT_READY, dutAccess61850.getScheduleState(scheduleName)); + + // test if operating with value false on DsaReq is ignored + BasicDataAttribute disableOp = dutAccess61850.findAndAssignValue(scheduleName + ".DsaReq.Oper.ctlVal", Fc.CO, "false"); + dutAccess61850.operate((FcModelNode) disableOp.getParent().getParent()); + Assertions.assertEquals(ScheduleState.NOT_READY, dutAccess61850.getScheduleState(scheduleName)); + + // test, if in disabled state and operating DsaReq with true, state ist still NOT_READY + disableOp = dutAccess61850.findAndAssignValue(scheduleName + ".DsaReq.Oper.ctlVal", Fc.CO, "true"); + dutAccess61850.operate((FcModelNode) disableOp.getParent().getParent()); + Assertions.assertEquals(ScheduleState.NOT_READY, dutAccess61850.getScheduleState(scheduleName)); + + // test, if in enabled state and operating DsaReq with true, state turns into NOT_READY + PreparedSchedule updatedSchedule = scheduleConstants.prepareSchedule(scheduleConstants.getDefaultValues(1), + scheduleConstants.getScheduleNumber(scheduleName), ofSeconds(5), Instant.now().plusSeconds(1), 100); + dutAccess61850.writeAndEnableSchedule(updatedSchedule); + disableOp = dutAccess61850.findAndAssignValue(scheduleName + ".DsaReq.Oper.ctlVal", Fc.CO, "true"); + dutAccess61850.operate((FcModelNode) disableOp.getParent().getParent()); + Thread.sleep(2000); + Assertions.assertEquals(ScheduleState.NOT_READY, dutAccess61850.getScheduleState(scheduleName)); + } + } + + @DisplayName("schdEnaErr_HoldsMISSING_VALID_NUMENTRcorrectly") + @Requirements(value = { LN03, S08 }) + @Description("Test that SchdEnaErr holds MISSING_VALID_NUMENTR when writing invalid value to NumEntr.setVal (see IEC 61850-90-10:2017, table 7 (page 26))") + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void schdEnaErr_HoldsMISSING_VALID_NUMENTRcorrectly(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, InterruptedException { + for (String scheduleName : scheduleConstants.getAllScheduleNames()) { + + // intial: valid values in NumEntr, Schdintv, SchdValues and test that SchdEnaErr shows no error kind + PreparedSchedule schedule = scheduleConstants.prepareSchedule(scheduleConstants.getDefaultValues(1), + scheduleConstants.getScheduleNumber(scheduleName), ofSeconds(1), Instant.now().plusSeconds(2), 100); + dutAccess61850.writeAndEnableSchedule(schedule); + Thread.sleep(200); + Assertions.assertEquals(ScheduleEnablingErrorKind.NONE, dutAccess61850.getSchdEnaErr(scheduleName)); + dutAccess61850.disableSchedule(scheduleName); + + // provoke error MISSING_VALID_NUMENTR by setting NumEntr = -1 + dutAccess61850.setDataValues(scheduleName + ".NumEntr.setVal", null, "-1"); + BasicDataAttribute disableOp1 = dutAccess61850.findAndAssignValue(scheduleName + ".DsaReq.Oper.ctlVal", Fc.CO, + "false"); + BasicDataAttribute enableOp1 = dutAccess61850.findAndAssignValue(scheduleName + ".EnaReq.Oper.ctlVal", Fc.CO, "true"); + // operating will throw, we ignore that error + dutAccess61850.operate((FcModelNode) disableOp1.getParent().getParent()); + Executable executable1 = () -> { + dutAccess61850.operate((FcModelNode) enableOp1.getParent().getParent()); + }; + Assertions.assertThrows(ServiceError.class, executable1); + Assertions.assertEquals(ScheduleEnablingErrorKind.MISSING_VALID_NUMENTR, dutAccess61850.getSchdEnaErr(scheduleName)); + } + } + + @DisplayName("SchdEnaErrHoldsMISSING_VALID_SCHDINTVcorrectly") + @Requirements(value = { LN03, S08 }) + @Description("Test that SchdEnaErr holds MISSING_VALID_SCHDINTV when writing invalid value to SchdIntv.setVal (see IEC 61850-90-10:2017, table 7 (page 26))") + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void SchdEnaErrHoldsMISSING_VALID_SCHDINTVcorrectly(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, InterruptedException { + for (String scheduleName : scheduleConstants.getAllScheduleNames()) { + + // intial: valid values in NumEntr, Schdintv, SchdValues and test that SchdEnaErr shows no error kind + PreparedSchedule schedule = scheduleConstants.prepareSchedule(scheduleConstants.getDefaultValues(1), + scheduleConstants.getScheduleNumber(scheduleName), ofSeconds(1), Instant.now().plusSeconds(2), 100); + dutAccess61850.writeAndEnableSchedule(schedule); + Thread.sleep(200); + Assertions.assertEquals(ScheduleEnablingErrorKind.NONE, dutAccess61850.getSchdEnaErr(scheduleName)); + dutAccess61850.disableSchedule(scheduleName); + + // provoke error MISSING_VALID_SCHDINTV by setting SchdIntv = -1 + dutAccess61850.setDataValues(scheduleName + ".SchdIntv.setVal", null, "-1"); + BasicDataAttribute disableOp1 = dutAccess61850.findAndAssignValue(scheduleName + ".DsaReq.Oper.ctlVal", Fc.CO, + "false"); + BasicDataAttribute enableOp1 = dutAccess61850.findAndAssignValue(scheduleName + ".EnaReq.Oper.ctlVal", Fc.CO, "true"); + // operating will throw, we ignore that error + dutAccess61850.operate((FcModelNode) disableOp1.getParent().getParent()); + Executable executable1 = () -> { + dutAccess61850.operate((FcModelNode) enableOp1.getParent().getParent()); + }; + Assertions.assertThrows(ServiceError.class, executable1); + Assertions.assertEquals(ScheduleEnablingErrorKind.MISSING_VALID_SCHDINTV, dutAccess61850.getSchdEnaErr(scheduleName)); + } + } + + /** + * This test exists only for float values, there is no possibility to create such a test for boolean schedules (as + * there are no invalid values for boolean) + */ + @DisplayName("SchdEnaErrHoldsMISSING_VALID_SCHEDULE_VALUEScorrectly") + @Requirements(value = { LN03, S08 }) + @Description("Tests that SchdEnaErr holds the error code MISSING_VALID_SCHEDULE_VALUE when invalid values are written, for (Max)Power Schedules (see IEC 61850-90-10:2017, table 7 (page 26))") + @ParameterizedTest(name = " running {0}") + @MethodSource("getPowerValueSchedules") + void SchdEnaErrHoldsMISSING_VALID_SCHEDULE_VALUEScorrectly(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, InterruptedException { + for (String scheduleName : scheduleConstants.getAllScheduleNames()) { + + // intial: valid values in SchdValues, test that it shows no error kind + int scheduleNumber = scheduleConstants.getScheduleNumber(scheduleName); + PreparedSchedule schedule = scheduleConstants.prepareSchedule(scheduleConstants.getDefaultValues(1), + scheduleNumber, ofSeconds(1), Instant.now().plusSeconds(2), 100); + dutAccess61850.writeAndEnableSchedule(schedule); + Thread.sleep(200); + Assertions.assertEquals(ScheduleEnablingErrorKind.NONE, dutAccess61850.getSchdEnaErr(scheduleName)); + dutAccess61850.disableSchedule(scheduleName); + + //Provoke MISSING_VALID_SCHEDULE_VALUES error kind by writing invalid values + Executable excecutable = () -> { + dutAccess61850.writeAndEnableSchedule(scheduleConstants.prepareSchedule( + Arrays.asList(Float.NaN, Float.MAX_VALUE, Float.POSITIVE_INFINITY), scheduleNumber, + ofSeconds(2), Instant.now().plusSeconds(1), 100)); + }; + Assertions.assertThrows(ServiceError.class, excecutable); + Assertions.assertEquals(ScheduleEnablingErrorKind.MISSING_VALID_SCHEDULE_VALUES, + dutAccess61850.getSchdEnaErr(scheduleName)); + } + } + + @DisplayName("NumEntr_range") + @Requirements(value = LN03) + @Description( + "Test that NumEntr can only be set to values > 0 and values <= the number of instantiated Val[ASG|ING|SPG|ENG]'s " + + "as stated in IEC 61850-90-10:2017, table 7 (page 26)") + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + void NumEntr_range(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException, InterruptedException { + + String scheduleName = scheduleConstants.getScheduleName(1); + // intial: valid values in NumEntr + PreparedSchedule schedule = scheduleConstants.prepareSchedule(scheduleConstants.getDefaultValues(1), + scheduleConstants.getScheduleNumber(scheduleName), ofSeconds(1), Instant.now().plusSeconds(2), 100); + dutAccess61850.writeAndEnableSchedule(schedule); + Thread.sleep(200); + dutAccess61850.disableSchedule(scheduleName); + + //test: 0 can not bet set to NumEtr + dutAccess61850.setDataValues(scheduleName + ".NumEntr.setVal", null, "0"); + BasicDataAttribute disableOp = dutAccess61850.findAndAssignValue(scheduleName + ".DsaReq.Oper.ctlVal", Fc.CO, "false"); + BasicDataAttribute enableOp = dutAccess61850.findAndAssignValue(scheduleName + ".EnaReq.Oper.ctlVal", Fc.CO, "true"); + dutAccess61850.operate((FcModelNode) disableOp.getParent().getParent()); + Executable executable = () -> dutAccess61850.operate((FcModelNode) enableOp.getParent().getParent()); + Assertions.assertThrows(ServiceError.class, executable); + + //test: -1 can not bet set to NumEtr + dutAccess61850.setDataValues(scheduleName + ".NumEntr.setVal", null, "-1"); + disableOp = dutAccess61850.findAndAssignValue(scheduleName + ".DsaReq.Oper.ctlVal", Fc.CO, "false"); + BasicDataAttribute enableOp2 = dutAccess61850.findAndAssignValue(scheduleName + ".EnaReq.Oper.ctlVal", Fc.CO, "true"); + dutAccess61850.operate((FcModelNode) disableOp.getParent().getParent()); + Executable executable2 = () -> dutAccess61850.operate((FcModelNode) enableOp2.getParent().getParent()); + Assertions.assertThrows(ServiceError.class, executable2); + + //test: 200 can not bet set to NumEtr + dutAccess61850.setDataValues(scheduleName + ".NumEntr.setVal", null, "200"); + disableOp = dutAccess61850.findAndAssignValue(scheduleName + ".DsaReq.Oper.ctlVal", Fc.CO, "false"); + BasicDataAttribute enableOp3 = dutAccess61850.findAndAssignValue(scheduleName + ".EnaReq.Oper.ctlVal", Fc.CO, "true"); + dutAccess61850.operate((FcModelNode) disableOp.getParent().getParent()); + Executable executable3 = () -> dutAccess61850.operate((FcModelNode) enableOp3.getParent().getParent()); + Assertions.assertThrows(ServiceError.class, executable3); + + } + + @DisplayName("reserveSchedulesCannotBeDeactivated") + @Requirements(S13) + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + public void reserveSchedulesCannotBeDeactivated(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException { + + disableAllRunningSchedules(); + log.debug("Disabled all running schedules"); + + // if all other schedules are deactivated, the reserve schedule should be running + final String reserveSchedule = scheduleConstants.getReserveSchedule(); + Assertions.assertEquals(ScheduleState.RUNNING, dutAccess61850.getScheduleState(reserveSchedule)); + try { + dutAccess61850.disableSchedules(reserveSchedule); + } catch (ServiceError e) { + // an access violation may be thrown here, this indicates the schedule cannot be deactivated + } + Assertions.assertEquals(ScheduleState.RUNNING, dutAccess61850.getScheduleState(reserveSchedule)); + } + + @DisplayName("reserveSchedulesHaveFixedPriority") + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + @Requirements(S14) + public void reserveSchedulesHaveFixedPriority(ScheduleDefinitions scheduleConstants) + throws ServiceError, IOException { + final String reserveSchedule = scheduleConstants.getReserveSchedule(); + try { + dutAccess61850.setSchedulePrio(reserveSchedule, 100); + } catch (ServiceError e) { + // an access violation may be thrown here, this indicates the prio cannot be changed + } + Assertions.assertEquals(10, dutAccess61850.readSchedulePrio(reserveSchedule)); + } + + @DisplayName("reserveSchedulesHaveFixedStart") + @ParameterizedTest(name = " running {0}") + @MethodSource("getAllSchedules") + @Requirements(S15) + public void reserveSchedulesHaveFixedStart(ScheduleDefinitions scheduleConstants) throws ServiceError, IOException { + final String reserveSchedule = scheduleConstants.getReserveSchedule(); + Assertions.assertEquals(Instant.ofEpochSecond(1), dutAccess61850.getScheduleStart(reserveSchedule)); + try { + dutAccess61850.setScheduleStart(reserveSchedule, Instant.now()); + } catch (ServiceError e) { + // an access violation may be thrown here, this indicates the start date cannot be changed + } + Assertions.assertEquals(Instant.ofEpochSecond(1), dutAccess61850.getScheduleStart(reserveSchedule)); + } + + /** + * ############################### UTILITIES AND HELPERS ################################## + */ + + /** + * Tests that a node is not present in the model. This is to facilitate testing as we can simply leave out nodes + * that are not relevant for our use case. + */ + private void testOptionalNodeNotPresent(ScheduleDefinitions scheduleConstants, String nodeName) { + scheduleConstants.getAllScheduleNames().forEach(schedule -> { + org.junit.jupiter.api.Assertions.assertFalse(dutAccess61850.nodeExists(schedule + "." + nodeName), + "Optional node " + nodeName + + " not relevant for this use case, so it should be left out (behavior cannot be tested)."); + }); + } +} diff --git a/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/UtilityTest.java b/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/UtilityTest.java new file mode 100644 index 0000000..2a76ac2 --- /dev/null +++ b/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/UtilityTest.java @@ -0,0 +1,129 @@ +/* + * Copyright 2023 Fraunhofer ISE + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.openmuc.fnn.steuerbox; + +import com.beanit.iec61850bean.ServiceError; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.function.Executable; +import org.openmuc.fnn.steuerbox.models.AllianderDER; +import org.openmuc.fnn.steuerbox.mqtt.Command; +import org.openmuc.fnn.steuerbox.mqtt.Schedule; +import org.openmuc.fnn.steuerbox.mqtt.Schedule.ScheduleEntry; +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; +import java.time.Duration; +import java.time.Instant; +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.openmuc.fnn.steuerbox.AllianderTests.extractNumberFromLastNodeName; +import static org.openmuc.fnn.steuerbox.mqtt.ParsingUtil.scheduleToJson; + +@Tag("unit") +public class UtilityTest { + + @Test + void numberExtractionWorks() { + assertEquals(extractNumberFromLastNodeName("device4.schedule76.whatever.in.between.number123").get().intValue(), + 123); + } + + @Test + void numberExtractionDoesNotThrow() { + Assertions.assertTrue(extractNumberFromLastNodeName("").isEmpty()); + Assertions.assertTrue(extractNumberFromLastNodeName("nonumberinhere").isEmpty()); + } + + @Test + public void testReserveScheduleWorksAsExpected() throws ServiceError, IOException, IEC61850MissconfiguredException { + float expectedValue = 123f; + + AllianderDER dut = AllianderDER.getWithDefaultSettings(); + String reserveScheduleName = dut.powerSchedules.getReserveSchedule(); + // set number of values to 1 + dut.setDataValues(reserveScheduleName + ".NumEntr.setVal", null, "1"); + // write expected values + String valueBasicDataAttribute = String.format("%s.ValASG001.setMag.f", reserveScheduleName); + dut.setDataValues(valueBasicDataAttribute, null, Float.toString(expectedValue)); + + assertEquals(expectedValue, + (float) dut.readConstantValueFromSysResScheduleFromModelNode(dut.powerSchedules.getValueAccess(), + reserveScheduleName)); + } + + @Test + void test_ReadingReserveScheduleFails_When2ComposedFromMoreThan1Element() throws ServiceError, IOException { + + float firstValue = 10f; + float secondValue = 20f; + + AllianderDER dut = AllianderDER.getWithDefaultSettings(); + String reserveScheduleName = dut.powerSchedules.getReserveSchedule(); + + //write two values in reserveSchedule + String valueBasicDataAttribute1 = String.format("%s.ValASG001.setMag.f", reserveScheduleName); + String valueBasicDataAttribute2 = String.format("%s.ValASG002.setMag.f", reserveScheduleName); + + dut.setDataValues(valueBasicDataAttribute1, null, Float.toString(firstValue)); + dut.setDataValues(valueBasicDataAttribute2, null, Float.toString(secondValue)); + // set number of values (NumEntr) to 2 + dut.setDataValues(reserveScheduleName + ".NumEntr.setVal", null, "2"); + + Executable executableThatShouldThrow = () -> dut.readConstantValueFromSysResScheduleFromModelNode( + dut.powerSchedules.getValueAccess(), reserveScheduleName); + IEC61850MissconfiguredException caughtException = Assertions.assertThrows(IEC61850MissconfiguredException.class, + executableThatShouldThrow); + assertEquals( + "Expected exactly 1 power value in system reserve Schedule but got 2. Please reconfigure the device.", + caughtException.getMessage()); + + } + + @Test + void removeingNumbersWorks() { + assertEquals("asd", AllianderBaseTest.removeNumbers("asd123")); + assertEquals(null, AllianderBaseTest.removeNumbers(null)); + assertEquals("", AllianderBaseTest.removeNumbers("42")); + assertEquals("no number", AllianderBaseTest.removeNumbers("no number")); + } + + @Test + void jsonCreationWorksAsExpected() { + String expectedJson = "{\"skipHedera\":true,\"direction\":\"IMPORT\",\"start\":{\"seconds\":1717600722,\"nanos\":0},\"resolution\":\"FIFTEEN_MINUTES\",\"values\":[42,1337]}"; + Instant start = Instant.ofEpochSecond(1717600722); + assertEquals(expectedJson, scheduleToJson(Arrays.asList(42, 1337), Duration.ofMinutes(15), start)); + } + + @Test + void commandIsParsedCorrectly() throws ParserConfigurationException, IOException, SAXException { + String command = "{\"operation\": \"PivotCommand\", \"parameters\": [{\"name\": \"PIVOTTC\", \"value\": {\"GTIC\": {\"ComingFrom\": \"iec61850\", \"ApcTyp\": {\"q\": {\"test\": 0}, \"t\": {\"SecondSinceEpoch\": 1717603268, \"FractionOfSecond\": 738197}, \"ctlVal\": 123.456}, \"Identifier\": \"TS1\"}}}]}"; + assertEquals(new Command(1717603268, 123.456), Command.fromJsonString(command)); + } + + @Test + void scheduleIsParsedCorrectly() { + String schedule = "{\"operation\": \"PivotSchedule\", \"parameters\": [{\"name\": \"PIVOTTC\", \"value\": {\"GTIC\": {\"ComingFrom\": \"iec61850\", \"ApcTyp\": {\"q\": {\"test\": 0}, \"t\": {\"SecondSinceEpoch\": 1718017399, \"FractionOfSecond\": 6459228}, \"ctlVal\": 10.0}, \"Identifier\": \"TS1\"}}}, {\"name\": \"PIVOTTC\", \"value\": {\"GTIC\": {\"ComingFrom\": \"iec61850\", \"ApcTyp\": {\"q\": {\"test\": 0}, \"t\": {\"SecondSinceEpoch\": 1718017401, \"FractionOfSecond\": 10921967}, \"ctlVal\": 20.0}, \"Identifier\": \"TS1\"}}}, {\"name\": \"PIVOTTC\", \"value\": {\"GTIC\": {\"ComingFrom\": \"iec61850\", \"ApcTyp\": {\"q\": {\"test\": 0}, \"t\": {\"SecondSinceEpoch\": 1718017406, \"FractionOfSecond\": 10921967}, \"ctlVal\": 30.0}, \"Identifier\": \"TS1\"}}}, {\"name\": \"PIVOTTC\", \"value\": {\"GTIC\": {\"ComingFrom\": \"iec61850\", \"ApcTyp\": {\"q\": {\"test\": 0}, \"t\": {\"SecondSinceEpoch\": 1718017411, \"FractionOfSecond\": 10921967}, \"ctlVal\": 40.0}, \"Identifier\": \"TS1\"}}}, {\"name\": \"PIVOTTC\", \"value\": {\"GTIC\": {\"ComingFrom\": \"iec61850\", \"ApcTyp\": {\"q\": {\"test\": 0}, \"t\": {\"SecondSinceEpoch\": 1718017416, \"FractionOfSecond\": 10921967}, \"ctlVal\": 0.0}, \"Identifier\": \"TS1\"}}}]}"; + Schedule expectedSchedule = new Schedule( // + new ScheduleEntry(1718017399, 10), // + new ScheduleEntry(1718017401, 20), // + new ScheduleEntry(1718017406, 30), // + new ScheduleEntry(1718017411, 40), // + new ScheduleEntry(1718017416, 0)); // + assertEquals(expectedSchedule, Schedule.parse(schedule)); + } +} diff --git a/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/VersionTest.java b/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/VersionTest.java new file mode 100644 index 0000000..691c34f --- /dev/null +++ b/conformance-tests/src/test/java/org/openmuc/fnn/steuerbox/VersionTest.java @@ -0,0 +1,45 @@ +package org.openmuc.fnn.steuerbox; + +import com.beanit.iec61850bean.ModelNode; +import com.beanit.iec61850bean.ServiceError; +import de.fhg.ise.testtool.utils.annotations.label.Description; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.openmuc.fnn.steuerbox.models.AllianderDER; + +import java.io.IOException; +import java.nio.file.Path; + +public class VersionTest { + + public final static String EXPECTED_LIB_IEC_61850_VERSION = "1.5.2"; + + @Description("Checks installed library version of libiec61850. Expects v" + EXPECTED_LIB_IEC_61850_VERSION + ".") + @DisplayName("IEC 61850 Protocol Library version check") + @Test + void libIecVersionMatchesExpectedVersion() throws IOException { + final String libIecLink = "/usr/local/lib/libiec61850.so"; + Path path = Path.of(libIecLink).toRealPath(); + String versionSuffix = path.toString().replaceAll(libIecLink + ".", ""); + + Assertions.assertEquals(EXPECTED_LIB_IEC_61850_VERSION, versionSuffix); + } + + @Description("Reads the IEC 61850 servers name plate and makes sure the correct config version is used") + @DisplayName("IEC 61850 config check") + @Test + void correctSCLFileIsInUse() throws ServiceError, IOException { + AllianderDER dut = AllianderDER.getWithDefaultSettings(); + ModelNode node = dut.getNodeWithValues("DER_Scheduler_Control/LLN0.NamPlt"); + String vendor = node.getChild("vendor").getBasicDataAttributes().get(0).getValueString(); + String swRev = node.getChild("swRev").getBasicDataAttributes().get(0).getValueString(); + String d = node.getChild("d").getBasicDataAttributes().get(0).getValueString(); + String configRev = node.getChild("configRev").getBasicDataAttributes().get(0).getValueString(); + + Assertions.assertEquals("Alliander", vendor); + Assertions.assertEquals("1.0.0", swRev); + Assertions.assertEquals("ReLevENT reference DER model", d); + Assertions.assertEquals("1", configRev); + } +} diff --git a/conformance-tests/src/test/resources/logback-test.xml b/conformance-tests/src/test/resources/logback-test.xml new file mode 100644 index 0000000..7f61ef2 --- /dev/null +++ b/conformance-tests/src/test/resources/logback-test.xml @@ -0,0 +1,31 @@ + + + + + + %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n + + + + + + + ${application.home:-.}/testResults/${timestamp}-schedule-test.log + + + %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/configure_scheduler.sh b/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/configure_scheduler.sh deleted file mode 100755 index ad64b3d..0000000 --- a/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/configure_scheduler.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -curl -X PUT http://localhost:8081/fledge/category/iec61850north_c1 -d "@./north_iec61850_exchanged_data.json" >/dev/null 2>&1 -curl -X PUT http://localhost:8081/fledge/category/iec61850north_c1 -d "@./north_iec61850_protocol_stack.json" >/dev/null 2>&1 -curl -X PUT http://localhost:8081/fledge/category/iec61850north_c1 -d "@./north_iec61850_scheduler_config.json" >/dev/null 2>&1 -curl -X PUT http://localhost:8081/fledge/category/iec61850north_c1 -d '{"modelPath":"/usr/local/fledge/model.cfg"}' >/dev/null 2>&1 - diff --git a/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/model.cfg b/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/model.cfg deleted file mode 100644 index 85205ea..0000000 --- a/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/model.cfg +++ /dev/null @@ -1,558 +0,0 @@ -MODEL(DER_Scheduler_){ -LD(Control){ -LN(LLN0){ -DO(NamPlt 0){ -DA(vendor 0 20 5 0 0)="Alliander"; -DA(swRev 0 20 5 0 0)="1.0.0"; -DA(d 0 20 5 0 0)="DER Scheduler example"; -DA(configRev 0 20 5 0 0)="1"; -} -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(Health 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(Mod 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=0; -} -} -LN(LPHD1){ -DO(PhyNam 0){ -DA(vendor 0 20 5 0 0)="Alliander"; -DA(hwRev 0 20 5 0 0); -DA(swRev 0 20 5 0 0); -DA(serNum 0 20 5 0 0); -DA(model 0 20 5 0 0); -} -DO(PhyHealth 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(Proxy 0){ -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -} -LN(MaxPow_GGIO1){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(AnOut1 0){ -DA(mxVal 0 27 1 1 0){ -DA(f 0 10 1 1 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(minVal 0 27 4 1 0){ -DA(f 0 10 4 1 0); -} -DA(maxVal 0 27 4 1 0){ -DA(f 0 10 4 1 0); -} -DA(dbRef 0 10 4 1 0); -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 27 12 0 0){ -DA(f 0 10 12 0 0); -} -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -} -LN(MaxPow_FSCC1){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ActSchdRef 0){ -DA(stVal 0 19 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(CtlEnt 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/MaxPow_GGIO1.AnOut1"; -} -DO(Schd01 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/MaxPow_FSCH01"; -} -DO(Schd02 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/MaxPow_FSCH02"; -} -DO(Schd03 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/MaxPow_Res_FSCH01"; -} -} -LN(MaxPow_FSCH01){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(MaxPow_FSCH02){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(MaxPow_Res_FSCH01){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0)=0; -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=1; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0)=3600; -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0)=2200.0; -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -DA(setCal 0 27 2 1 0){ -DA(occ 0 7 2 1 0); -DA(occType 0 12 2 1 0)=0; -DA(occPer 0 12 2 1 0)=0; -DA(weekDay 0 12 2 1 0); -DA(month 0 12 2 1 0); -DA(day 0 6 2 1 0); -DA(hr 0 6 2 1 0); -DA(mn 0 6 2 1 0); -} -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0)=1; -} -} -} -} diff --git a/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/model.cid b/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/model.cid deleted file mode 100644 index e614cf7..0000000 --- a/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/model.cid +++ /dev/null @@ -1,715 +0,0 @@ - - - - - -

- - - -
- - - -
-

1,1,9999,1

-

12

-

00000001

-

0001

-

0001

-

0.0.0.0

-

255.255.255.0

-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - Alliander - - - 1.0.0 - - - 1 - - - DER Scheduler example - - - - - Ok - - - - - - - Alliander - - - - - false - - - - - - - - @Control/MaxPow_GGIO1.AnOut1 - - - - - @Control/MaxPow_FSCH01 - - - - - @Control/MaxPow_FSCH02 - - - - - @Control/MaxPow_Res_FSCH01 - - - - - - - 100 - - - - - - - 100 - - - - - - - 1 - - - - - - - - - - 3600 - - - - - 0 - - - - - - 2200 - - - - - - true - - - - - 1970-01-01T00:00:01Z - - - - Time - - - Hour - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - direct-with-normal-security - - - - - - - - - - - - - - - - direct-with-normal-security - - - - - - - - - - - - - - - - on - - - - - - - - - - - - - - - - - on - - - - - status-only - - - - - None - - - - - - - - - - direct-with-normal-security - - - - - - - - - - - - - direct-with-normal-security - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IEC 61850-8-1:2003 - - - - - - - - - IEC 61850-8-1:2003 - - - - - - - - - - - - - - - - - - - - - W - - - k - - - - - s - - - - - reserved - January - February - March - April - May - June - July - August - September - October - November - December - - - reserved - Monday - Tuesday - Wednesday - Thursday - Friday - Saturday - Sunday - - - Hour - Day - Week - Month - Year - - - Time - WeekDay - WeekOfYear - DayOfMonth - DayOfYear - - - y - z - a - f - p - n - µ - m - c - d - - da - h - k - M - G - T - P - E - Z - Y - - - - m - kg - s - A - K - mol - cd - deg - rad - sr - Gy - Bq - °C - Sv - F - C - S - H - V - ohm - J - N - Hz - lx - Lm - Wb - T - W - Pa - - - m/s - m/s² - m³/s - m/m³ - M - kg/m³ - m²/s - W/m K - J/K - ppm - 1/s - rad/s - W/m² - J/m² - S/m - K/s - Pa/s - J/kg K - VA - Watts - VAr - phi - cos(phi) - Vs - - As - - A²t - VAh - Wh - VArh - V/Hz - Hz/s - char - char/s - kgm² - dB - J/Wh - W/s - l/s - dBm - - - not-supported - - - status-only - direct-with-normal-security - sbo-with-normal-security - direct-with-enhanced-security - sbo-with-enhanced-security - - - Not ready - Start Time required - Ready - Running - - - None - Missing valid NumEntr - Missing valid SchdIntv - Missing valid schedule values - Inconsistent values CDC - Missing valid StrTm - Other - - - on - blocked - test - test/blocked - off - - - Ok - Warning - Alarm - - - \ No newline at end of file diff --git a/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/north_iec61850_exchanged_data.json b/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/north_iec61850_exchanged_data.json deleted file mode 100644 index 7c2fa3b..0000000 --- a/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/north_iec61850_exchanged_data.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "exchanged_data": { - "exchanged_data": { - "datapoints": [ - { - "label": "TS1", - "protocols": [ - { - "name": "iec61850", - "objref": "DER_Scheduler_Control/MaxPow_GGIO1.AnOut1", - "cdc": "ApcTyp" - } - ] - } - ] - } - } -} \ No newline at end of file diff --git a/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/north_iec61850_protocol_stack.json b/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/north_iec61850_protocol_stack.json deleted file mode 100644 index fb77c1b..0000000 --- a/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/north_iec61850_protocol_stack.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "protocol_stack": { - "protocol_stack": { - "name": "iec61850scheduler", - "version": "1.0", - "transport_layer": { - "srv_ip": "0.0.0.0", - "port": 102, - "use_scheduler": true - } - } - } -} \ No newline at end of file diff --git a/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/north_iec61850_scheduler_config.json b/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/north_iec61850_scheduler_config.json deleted file mode 100644 index 58d8525..0000000 --- a/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/north_iec61850_scheduler_config.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "scheduler_conf": { - "scheduler_conf": { - "targets": [ - { - "schedCtrlRef": "@Control/MaxPow_FSCC1", - "forwardOutput": false, - "forwardSchedule": true, - "forwardScheduleInterval": 5, - "forwardSchedulePeriod": 86400 - } - ], - "schedules": [ - { - "scheduleRef": "@Control/MaxPow_Res_FSCH01", - "enableScheduleControl": false, - "enabled": true, - "parameters": [ - { - "parameter": "SCHED_PARAM_STR_TM", - "enableWriteAccess": false - }, - { - "parameter": "SCHED_PARAM_SCHD_PRIO", - "enableWriteAccess": false - } - ] - } - ], - "storage": { - "databaseUri": "scheduler-db.json", - "parameters": [] - } - } - } -} diff --git a/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/update-fledge.sh b/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/update-fledge.sh deleted file mode 100755 index e925fdb..0000000 --- a/deployments/n61850-smqtt-ubuntu2004/fledge/minimal-config/update-fledge.sh +++ /dev/null @@ -1,12 +0,0 @@ -# Converts the supplied IEC 61850 model.cid into a CFG file that can be parsed by the underlying libiec61850 and copy it into a docker container - -#!/bin/bash - -DOCKER_CONTAINER_ID=a72a07d00a96 -# TODO: add genconfig.jar, do not reference local installation -java -jar ~/git/libiec61850/tools/model_generator/genconfig.jar model.cid model.cfg -docker cp model.cfg $DOCKER_CONTAINER_ID:/tmp -./configure_scheduler.sh -cd ../scripts -./fledge_restart.sh -cd - diff --git a/deployments/n61850-smqtt-ubuntu2004/fledge/scheduling-config/model.cfg b/deployments/n61850-smqtt-ubuntu2004/fledge/scheduling-config/model.cfg deleted file mode 100644 index a7e739a..0000000 --- a/deployments/n61850-smqtt-ubuntu2004/fledge/scheduling-config/model.cfg +++ /dev/null @@ -1,19473 +0,0 @@ -MODEL(DER_Scheduler_){ -LD(Control){ -LN(LLN0){ -DO(NamPlt 0){ -DA(vendor 0 20 5 0 0)="Alliander"; -DA(swRev 0 20 5 0 0)="1.0.0"; -DA(d 0 20 5 0 0)="DER Scheduler example"; -DA(configRev 0 20 5 0 0)="1"; -} -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(Health 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(Mod 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=0; -} -} -LN(LPHD1){ -DO(PhyNam 0){ -DA(vendor 0 20 5 0 0)="Alliander"; -DA(hwRev 0 20 5 0 0); -DA(swRev 0 20 5 0 0); -DA(serNum 0 20 5 0 0); -DA(model 0 20 5 0 0); -} -DO(PhyHealth 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(Proxy 0){ -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -} -LN(ActPow_GGIO1){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(AnOut1 0){ -DA(mxVal 0 27 1 1 0){ -DA(f 0 10 1 1 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(minVal 0 27 4 1 0){ -DA(f 0 10 4 1 0); -} -DA(maxVal 0 27 4 1 0){ -DA(f 0 10 4 1 0); -} -DA(dbRef 0 10 4 1 0); -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 27 12 0 0){ -DA(f 0 10 12 0 0); -} -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -} -LN(MaxPow_GGIO1){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(AnOut1 0){ -DA(mxVal 0 27 1 1 0){ -DA(f 0 10 1 1 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(minVal 0 27 4 1 0){ -DA(f 0 10 4 1 0); -} -DA(maxVal 0 27 4 1 0){ -DA(f 0 10 4 1 0); -} -DA(dbRef 0 10 4 1 0); -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 27 12 0 0){ -DA(f 0 10 12 0 0); -} -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -} -LN(OnOff_GGIO1){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SPCSO1 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -} -LN(ActPow_FSCC1){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ActSchdRef 0){ -DA(stVal 0 19 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(CtlEnt 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/ActPow_GGIO1.AnOut1"; -} -DO(Schd01 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/ActPow_FSCH01"; -} -DO(Schd02 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/ActPow_FSCH02"; -} -DO(Schd03 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/ActPow_FSCH03"; -} -DO(Schd04 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/ActPow_FSCH04"; -} -DO(Schd05 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/ActPow_FSCH05"; -} -DO(Schd06 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/ActPow_FSCH06"; -} -DO(Schd07 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/ActPow_FSCH07"; -} -DO(Schd08 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/ActPow_FSCH08"; -} -DO(Schd09 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/ActPow_FSCH09"; -} -DO(Schd10 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/ActPow_FSCH10"; -} -DO(Schd11 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/ActPow_Res_FSCH01"; -} -} -LN(MaxPow_FSCC1){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ActSchdRef 0){ -DA(stVal 0 19 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(CtlEnt 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/MaxPow_GGIO1.AnOut1"; -} -DO(Schd01 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/MaxPow_FSCH01"; -} -DO(Schd02 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/MaxPow_FSCH02"; -} -DO(Schd03 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/MaxPow_FSCH03"; -} -DO(Schd04 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/MaxPow_FSCH04"; -} -DO(Schd05 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/MaxPow_FSCH05"; -} -DO(Schd06 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/MaxPow_FSCH06"; -} -DO(Schd07 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/MaxPow_FSCH07"; -} -DO(Schd08 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/MaxPow_FSCH08"; -} -DO(Schd09 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/MaxPow_FSCH09"; -} -DO(Schd10 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/MaxPow_FSCH10"; -} -DO(Schd11 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/MaxPow_Res_FSCH01"; -} -} -LN(OnOff_FSCC1){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ActSchdRef 0){ -DA(stVal 0 19 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValSPS 0){ -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(CtlEnt 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/OnOff_GGIO1.SPCSO1"; -} -DO(Schd01 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/OnOff_FSCH01"; -} -DO(Schd02 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/OnOff_FSCH02"; -} -DO(Schd03 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/OnOff_FSCH03"; -} -DO(Schd04 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/OnOff_FSCH04"; -} -DO(Schd05 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/OnOff_FSCH05"; -} -DO(Schd06 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/OnOff_FSCH06"; -} -DO(Schd07 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/OnOff_FSCH07"; -} -DO(Schd08 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/OnOff_FSCH08"; -} -DO(Schd09 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/OnOff_FSCH09"; -} -DO(Schd10 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/OnOff_FSCH10"; -} -DO(Schd11 0){ -DA(setSrcRef 0 19 2 1 0)="@Control/OnOff_Res_FSCH01"; -} -} -LN(ActPow_FSCH01){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(ActPow_FSCH02){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(ActPow_FSCH03){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(ActPow_FSCH04){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(ActPow_FSCH05){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(ActPow_FSCH06){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(ActPow_FSCH07){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(ActPow_FSCH08){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(ActPow_FSCH09){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(ActPow_FSCH10){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(ActPow_Res_FSCH01){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0)=0; -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=1; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0)=3600; -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0)=11.0; -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -DA(setCal 0 27 2 1 0){ -DA(occ 0 7 2 1 0); -DA(occType 0 12 2 1 0)=0; -DA(occPer 0 12 2 1 0)=0; -DA(weekDay 0 12 2 1 0); -DA(month 0 12 2 1 0); -DA(day 0 6 2 1 0); -DA(hr 0 6 2 1 0); -DA(mn 0 6 2 1 0)=0; -} -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0)=1; -} -} -LN(MaxPow_FSCH01){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(MaxPow_FSCH02){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(MaxPow_FSCH03){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(MaxPow_FSCH04){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(MaxPow_FSCH05){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(MaxPow_FSCH06){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(MaxPow_FSCH07){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(MaxPow_FSCH08){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(MaxPow_FSCH09){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(MaxPow_FSCH10){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(MaxPow_Res_FSCH01){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValMV 0){ -DA(mag 0 27 1 4 0){ -DA(f 0 10 1 4 0); -} -DA(q 0 23 1 2 0); -DA(t 0 22 1 0 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=38; -DA(multiplier 0 12 4 1 0)=3; -} -DA(d 0 20 5 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0)=0; -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=1; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0)=3600; -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValASG001 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0)=2200.0; -} -} -DO(ValASG002 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG003 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG004 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG005 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG006 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG007 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG008 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG009 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG010 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG011 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG012 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG013 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG014 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG015 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG016 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG017 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG018 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG019 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG020 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG021 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG022 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG023 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG024 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG025 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG026 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG027 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG028 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG029 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG030 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG031 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG032 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG033 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG034 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG035 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG036 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG037 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG038 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG039 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG040 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG041 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG042 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG043 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG044 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG045 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG046 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG047 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG048 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG049 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG050 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG051 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG052 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG053 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG054 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG055 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG056 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG057 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG058 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG059 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG060 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG061 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG062 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG063 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG064 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG065 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG066 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG067 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG068 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG069 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG070 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG071 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG072 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG073 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG074 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG075 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG076 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG077 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG078 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG079 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG080 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG081 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG082 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG083 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG084 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG085 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG086 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG087 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG088 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG089 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG090 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG091 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG092 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG093 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG094 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG095 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG096 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG097 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG098 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG099 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(ValASG100 0){ -DA(setMag 0 27 2 1 0){ -DA(f 0 10 2 1 0); -} -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -DA(setCal 0 27 2 1 0){ -DA(occ 0 7 2 1 0); -DA(occType 0 12 2 1 0)=0; -DA(occPer 0 12 2 1 0)=0; -DA(weekDay 0 12 2 1 0); -DA(month 0 12 2 1 0); -DA(day 0 6 2 1 0); -DA(hr 0 6 2 1 0); -DA(mn 0 6 2 1 0); -} -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0)=1; -} -} -LN(OnOff_FSCH01){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValSPS 0){ -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValSPG001 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG002 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG003 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG004 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG005 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG006 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG007 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG008 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG009 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG010 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG011 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG012 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG013 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG014 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG015 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG016 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG017 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG018 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG019 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG020 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG021 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG022 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG023 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG024 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG025 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG026 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG027 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG028 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG029 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG030 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG031 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG032 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG033 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG034 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG035 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG036 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG037 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG038 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG039 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG040 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG041 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG042 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG043 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG044 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG045 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG046 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG047 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG048 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG049 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG050 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG051 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG052 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG053 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG054 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG055 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG056 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG057 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG058 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG059 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG060 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG061 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG062 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG063 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG064 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG065 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG066 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG067 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG068 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG069 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG070 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG071 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG072 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG073 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG074 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG075 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG076 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG077 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG078 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG079 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG080 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG081 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG082 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG083 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG084 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG085 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG086 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG087 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG088 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG089 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG090 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG091 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG092 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG093 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG094 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG095 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG096 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG097 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG098 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG099 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG100 0){ -DA(setVal 0 0 2 1 0); -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(OnOff_FSCH02){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValSPS 0){ -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValSPG001 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG002 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG003 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG004 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG005 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG006 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG007 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG008 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG009 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG010 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG011 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG012 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG013 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG014 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG015 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG016 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG017 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG018 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG019 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG020 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG021 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG022 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG023 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG024 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG025 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG026 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG027 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG028 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG029 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG030 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG031 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG032 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG033 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG034 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG035 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG036 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG037 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG038 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG039 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG040 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG041 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG042 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG043 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG044 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG045 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG046 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG047 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG048 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG049 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG050 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG051 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG052 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG053 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG054 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG055 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG056 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG057 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG058 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG059 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG060 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG061 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG062 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG063 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG064 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG065 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG066 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG067 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG068 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG069 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG070 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG071 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG072 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG073 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG074 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG075 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG076 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG077 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG078 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG079 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG080 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG081 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG082 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG083 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG084 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG085 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG086 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG087 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG088 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG089 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG090 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG091 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG092 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG093 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG094 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG095 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG096 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG097 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG098 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG099 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG100 0){ -DA(setVal 0 0 2 1 0); -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(OnOff_FSCH03){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValSPS 0){ -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValSPG001 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG002 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG003 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG004 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG005 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG006 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG007 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG008 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG009 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG010 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG011 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG012 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG013 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG014 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG015 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG016 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG017 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG018 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG019 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG020 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG021 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG022 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG023 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG024 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG025 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG026 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG027 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG028 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG029 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG030 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG031 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG032 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG033 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG034 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG035 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG036 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG037 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG038 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG039 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG040 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG041 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG042 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG043 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG044 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG045 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG046 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG047 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG048 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG049 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG050 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG051 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG052 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG053 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG054 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG055 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG056 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG057 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG058 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG059 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG060 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG061 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG062 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG063 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG064 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG065 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG066 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG067 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG068 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG069 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG070 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG071 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG072 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG073 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG074 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG075 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG076 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG077 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG078 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG079 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG080 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG081 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG082 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG083 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG084 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG085 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG086 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG087 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG088 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG089 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG090 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG091 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG092 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG093 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG094 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG095 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG096 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG097 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG098 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG099 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG100 0){ -DA(setVal 0 0 2 1 0); -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(OnOff_FSCH04){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValSPS 0){ -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValSPG001 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG002 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG003 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG004 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG005 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG006 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG007 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG008 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG009 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG010 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG011 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG012 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG013 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG014 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG015 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG016 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG017 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG018 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG019 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG020 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG021 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG022 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG023 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG024 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG025 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG026 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG027 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG028 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG029 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG030 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG031 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG032 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG033 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG034 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG035 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG036 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG037 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG038 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG039 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG040 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG041 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG042 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG043 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG044 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG045 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG046 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG047 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG048 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG049 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG050 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG051 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG052 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG053 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG054 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG055 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG056 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG057 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG058 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG059 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG060 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG061 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG062 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG063 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG064 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG065 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG066 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG067 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG068 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG069 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG070 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG071 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG072 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG073 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG074 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG075 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG076 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG077 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG078 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG079 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG080 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG081 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG082 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG083 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG084 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG085 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG086 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG087 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG088 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG089 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG090 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG091 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG092 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG093 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG094 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG095 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG096 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG097 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG098 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG099 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG100 0){ -DA(setVal 0 0 2 1 0); -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(OnOff_FSCH05){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValSPS 0){ -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValSPG001 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG002 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG003 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG004 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG005 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG006 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG007 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG008 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG009 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG010 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG011 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG012 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG013 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG014 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG015 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG016 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG017 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG018 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG019 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG020 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG021 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG022 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG023 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG024 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG025 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG026 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG027 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG028 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG029 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG030 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG031 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG032 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG033 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG034 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG035 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG036 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG037 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG038 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG039 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG040 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG041 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG042 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG043 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG044 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG045 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG046 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG047 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG048 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG049 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG050 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG051 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG052 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG053 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG054 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG055 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG056 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG057 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG058 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG059 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG060 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG061 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG062 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG063 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG064 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG065 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG066 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG067 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG068 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG069 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG070 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG071 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG072 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG073 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG074 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG075 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG076 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG077 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG078 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG079 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG080 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG081 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG082 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG083 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG084 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG085 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG086 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG087 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG088 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG089 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG090 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG091 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG092 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG093 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG094 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG095 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG096 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG097 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG098 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG099 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG100 0){ -DA(setVal 0 0 2 1 0); -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(OnOff_FSCH06){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValSPS 0){ -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValSPG001 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG002 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG003 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG004 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG005 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG006 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG007 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG008 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG009 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG010 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG011 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG012 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG013 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG014 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG015 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG016 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG017 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG018 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG019 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG020 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG021 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG022 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG023 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG024 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG025 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG026 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG027 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG028 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG029 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG030 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG031 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG032 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG033 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG034 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG035 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG036 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG037 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG038 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG039 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG040 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG041 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG042 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG043 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG044 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG045 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG046 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG047 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG048 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG049 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG050 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG051 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG052 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG053 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG054 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG055 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG056 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG057 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG058 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG059 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG060 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG061 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG062 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG063 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG064 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG065 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG066 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG067 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG068 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG069 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG070 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG071 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG072 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG073 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG074 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG075 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG076 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG077 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG078 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG079 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG080 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG081 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG082 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG083 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG084 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG085 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG086 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG087 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG088 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG089 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG090 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG091 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG092 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG093 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG094 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG095 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG096 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG097 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG098 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG099 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG100 0){ -DA(setVal 0 0 2 1 0); -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(OnOff_FSCH07){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValSPS 0){ -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValSPG001 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG002 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG003 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG004 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG005 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG006 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG007 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG008 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG009 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG010 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG011 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG012 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG013 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG014 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG015 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG016 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG017 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG018 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG019 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG020 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG021 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG022 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG023 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG024 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG025 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG026 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG027 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG028 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG029 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG030 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG031 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG032 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG033 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG034 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG035 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG036 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG037 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG038 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG039 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG040 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG041 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG042 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG043 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG044 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG045 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG046 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG047 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG048 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG049 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG050 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG051 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG052 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG053 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG054 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG055 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG056 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG057 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG058 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG059 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG060 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG061 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG062 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG063 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG064 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG065 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG066 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG067 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG068 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG069 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG070 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG071 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG072 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG073 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG074 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG075 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG076 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG077 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG078 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG079 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG080 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG081 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG082 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG083 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG084 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG085 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG086 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG087 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG088 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG089 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG090 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG091 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG092 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG093 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG094 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG095 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG096 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG097 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG098 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG099 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG100 0){ -DA(setVal 0 0 2 1 0); -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(OnOff_FSCH08){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValSPS 0){ -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValSPG001 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG002 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG003 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG004 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG005 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG006 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG007 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG008 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG009 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG010 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG011 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG012 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG013 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG014 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG015 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG016 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG017 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG018 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG019 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG020 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG021 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG022 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG023 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG024 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG025 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG026 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG027 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG028 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG029 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG030 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG031 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG032 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG033 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG034 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG035 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG036 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG037 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG038 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG039 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG040 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG041 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG042 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG043 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG044 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG045 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG046 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG047 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG048 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG049 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG050 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG051 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG052 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG053 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG054 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG055 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG056 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG057 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG058 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG059 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG060 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG061 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG062 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG063 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG064 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG065 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG066 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG067 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG068 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG069 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG070 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG071 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG072 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG073 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG074 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG075 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG076 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG077 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG078 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG079 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG080 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG081 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG082 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG083 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG084 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG085 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG086 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG087 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG088 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG089 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG090 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG091 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG092 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG093 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG094 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG095 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG096 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG097 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG098 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG099 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG100 0){ -DA(setVal 0 0 2 1 0); -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(OnOff_FSCH09){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValSPS 0){ -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValSPG001 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG002 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG003 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG004 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG005 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG006 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG007 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG008 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG009 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG010 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG011 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG012 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG013 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG014 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG015 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG016 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG017 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG018 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG019 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG020 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG021 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG022 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG023 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG024 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG025 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG026 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG027 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG028 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG029 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG030 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG031 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG032 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG033 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG034 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG035 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG036 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG037 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG038 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG039 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG040 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG041 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG042 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG043 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG044 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG045 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG046 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG047 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG048 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG049 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG050 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG051 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG052 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG053 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG054 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG055 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG056 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG057 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG058 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG059 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG060 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG061 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG062 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG063 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG064 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG065 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG066 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG067 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG068 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG069 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG070 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG071 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG072 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG073 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG074 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG075 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG076 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG077 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG078 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG079 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG080 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG081 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG082 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG083 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG084 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG085 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG086 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG087 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG088 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG089 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG090 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG091 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG092 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG093 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG094 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG095 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG096 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG097 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG098 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG099 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG100 0){ -DA(setVal 0 0 2 1 0); -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(OnOff_FSCH10){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValSPS 0){ -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0); -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=100; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0); -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValSPG001 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG002 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG003 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG004 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG005 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG006 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG007 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG008 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG009 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG010 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG011 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG012 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG013 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG014 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG015 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG016 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG017 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG018 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG019 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG020 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG021 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG022 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG023 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG024 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG025 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG026 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG027 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG028 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG029 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG030 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG031 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG032 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG033 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG034 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG035 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG036 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG037 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG038 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG039 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG040 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG041 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG042 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG043 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG044 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG045 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG046 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG047 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG048 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG049 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG050 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG051 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG052 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG053 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG054 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG055 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG056 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG057 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG058 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG059 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG060 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG061 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG062 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG063 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG064 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG065 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG066 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG067 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG068 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG069 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG070 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG071 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG072 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG073 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG074 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG075 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG076 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG077 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG078 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG079 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG080 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG081 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG082 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG083 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG084 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG085 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG086 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG087 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG088 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG089 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG090 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG091 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG092 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG093 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG094 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG095 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG096 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG097 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG098 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG099 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG100 0){ -DA(setVal 0 0 2 1 0); -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm02 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm03 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm04 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm05 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm06 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm07 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm08 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm09 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm10 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm11 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm12 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm13 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm14 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm15 0){ -DA(setTm 0 22 2 1 0); -} -DO(StrTm16 0){ -DA(setTm 0 22 2 1 0); -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0); -} -} -LN(OnOff_Res_FSCH01){ -DO(Beh 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdSt 0){ -DA(stVal 0 12 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEntr 0){ -DA(stVal 0 3 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ValSPS 0){ -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(ActStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(NxtStrTm 0){ -DA(stVal 0 22 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(SchdEnaErr 0){ -DA(stVal 0 12 0 1 0)=1; -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -} -DO(EnaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(DsaReq 0){ -DA(origin 0 27 0 0 0){ -DA(orCat 0 12 0 0 0); -DA(orIdent 0 13 0 0 0); -} -DA(ctlNum 0 6 0 0 0); -DA(stVal 0 0 0 1 0); -DA(q 0 23 0 2 0); -DA(t 0 22 0 0 0); -DA(ctlModel 0 12 4 1 0)=1; -DA(Oper 0 27 12 0 0){ -DA(ctlVal 0 0 12 0 0); -DA(origin 0 27 12 0 0){ -DA(orCat 0 12 12 0 0); -DA(orIdent 0 13 12 0 0); -} -DA(ctlNum 0 6 12 0 0); -DA(T 0 22 12 0 0); -DA(Test 0 0 12 0 0); -DA(Check 0 24 12 0 0); -} -} -DO(SchdPrio 0){ -DA(setVal 0 3 2 1 0)=0; -} -DO(NumEntr 0){ -DA(setVal 0 3 2 1 0)=1; -} -DO(SchdIntv 0){ -DA(setVal 0 3 2 1 0)=3600; -DA(units 0 27 4 1 0){ -DA(SIUnit 0 12 4 1 0)=4; -DA(multiplier 0 12 4 1 0); -} -} -DO(ValSPG001 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG002 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG003 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG004 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG005 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG006 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG007 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG008 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG009 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG010 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG011 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG012 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG013 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG014 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG015 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG016 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG017 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG018 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG019 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG020 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG021 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG022 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG023 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG024 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG025 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG026 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG027 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG028 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG029 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG030 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG031 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG032 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG033 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG034 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG035 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG036 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG037 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG038 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG039 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG040 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG041 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG042 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG043 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG044 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG045 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG046 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG047 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG048 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG049 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG050 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG051 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG052 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG053 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG054 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG055 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG056 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG057 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG058 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG059 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG060 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG061 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG062 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG063 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG064 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG065 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG066 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG067 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG068 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG069 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG070 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG071 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG072 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG073 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG074 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG075 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG076 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG077 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG078 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG079 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG080 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG081 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG082 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG083 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG084 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG085 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG086 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG087 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG088 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG089 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG090 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG091 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG092 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG093 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG094 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG095 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG096 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG097 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG098 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG099 0){ -DA(setVal 0 0 2 1 0); -} -DO(ValSPG100 0){ -DA(setVal 0 0 2 1 0); -} -DO(StrTm01 0){ -DA(setTm 0 22 2 1 0); -DA(setCal 0 27 2 1 0){ -DA(occ 0 7 2 1 0); -DA(occType 0 12 2 1 0)=0; -DA(occPer 0 12 2 1 0)=0; -DA(weekDay 0 12 2 1 0); -DA(month 0 12 2 1 0); -DA(day 0 6 2 1 0); -DA(hr 0 6 2 1 0); -DA(mn 0 6 2 1 0); -} -} -DO(SchdReuse 0){ -DA(setVal 0 0 2 1 0)=1; -} -} -} -} diff --git a/deployments/n61850-smqtt-ubuntu2004/fledge/scheduling-config/model.cid b/deployments/n61850-smqtt-ubuntu2004/fledge/scheduling-config/model.cid index c4ced5a..f93d096 100644 --- a/deployments/n61850-smqtt-ubuntu2004/fledge/scheduling-config/model.cid +++ b/deployments/n61850-smqtt-ubuntu2004/fledge/scheduling-config/model.cid @@ -1,1778 +1,1775 @@ - - - - - -
- - - -
- - - -
-

1,1,9999,1

-

12

-

00000001

-

0001

-

0001

-

0.0.0.0

-

255.255.255.0

-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - Alliander - - - 1.0.0 - - - 1 - - - DER Scheduler example - - - - - Ok - - - - - - - Alliander - - - - - false - - - - - - - - - - @Control/ActPow_GGIO1.AnOut1 - - - - - @Control/ActPow_FSCH01 - - - - - @Control/ActPow_FSCH02 - - - - - @Control/ActPow_FSCH03 - - - - - @Control/ActPow_FSCH04 - - - - - @Control/ActPow_FSCH05 - - - - - @Control/ActPow_FSCH06 - - - - - @Control/ActPow_FSCH07 - - - - - @Control/ActPow_FSCH08 - - - - - @Control/ActPow_FSCH09 - - - - - @Control/ActPow_FSCH10 - - - - - @Control/ActPow_Res_FSCH01 - - - - - - - @Control/MaxPow_GGIO1.AnOut1 - - - - - @Control/MaxPow_FSCH01 - - - - - @Control/MaxPow_FSCH02 - - - - - @Control/MaxPow_FSCH03 - - - - - @Control/MaxPow_FSCH04 - - - - - @Control/MaxPow_FSCH05 - - - - - @Control/MaxPow_FSCH06 - - - - - @Control/MaxPow_FSCH07 - - - - - @Control/MaxPow_FSCH08 - - - - - @Control/MaxPow_FSCH09 - - - - - @Control/MaxPow_FSCH10 - - - - - @Control/MaxPow_Res_FSCH01 - - - - - - - @Control/OnOff_GGIO1.SPCSO1 - - - - - @Control/OnOff_FSCH01 - - - - - @Control/OnOff_FSCH02 - - - - - @Control/OnOff_FSCH03 - - - - - @Control/OnOff_FSCH04 - - - - - @Control/OnOff_FSCH05 - - - - - @Control/OnOff_FSCH06 - - - - - @Control/OnOff_FSCH07 - - - - - @Control/OnOff_FSCH08 - - - - - @Control/OnOff_FSCH09 - - - - - @Control/OnOff_FSCH10 - - - - - @Control/OnOff_Res_FSCH01 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 1 - - - - - - - - - - 3600 - - - - - 0 - - - - - - 11 - - - - - - true - - - - - 1970-01-01T00:00:01Z - - - - Time - - - Hour - - - 0 - - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 1 - - - - - - - - - - 3600 - - - - - 0 - - - - - - 2200 - - - - - - true - - - - - 1970-01-01T00:00:01Z - - - - Time - - - Hour - - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 100 - - - - - - - 1 - - - - - - - - - 3600 - - - - - 0 - - - - - false - - - - - true - - - - - 1970-01-01T00:00:01Z - - - - Time - - - Hour - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - direct-with-normal-security - - - - - - - - - - - - - - - - direct-with-normal-security - - - - - - - - - - - - - - - - on - - - - - - - - - - - - - - - - - on - - - - - status-only - - - - - None - - - - - - - - - - direct-with-normal-security - - - - - - - - - - - - - direct-with-normal-security - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IEC 61850-8-1:2003 - - - - - - - - - IEC 61850-8-1:2003 - - - - - - - - - - - - - - - - - - - - - W - - - k - - - - - s - - - - - reserved - January - February - March - April - May - June - July - August - September - October - November - December - - - reserved - Monday - Tuesday - Wednesday - Thursday - Friday - Saturday - Sunday - - - Hour - Day - Week - Month - Year - - - Time - WeekDay - WeekOfYear - DayOfMonth - DayOfYear - - - y - z - a - f - p - n - µ - m - c - d - - da - h - k - M - G - T - P - E - Z - Y - - - - m - kg - s - A - K - mol - cd - deg - rad - sr - Gy - Bq - °C - Sv - F - C - S - H - V - ohm - J - N - Hz - lx - Lm - Wb - T - W - Pa - - - m/s - m/s² - m³/s - m/m³ - M - kg/m³ - m²/s - W/m K - J/K - ppm - 1/s - rad/s - W/m² - J/m² - S/m - K/s - Pa/s - J/kg K - VA - Watts - VAr - phi - cos(phi) - Vs - - As - - A²t - VAh - Wh - VArh - V/Hz - Hz/s - char - char/s - kgm² - dB - J/Wh - W/s - l/s - dBm - - - not-supported - - - status-only - direct-with-normal-security - sbo-with-normal-security - direct-with-enhanced-security - sbo-with-enhanced-security - - - Not ready - Start Time required - Ready - Running - - - None - Missing valid NumEntr - Missing valid SchdIntv - Missing valid schedule values - Inconsistent values CDC - Missing valid StrTm - Other - - - on - blocked - test - test/blocked - off - - - Ok - Warning - Alarm - - -
\ No newline at end of file + + +
+ + + +
+ + + +
+

1,1,9999,1

+

12

+

00000001

+

0001

+

0001

+

0.0.0.0

+

255.255.255.0

+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + Alliander + + + 1.0.0 + + + 1 + + + ReLevENT reference DER model 1.0 + + + + + Ok + + + + + + + Alliander + + + + + false + + + + + + + + + + @Control/ActPow_GGIO1.AnOut1.mxVal.f + + + + + @Control/ActPow_FSCH01 + + + + + @Control/ActPow_FSCH02 + + + + + @Control/ActPow_FSCH03 + + + + + @Control/ActPow_FSCH04 + + + + + @Control/ActPow_FSCH05 + + + + + @Control/ActPow_FSCH06 + + + + + @Control/ActPow_FSCH07 + + + + + @Control/ActPow_FSCH08 + + + + + @Control/ActPow_FSCH09 + + + + + @Control/ActPow_FSCH10 + + + + + @Control/ActPow_Res_FSCH01 + + + + + + + @Control/MaxPow_GGIO1.AnOut1.mxVal.f + + + + + @Control/MaxPow_FSCH01 + + + + + @Control/MaxPow_FSCH02 + + + + + @Control/MaxPow_FSCH03 + + + + + @Control/MaxPow_FSCH04 + + + + + @Control/MaxPow_FSCH05 + + + + + @Control/MaxPow_FSCH06 + + + + + @Control/MaxPow_FSCH07 + + + + + @Control/MaxPow_FSCH08 + + + + + @Control/MaxPow_FSCH09 + + + + + @Control/MaxPow_FSCH10 + + + + + @Control/MaxPow_Res_FSCH01 + + + + + + + @Control/OnOff_GGIO1.SPCSO1 + + + + + @Control/OnOff_FSCH01 + + + + + @Control/OnOff_FSCH02 + + + + + @Control/OnOff_FSCH03 + + + + + @Control/OnOff_FSCH04 + + + + + @Control/OnOff_FSCH05 + + + + + @Control/OnOff_FSCH06 + + + + + @Control/OnOff_FSCH07 + + + + + @Control/OnOff_FSCH08 + + + + + @Control/OnOff_FSCH09 + + + + + @Control/OnOff_FSCH10 + + + + + @Control/OnOff_Res_FSCH01 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 1 + + + + + + + + + + 3600 + + + + + 10 + + + + + + 11 + + + + + + true + + + + + 1970-01-01T00:00:01Z + + + + Time + + + Hour + + + 0 + + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 1 + + + + + + + + + + 3600 + + + + + 10 + + + + + + 0 + + + + + + true + + + + + 1970-01-01T00:00:01Z + + + + Time + + + Hour + + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 100 + + + + + + + 1 + + + + + + + + + 3600 + + + + + 10 + + + + + false + + + + + true + + + + + 1970-01-01T00:00:01Z + + + + Time + + + Hour + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + on + + + + + + + + + + + + + + + + + on + + + + + status-only + + + + + None + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + W + + + k + + + + + s + + + + + reserved + January + February + March + April + May + June + July + August + September + October + November + December + + + reserved + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday + Sunday + + + Hour + Day + Week + Month + Year + + + Time + WeekDay + WeekOfYear + DayOfMonth + DayOfYear + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + + + not-supported + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + Not ready + Start Time required + Ready + Running + + + None + Missing valid NumEntr + Missing valid SchdIntv + Missing valid schedule values + Inconsistent values CDC + Missing valid StrTm + Other + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + +
diff --git a/hedera-61850-gateway/docker-compose.yml b/hedera-61850-gateway/docker-compose.yml index 7dc20a7..76674a4 100644 --- a/hedera-61850-gateway/docker-compose.yml +++ b/hedera-61850-gateway/docker-compose.yml @@ -8,8 +8,6 @@ services: build: context: docker-image dockerfile: Dockerfile - # ports: - # - "443:443" volumes: - ./docker-image/hedera-interface.ini:/srv/hedera-61850-gateway/hedera-interface.ini