LogoLogo
TRIK StudioTRIKLego EV3Lego NXT
Русский
Русский
  • Справочный центр ТРИК
  • TRIK Studio
    • О TRIK Studio
      • Как узнать версию TRIK Studio
    • Начало работы и создание проекта
    • Интерфейс TRIK Studio
      • Главное меню TRIK Studio
      • Работа с графиками
      • Как открыть настройки робота?
      • Как изменить язык интерфейса TRIK Studio?
    • Настройки TRIK Studio
    • 2D-модель
      • Гибкая настройка 2D-модели
      • Добавление ограничений в 2D-модель
        • Примеры задания ограничений
    • Программирование на визуальном языке
      • Добавление и удаление блоков
      • Общие блоки
      • Связи между блоками
      • Синтаксис выражений в блоках
        • Типы языка TRIK Studio
          • Массив
        • Лексемы языка TRIK Studio
        • Операторы языка TRIK Studio
        • Константы
        • Сенсорные переменные
        • Встроенные функции
      • Редактирование свойств элементов
      • Подпрограммы
    • Программирование на текстовом языке
    • Упражнения
    • Сторонние утилиты
      • PuTTY
      • WinSCP
    • Горячие клавиши в TRIK Studio
    • Сбои из-за антивирусов
      • Антивирус Avast блокирует TRIK Studio. Что делать?
  • TRIK Studio Junior
    • О TRIK Studio Junior
      • Как узнать версию TRIK Studio Junior
    • Начало работы и создание проекта в TRIK Studio Junior
    • Интерфейс TRIK Studio Junior
      • Как заменить изображение «Исполнителя» в TRIK Studio Junior?
    • 2D-модель в TRIK Studio Junior
    • Настройки TRIK Studio Junior
    • Программирование на визуальном языке в TRIK Studio Junior
      • Добавление и удаление блоков в TRIK Studio Junior
      • Блоки в TRIK Studio Junior
      • Связи между блоками в TRIK Studio Junior
      • Синтаксис выражений в блоках в TRIK Studio Junior
      • Редактирование свойств элементов в TRIK Studio Junior
      • Подпрограммы в TRIK Studio Junior
    • Упражнения в TRIK Studio Junior
  • Интеграции
    • PyCharm
      • Запуск 2D-модели в TRIK Studio из PyCharm
    • Sublime Text
      • Запуск 2D-модели в TRIK Studio из Sublime Text
      • Загрузка программ на нескольких роботов ТРИК из Sublime Text
    • VSCode
      • Запуск 2D-модели в TRIK Studio из VSCode
      • Загрузка программ на нескольких роботов ТРИК из VSCode
  • Контроллер ТРИК
    • О контроллере ТРИК
      • Скриншот экрана контроллера ТРИК
    • Обновление встроенного программного обеспечения контроллера ТРИК
      • Как узнать версию встроенного ПО контроллера ТРИК?
    • Меню контроллера ТРИК
    • Подключения по Wi-Fi к контроллеру ТРИК
      • Подключение контроллера ТРИК к компьютеру и смартфону
      • Подключение контроллера ТРИК к TRIK Studio
      • Взаимодействие контроллеров ТРИК
        • Пример решения задачи по взаимодействию двух роботов
    • Подключение к контроллеру ТРИК с помощью UART
    • Запуск программ и их загрузка на контроллер ТРИК
    • Программирование ТРИК на визуальном языке
      • Блоки ТРИК
      • Сенсорные переменные для контроллера ТРИК
    • Программирование ТРИК на Python и JavaScript
      • Объект «brick»
        • Класс «accelerometer»
        • Класс «battery»
        • Класс «colorSensor»
        • Класс «display»
        • Класс «encoder»
        • Класс «gyroscope»
        • Класс «keys»
        • Класс «led»
        • Класс «lineSensor»
        • Класс «motor»
        • Класс «objectSensor»
        • Класс «marker»
        • Класс «sensor»
        • Класс «irCamera»
      • Объект «script»
      • Объект «mailbox»
      • Объект «gamepad»
      • Объект «Threading»
      • Функция getPhoto
      • Функция include
    • Веб-интерфейс контроллера ТРИК
    • Подключение устройств к ТРИК и работа с ними
      • Подключение и работа с видеомодулем
      • Тестирование подключенных к контроллеру ТРИК устройств
      • Настройка работы USB-камеры с контроллером ТРИК
      • Съемка изображений на камеру ТРИК и использование их в TRIK Studio
      • Работа с аккумулятором и зарядным устройством
  • Контроллер LEGO EV3
    • O LEGO EV3
    • Подключение контроллера LEGO EV3 к TRIK Studio
    • Блоки LEGO EV3
    • Сенсорные переменные для контроллера LEGO EV3
    • Запуск программ и их загрузка на контроллер LEGO EV3
    • Программирование LEGO EV3 для Virtual Robotics Toolkit в TRIK Studio
  • Контроллер LEGO NXT
    • О LEGO NXT
    • Прошивка контроллера LEGO NXT
    • Подключение контроллера LEGO NXT к TRIK Studio
    • Блоки LEGO NXT
    • Сенсорные переменные для контроллера LEGO NXT
    • Программирование LEGO NXT на C
    • Запуск программ и их загрузка на контроллер LEGO NXT
  • Квадрокоптер Пионер
    • О квадрокоптере Геоскан Пионер
    • Блоки квадрокоптера Геоскан Пионер
  • TRIK Gamepad
    • О TRIK Gamepad
      • Приложение TRIK Gamepad
      • Утилита TRIK Gamepad
    • Управление роботом с пульта
  • Feedback
    • Действия при неправильной работе TRIK Studio или контроллера ТРИК
    • Задать вопрос
    • trikset.com
Powered by GitBook
On this page
  • Структура написания ограничений
  • <constraints>...</constraints>
  • <timelimit/>
  • <constraint>...</constraint>
  • <event>...</event>
  • <init>...</init>
  • Условия
  • <condition>...</condition>
  • <conditions>...</conditions>
  • Атомарные условия
  • <equals>...</equals>
  • <notEqual>...</notEqual>
  • <greater>...</greater>
  • <less>...</less>
  • <inside/>
  • <settedUp/> и <dropped/>
  • <timer/>
  • Типы переменных и арифметические операции
  • <int/>, <double/>, <string>, <bool/>
  • <variableValue/>
  • <objectState/>
  • <typeOf/>
  • <minus>..</minus>, <abs>...</abs>
  • <sum>, <difference>, <min>, <max>
  • Триггеры
  • <trigger>...</trigger>
  • <fail/>
  • <success/>
  • <setter>...</setter>
  • <setUp/>, <drop/>
  • <message/>
  • Названия датчиков
  • Дополнительные свойства робота
  • Работа с экраном контроллера
  • Пример добавления ограничений

Was this helpful?

Export as PDF
  1. TRIK Studio
  2. 2D-модель

Добавление ограничений в 2D-модель

PreviousГибкая настройка 2D-моделиNextПримеры задания ограничений

Last updated 1 month ago

Was this helpful?

Для подготовки для учеников существует возможность внесения ограничений с помощью .

Ограничения бывают трех видов:

  1. Временны́е. Например, лимит времени на исполнение задачи или конкретное действие в конкретный временной отрезок.

  2. Пространственные. Например, добавление регионов («Старт», «Финиш») или запрет / принуждение робота, его датчика или какого-то подвижного предмета находиться в определенные промежутки времени в определенном месте.

  3. Ограничения на устройства. Например, ограничение на набор датчиков или на поведение устройств.

Структура написания ограничений

Для описания ограничений используется главный тег , в который вписываются все ограничения. Используется как контейнер. Ограничения описываются внутри тега, каждый дочерний тег должен быть одним из четырех:

Тег

Описание

Временное ограничение.

Ограничение с произвольным условием, при нарушении которого будет выдана заданная ошибка.

Основной инструмент задания динамических ограничений. Используется как контейнер.

Безусловное событие, выполняющееся перед началом выполнения программы.

<constraints>...</constraints>

Основной тег, в который вписываются все ограничения. Используется как контейнер.

<constraints>
     <!-- Временное ограничение -->
     <timelimit value="30000"/>
     
     <!-- Ограничение с условием. При нарушении условия будет выдана ошибка -->
     <constraint checkOnce="true" failMessage="Робот должен находиться на старте перед запуском!">
          <inside objectId="robot1" regionId="start_zone"/>
     </constraint>
     
     <!-- Инициализация переменной x со значением 2 -->
     <init>
          <setter name="x">
               <int value="2"/>
          </setter>
      </init>

</constraints>

<timelimit/>

Временное ограничение. Является обязательным.

Атрибуты

Атрибут

Описание

value="значение"

Количество миллисекунд, через которое исполнение будет прекращено и выдана ошибка «Превышен лимит времени».

Синтаксис

<timelimit value="35000"/>

<constraint>...</constraint>

Ограничение с произвольным условием, при нарушении которого будет выдана заданная ошибка. Может использоваться как контейнер. Имеет один дочерний тег: <conditions>...</conditions>.

Атрибуты

Атрибут

Описание

checkOnce="true"

Логический атрибут. Если в значении стоит true, то ограничение будет проверено 1 раз при старте программы и больше проверяться не будет.

Полезно, например, если нужно 1 раз проверить, что датчики расставлены верно, а дальше во время исполнения ничего не поменяется.

failMessage="Ошибка!"

Сообщение об ошибке, которое будет показано при нарушении ограничения.

Синтаксис

<constraint checkOnce="true" failMessage="Робот должен находиться на старте перед запуском!">
<!-- Проверяет при запуске, что на порту А1 установлен инфракрасный датчик расстояния -->
<constraint checkOnce="true" failMessage="У робота должен быть установлен инфракрасный датчик расстояния на порту А1">
    <equals>
        <typeOf objectId="robot1.A1"/>
        <string value="twoDModel::robotModel::parts::RangeSensor"/>
    </equals>
</constraint>
<!-- Проверяет, что робот находится в допустимом регионе на протяжении всего времени выполнения программы -->
<constraint failMessage="Робот покинул допустимую зону!">
    <inside objectId="robot1" regionId="warzone"/>
</constraint>

<event>...</event>

Основной инструмент задания динамических ограничений. Используется как контейнер.

Атрибуты

Атрибут

Описание

settedUpInitially="true"

Атрибут, позволяющий указать взведено ли событие при старте программы. Событие может быть взведено или спущено (setted up и dropped). Во взведенном состоянии событие выполняет свой триггер по выполнению своего условия, в спущенном оно просто игнорируется системой. Значение по умолчанию — false.

id="finish checker"

Уникальный идентификатор события. По этому идентификатору можно обращаться к данному событию из других. Опциональный.

dropsOnFire = "true"

Логический атрибут, который указывает, продолжать ли быть событию взведенным после его срабатывания или нет. Опциональный. Значение по умолчанию -- true.

Синтаксис

<event id="finish checker" settedUpInitially="false">
	<condition>
		<inside objectId="robot1" regionId="finish"/>
	</condition>
	<trigger>
		<success/>
	</trigger>
</event>

<init>...</init>

Безусловное событие, выполняющееся перед началом выполнения программы.

Пример

<!-- Перед началом выполнения программы заводим переменную "my_value" со значением два -->
<init>
    <setter name="my_value">
        <int value="2"/>
    </setter>
</init>

Условия

<condition>...</condition>

Внутри этого тега описывается проверяемое условие.

Пример

<condition>
    <!-- Внутри тега описано условие равенства двух значений -->
    <equals>
        <objectState object="robot1.display.smiles"/>
        <bool value="true"/>
    </equals>
</condition>

<conditions>...</conditions>

Используется для создания составных условий. Обязательным атрибутом должна быть указана логическая связка. Связкой может быть and или or. Отрицание выражения задается тегом <not> без атрибутов. Среди подвыражений могут также встречаться другие элементы <conditions>.

Атрибуты

Атрибут

Описание

glue="and"

Логическая связка.

Синтаксис

<conditions glue="and">
   <!-- Условие1 -->
   <!-- Условие2 -->
   <!--    ...   -->
   <!-- УсловиеN -->
</conditions>

<conditions glue="and">
   <not>
      <!-- Условие1 -->
   </not>
</conditions>

<conditions glue="and">
   <timer timeout="1000" forceDropOnTimeout="true"/>
   <conditions glue="or">
      <greater>
         <objectState object="robot1.display.labels.size"/>
         <int value="20"/>
      </greater>
      <less>
         <objectState object="robot1.display.labels.size"/>
         <int value="19"/>
       </less>    
    </conditions>
</conditions>

Атомарные условия

Атомарное условие представляет собой один из следующих элементов:

Тег

Описание

Операции сравнения значений.

Позволяет задавать пространственные ограничения.

Позволяет проверить, взведено событие или нет.

Позволяет задать время в мс, после которого данное условие считается истинным.

<equals>...</equals>

Равно. Операция сравнения значений функциональных символов. Может использоваться как контейнер.

Синтаксис

<equals>
	<objectState object="robot1.display.labels.first.text"/>
	<string value="finish"/>
</equals>

<notEqual>...</notEqual>

Не равно. Операция сравнения значений функциональных символов. Может использоваться как контейнер.

Синтаксис

<notEqual>
	<objectState object="robot1.display.labels.first.text"/>
	<string value="finish"/>
</notEqual>

<greater>...</greater>

Больше. Операция сравнения значений функциональных символов. Может использоваться как контейнер.

Синтаксис

<greater>
	<objectState object="robot1.display.labels.size"/>
	<int value="0"/>
</greater>

<less>...</less>

Меньше. Операция сравнения значений функциональных символов. Может использоваться как контейнер.

Синтаксис

<less>
    <objectState object="robot1.display.labels.size"/>
    <int value="10"/>
</less>

<inside/>

Позволяет задавать пространственные ограничения.

Атрибуты

Атрибут

Описание

objectId="id"

id взятого объекта.

regionId="id"

id взятого региона.

objectPoint="center|all|any"

Осуществляет проверку того, что:

center — центр объекта находится в зоне, all — все точки объекта находятся в зоне, any — хоть какая-то точка объекта находится в зоне

Синтаксис

<!-- Задаем ограничение на то, что объект робот находится в регионе с id=”start” -->
<inside objectId="robot1" regionId="start"/>

<settedUp/> и <dropped/>

Позволяет проверить, взведено событие или нет.

Атрибуты

Атрибут

Описание

id="event1"

Идентификатор проверяемого события

Синтаксис

<!-- Условие, что событие с id=”event1” взведено -->
<condition>
    <settedUp id="event1"/>
</condition>

<!-- Условие, что событие с id=”event2” опущено -->
<condition>
    <dropped id="event2"/>
</condition>

Пример

В условиях события “check event” проверяется, что другое событие с id=”Try move” находится во взведенном состоянии, а событие с id=”Go back” опущено и не выполняется. Если оба эти условия после проверки возвращают значение true, то программа успешно завершается.

<event id="check event" settedUpInitially="true">
    <conditions glue="and">
        <settedUp id="Try move"/>
        <dropped id="Go back"/>
    </conditions>
    <trigger>
        <success/>
    </trigger>
</event>

<timer/>

Предикат, который начинает выдавать true, когда с момента взведения данного события прошло заданное время, а до этого момента выдает false.

Атрибуты

Атрибут

Описание

timeout="1000"

Промежуток времени, через которой данный предикат станет истинным. Обязательный, значение должно быть неотрицательным и целочисленным.

forceDropOnTimeout="true"

Логический атрибут, позволяющий опустить событие, которое имеет в условии данный таймер. Если выставлен в true, событие будет опущено даже при наличии других активных таймеров и невыполненных условий. Опциональный. Значение по умолчанию -- true

Синтаксис

<timer timeout="1000" forceDropOnTimeout="false"/>

Пример

Рассмотрим использование <timer/> c различными значениями атрибута forceDropOnTimeout .

В событии “check region” проверяются временное и пространственное ограничения. Первое условие (timer) становится истинным спустя 1000мс, а до этого момента ложно. После этого его значение больше не изменяется. Второе условие (inside) проверяет, что робот находится в регионе с id=”start_zone”. В тот момент, когда оба этих условия будут выполнены одновременно, программа будет выполнена успешно.

1. Т. к. атрибут forceDropOnTimeout равен "false", то после заданного количества времени событие будет продолжать оставаться взведенным и ждать выполнения второго условия.

<event id="check region" settedUpInitially="true">
    <conditions glue="and">
        <timer timeout="1000" forceDropOnTimeout="false"/>
        <inside objectId="robot1" regionId="start_zone"/>
    </conditions>
    <trigger>
        <success/>
    </trigger>
</event>

2. Т. к. атрибут forceDropOnTimeout равен "true", то после заданного количества миллисекунд событие будет опущено, несмотря на наличие .другого условия. Таким образом, если в момент времени 1000 мс робот не находится в нужном регионе, то сообщение об успешном выполнении не будет выведено даже в случае, если робот окажется там спустя некоторое время.

<event id="check region" settedUpInitially="true">
    <conditions glue="and">
        <timer timeout="1000" forceDropOnTimeout="true"/>
        <inside objectId="robot1" regionId="start_zone"/>
    </conditions>
    <trigger>
        <success/>
    </trigger>
</event>

Типы переменных и арифметические операции

Переменная

Описание

Целочисленная, дробная, строковая и логическая константы.

Значение переменной.

Взять состояние объекта.

Взять метатип объекта с заданным идентификатором.

Унарные арифметические функции, имеют ровно 1 дочерний элемент, значение которого должно быть целочисленным.

Бинарные арифметические функции, имеют ровно 2 дочерних элемента, значение каждого из которых должно быть целочисленным.

<int/>, <double/>, <string>, <bool/>

Задание константы.

Атрибуты

Атрибут

Описание

value="0″

Значение заданной константы.

Синтаксис

<int value="0"/>

<string value="finish"/>

<variableValue/>

Значение переменной.

Возможно взятие свойства какой-либо переменной, для этого используется точка. Например, значение rect.width вернет ширину прямоугольника, сохраненного в переменной rect.

Атрибуты

Атрибут

Описание

name="my_value"

Имя переменной

Синтаксис

<variableValue name="rotation"/>

<objectState/>

Взять состояние объекта.

Атрибуты

Атрибут

Описание

object="robot1.display.labels.size"

id взятого объекта.

Синтаксис

<objectState object="robot1.display.labels.first.text"/>

Пример

<!-- Присвоим переменной rotation значение угла поворота робота -->
<setter name="rotation">
     <objectState object="robot1.rotation"/>
 </setter>
<!-- Проверяем равно ли значение переменной rotation значению угла поворота робота -->
<equals>
   <variableValue name="rotation"/>
   <objectState object="robot1.rotation"/>
</equals>

<typeOf/>

Взять метатип объекта с заданным идентификатором. Например: если взять typeOf объекта wall с id=777, то он вернет, что тип этого объекта wall.

Чаще всего этот элемент будет нужен для проверки типа подключенных датчиков и моторов.

Атрибуты

Атрибут

Описание

objectId="id"

Уникальный идентификатор взятого объекта.

Синтаксис

<typeOf objectId="robot1.A3"/>

<minus>..</minus>, <abs>...</abs>

Унарные арифметические операции отвечающие за изменение знака и взятие модуля числа.

Синтаксис

<minus>
    <objectState object="robot1.rotation"/>
</minus>

<abs>
    <objectState object="robot1.rotation"/>
</abs>

Пример

<!-- Модуль разности переменной rotation и значения угла поворота робота -->
<abs>
    <difference>
        <variableValue name="rotation"/>
        <objectState object="robot1.rotation"/>
    </difference>
</abs>

<sum>, <difference>, <min>, <max>

Сумма и разность значений. Минимальное и максимальное значение.

Пример

<!-- Разность между переменной rotation и значением угла поворота робота -->
<difference>
       <variableValue name="rotation"/>
       <objectState object="robot1.rotation"/>
</difference>

<!-- Сумма переменной counter и единицы -->
<sum>
       <variableValue name="counter"/>
       <int value="1"/>
</sum>

Триггеры

Тег

Описание

Действие или группа действий, которые будут выполнены один или множество раз по факту выполнения условия события.

Показать ошибку пользователю, завершить проверку задания.

Показать пользователю сообщение об успешном прохождении задания и завершить проверку.

Установить значение переменной.

Взводит или опускает событие

Выводит текст

<trigger>...</trigger>

Действие или группа действий, которые будут выполнены один или множество раз по факту выполнения условия события.

Синтаксис

<trigger>
	<success/>
</trigger>

<fail/>

Показать ошибку, завершить проверку задания.

Атрибуты

Атрибут

Описание

message="Неверный ответ!"

текст выведенной ошибки

Синтаксис

<fail message="Неверный ответ!"/>

<success/>

Задание успешно пройдено.

Атрибуты

Атрибут

Описание

deferred="false"

Опциональный. По умолчанию равен "false". При выставлении его в true данный триггер не остановит выполнение программы, т. е. чекер дождется конца программы и, либо скажет, что программа выполнена успешно, если ошибок не было, либо выпадет с ошибкой в противном случае. Другими словами атрибут deferred не позволяет получить ошибку "Программа закончилась, но задание не выполнено": программа либо завершится с успехом, либо с содержательной ошибкой типа "Превышен лимит времени".

Синтаксис

<success/>

<setter>...</setter>

Установить значение переменной

Атрибуты

Атрибут

Описание

name="my_value"

Название переменной

Пример

<!-- Создаем переменную total_score со значением 0.-->
<setter name="total_score">
       <int value="0"/>
 </setter>

<!-- Добавляем к переменной total_score + 2. -->
<setter name="total_score">
       <sum>
              <variableValue name="total_score"/>
              <int value="2"/>
       </sum>
</setter>

<setUp/>, <drop/>

Взводит или опускает событие

Атрибуты

Атрибут

Описание

id="finish checker"

id выбранного события

Пример

<!-- Запустить событие "finish checker" -->
<triggers>
				<setUp id="finish checker"/>
</triggers>

<message/>

Выводит текст в консоль

Атрибуты

Атрибут

Описание

text="Hello, world!"

Необходимый текст

<trigger>
<message text="Hello, world!"/>
</trigger>

При срабатывании такого триггера в консоль робота будет выведен текст "Hello, world!"

Названия датчиков

Датчики для робота TRIK

Название

Описание

twoDModel::robotModel::parts::RangeSensor

Датчик расстояния

trik::robotModel::twoD::parts::TwoDLightSensor

Датчик освещенности

twoDModel::robotModel::parts::TouchSensor

Датчик касания

trik::robotModel::twoD::parts::LineSensor

Датчик линии

Датчики для робота Lego EV3

Название

Описание

twoDModel::robotModel::parts::RangeSensor

Датчик расстояния

twoDModel::robotModel::parts::LightSensor

Датчик освещённости

twoDModel::robotModel::parts::TouchSensor

Датчик касания

twoDModel::robotModel::parts::ColorSensorRed

Датчик цвета (красный)

twoDModel::robotModel::parts::ColorSensorGreen

Датчик цвета (зеленый)

twoDModel::robotModel::parts::ColorSensorBlue

Датчик цвета (синий)

twoDModel::robotModel::parts::ColorSensorPassive

Датчик цвета (пассивный)

twoDModel::robotModel::parts::ColorSensorFull

Датчик цвета EVX/NXT (цвет)

twoDModel::robotModel::parts::ColorSensorAmbient

Датчик цвета EV3 (рассеянный)

ev3::robotModel::twoD::parts::GyroscopeSensor

Гиродатчик

ev3::robotModel::twoD::parts::GyroscopeSensor

Компас

Дополнительные свойства робота

Свойство

Описание

robot1.rotation

Позволяет узнать текущий угол поворота робота

robot1.x и robot1.y

Позволяет узнать координаты робота

robot1.led.color

Позволяет узнать цвет диода

robot1.marker.isDown

Проверяет, что у робота установлен маркер и он рисует линию на поле. Возвращает значения true или false

robot1.shell.lastPhrase

Узнать текст, который сказал робот

Работа с экраном контроллера

Свойство

Описание

robot1.display.sadSmiles

Проверяет, что на экране контроллера установлен грустный смайлик. Возвращает значение true или false.

robot1.display.smiles

Проверяет, что на экране контроллера установлен веселый смайлик. Возвращает значение true или false.

robot1.display.labels.first.text

Текст сообщения (label), которое было выведено на экран первым.

robot1.display.labels.last.text

Тест сообщения (label), которое было выведено на экран последним.

robot1.display.labels.size

Узнать количество label-ов, выведенных на экран.

Пример

Проверяем, что на экран контроллера было выведено слово “сообщение”. Регистр слова важен.

<equals>
        <objectState object="robot1.display.labels.first.text"/>
        <string value="сообщение"/>
</equals>

Пример добавления ограничений

Стартовав в синем квадрате, необходимо проехать вдоль стены с помощью датчика расстояния ИК до красного квадрата.

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <world>
      <background />
      <walls>
         <!-- Стена -->
         <wall id="{wall1}" end="300:150" begin="0:100" />
         <wall id="{wall2}" end="550:100" begin="300:150" />
         <wall id="{wall3}" end="650:200" begin="550:100" />
         <wall id="{wall4}" end="850:300" begin="650:200" />
         <wall id="{wall5}" end="1200:300" begin="850:300" />
         <wall id="{wall6}" end="1600:50" begin="1200:300" />
      </walls>
      <skittles />
      <balls />
      <colorFields />
      <images />
      <regions>
         <!-- Регионы -->
         <region visible="true" id="finish" x="1300" color="#ff0000" text="Finish" type="rectangle" width="300" textX="0" textY="0" y="-200" filled="true" height="300" />
         <region visible="true" id="start_zone" x="-50" color="#0000ff" text="Start" type="rectangle" width="150" textX="0" textY="0" y="100" filled="true" height="-150" />
         <region visible="false" id="warzone_1" x="-50" color="#ffff00" text="warzone1" type="rectangle" width="650" textX="0" textY="0" y="-50" filled="true" height="200" />
         <region visible="false" id="warzone_2" x="600" color="#ffff00" text="warzone2" type="rectangle" width="250" textX="0" textY="0" y="0" filled="true" height="250" />
         <region visible="false" id="warzone_3" x="850" color="#ffff00" text="warzone3" type="rectangle" width="750" textX="0" textY="0" y="50" filled="true" height="250" />
      </regions>
   </world>
   <robots>
      <!-- Описание робота -->
      <robot id="trikKitRobot" position="0:0" direction="0">
         <sensors>
            <sensor port="A1###input###А1###sensorA1" position="75:25" type="trik::robotModel::parts::TrikInfraredSensor" direction="45" />
            <sensor port="M3###output###JM3$$$C$$$3###" position="75:25" type="kitBase::robotModel::robotParts::Motor" direction="0" />
            <sensor port="M4###output###JM4$$$D$$$4###" position="75:25" type="kitBase::robotModel::robotParts::Motor" direction="0" />
         </sensors>
         <startPosition id="{ee2c46c1-23fc-4cda-98f4-77d9de775305}" x="25" y="25" direction="0" />
         <wheels left="M3###output###М3###" right="M4###output###М4###" />
      </robot>
   </robots>
   <constraints>
      <!-- Лимит на выполнение программы (30 секунд) -->
      <timelimit value="30000" />
      <!-- Зональное ограничение на начало езды. Проверяется один раз в начале программы -->
      <constraint checkOnce="true" failMessage="Робот должен находиться в синем квадрате перед запуском!">
         <inside regionId="start_zone" objectId="robot1" />
      </constraint>
      <!-- Ограничение на наличие и тип датчиков -->
      <constraint checkOnce="true" failMessage="Должен быть подключен только Датчик расстояния ИК на A1">
         <conditions glue="and">
            <equals>
               <typeOf objectId="robot1.A1" />
               <string value="trik::twoDModel::robotModel::parts::RangeSensor" />
            </equals>
            <equals>
               <typeOf objectId="robot1.A2" />
               <string value="undefined" />
            </equals>
            <equals>
               <typeOf objectId="robot1.A3" />
               <string value="undefined" />
            </equals>
            <equals>
               <typeOf objectId="robot1.A4" />
               <string value="undefined" />
            </equals>
            <equals>
               <typeOf objectId="robot1.A5" />
               <string value="undefined" />
            </equals>
            <equals>
               <typeOf objectId="robot1.A6" />
               <string value="undefined" />
            </equals>
            <equals>
               <typeOf objectId="robot1.D1" />
               <string value="undefined" />
            </equals>
            <equals>
               <typeOf objectId="robot1.D2" />
               <string value="undefined" />
            </equals>
         </conditions>
      </constraint>
      <!-- Контроль езды робота -->
      <constraint failMessage="Робот попытался выехать из разрешенной зоны!">
         <conditions glue="or">
            <inside regionId="warzone_1" objectId="robot1" />
            <inside regionId="warzone_2" objectId="robot1" />
            <inside regionId="warzone_3" objectId="robot1" />
         </conditions>
      </constraint>
      <!-- Событие, проверяющее не заехал ли робот в зону финиша -->
      <event settedUpInitially="true">
         <condition>
            <timer timeout="100" forceDropOnTimeout="true" />
         </condition>
         <trigger>
            <setUp id="finish checker" />
         </trigger>
      </event>
      <!-- Событие, оповещающее об успешном выполнении программы -->
      <event id="finish checker" settedUpInitially="false">
         <condition>
            <inside regionId="finish" objectId="robot1" />
         </condition>
         <trigger>
            <success />
         </trigger>
      </event>
   </constraints>
</root>

Событие - это просто пара (, ).

Теперь обсудим, какими могут быть условия в элементах и . Условия задаются с помощью тега в случае, если проверяется только одно из , или тега , если проверяется составное условие.

, , ,

упражнений
редактирования XML-файла
Структура описания ограничений
Условия
Атомарные условия
Типы переменных и арифметические операции
Триггеры
Названия датчиков
Дополнительные свойства робота
Работа с экраном контроллера
Пример добавления ограничений
<constraints>…</constraints>
условие
триггер
<constraint>
<event>
<condition>
атомарных условий
<conditions>
timelimit
constraint
event
init
equals
notEqual
greater
less
inside
settedUp и dropped
timer
int, double, string, bool
variableValue
objectState
typeOf
minus, abs
sum, difference, min, max
trigger
fail
success
setter
setUp, drop
message