Nxt-g

NXT-G

Графическая среда программирования, созданная специально для популярного робототехнического комплекта Lego Mindstorms NXT.

Конструктор LEGO Mindstorms NXT, разработанный с участием сотрудников Массачусетского технологического института, включает в себя: ПО NXT-G, интеллектуальный микрокомпьютер NXT Brick, три интерактивных сервопривода, набор датчиков (нажатия, ультразвуковой и цветовой) и свыше 600 различных деталей. Микрокомпьютер оснащен ЖК-дисплеем и клавишами управления, имеет три порта для приводов, интерфейсы для связи с компьютером – Bluetooth и USB, динамики и четыре разъема для датчиков.

Графическая среда NXT-G в свою очередь используется для программирования модуля NXT Brick.

Данный софт имеет интуитивно понятный интерфейс, создание программ управления роботами напоминает создание блок-схем и осуществляется с помощью специальных блоков, размещаемых на LEGO-балках вдоль оси последовательности действий.

Порядок выполнения программы определяется порядком следования блоков. Подключение новых компонентов выполняется путем их «перетаскивания» с палитры программирования на LEGO-балку.

Каждый из иконок-блоков обладает набором уникальных характеристик, определяющих поведение робота. Например, блок «Движение», предназначенный для активации моторов, имеет параметры продолжительности хода и направления, а также мощность, передаваемую на двигатели.

В NXT-G имеются блоки: для арифметических операций (сложения, вычитания, умножения и деления), для таймеров, для переменных, для сравнения числовых значений (меньше, равно, больше). Присутствуют блоки, отвечающие за звуковые эффекты роботов или за возможность бесконечного повторения установленных действий и за их завершение по определенным событиям.

В программе возможно создание своих собственных компонентов, каждый из которых будет являться последовательностью стандартных блоков, объединенных вместе.

Кроме того платформа NXT-G включает в себя подробные инструкции по сборке огромного ряда моделей роботов LEGO; дополнительные инструменты для создания изображений, редактирования звуков и калибровки сенсоров; контроллер для передачи, запуска и остановки созданных программ и просмотра справочной информации о микрокомпьютере (ресурсах памяти, параметрах связи и т.д.). Имеется возможность дистанционного управления подключенного к ПК робота.

Среди основных достоинств среды визуального программирования – наглядность и простота в использовании, позволяющая быстро освоить ПО без особых знаний и усилий. Однако диапазон функциональных возможностей NXT-G весьма ограничен и требует для работы значительных ресурсов персонального компьютера. Последнее в свою очередь является существенной преградой при разработке сложных проектов.

Платформа NXT-G была разработана специально для LEGO специалистами компании National Instruments. Данная среда программирования создана на основе собственного продукта компании – программного обеспечения LabVIEW. Штаб-квартира корпорации National Instruments, являющейся мировым лидером в области разработки виртуальных приборов, находится в городе Остин (США, штат Техас).

Среда программирования NXT-G распространяется свободно. При первом подключении к NXT Brick необходимо указать пароль, используемый для связи с устройством.

Язык интерфейса программного обеспечения NXT-G только английский, русификатора нет.

Графическая среда предназначена для работы на платформах PC и MAC, реализована совместимость с операционными системами Apple Mac OS X (v 10.4 и выше) и Microsoft Windows (XP, Vista и 7). Среди требований к ресурсам ПК – процессор частотой не менее 1 ГГц, минимум 512 МБ ОЗУ и около 700 МБ свободного дискового пространства.

Распространение программы: бесплатная.

Официальный сайт NXT-G: http://www.lego.com

Скачать NXT-G

Обсуждение программы на форуме

Источник: http://cxem.net/software/NXT-G.php

Lego Mindstorms NXT 2.0. Обзор

Запустите программное обеспечение Mindstorms NXT 2.0. В открывшемся окне (Рис. 1.4) можно просмотреть видео “Getting Started Guide” (Руководство к быстрому старту) и “Software Overview” (Обзор программного обеспечения).

Если при разработке программ на NXT-G один компьютер используется несколькими пользователями, то удобно создать для каждого разработчика свой уникальный профиль, в котором будут храниться программы только этого разработчика. После установки Lego Mindstorms NXT 2.0 автоматически создаётся один профиль с именем Default (по умолчанию) (Рис. 1.5).

Рис. 1.5. Профиль по умолчанию

Пример 1.3. Создадим новый профиль Student. Для этого выберем пункт меню EditManage Profiles. В появившемся окне (Рис. 1.6) последовательно нажимаем на кнопку Create (по умолчанию для нового профиля будет предложено имя Profile-1), заполняем поле Name и нажимаем кнопку Close.

увеличить изображение
Рис. 1.6. Создание собственного профиля

Теперь можно выбрать свой уникальный профиль из списка (Рис. 1.7):

Рис. 1.7. Выбор собственного профиля

Задание 1.6. Удалите профиль Student и создайте профиль со своим именем. Перед дальнейшей работой выберите свой профиль.

Пользовательский интерфейс среды по умолчанию устанавливает для первой новой программы имя Untitled-1 (Безымянная-1). В дальнейшем номер каждой новой создаваемой Вами программы автоматически увеличивается на единицу. Однако более целесообразно использовать для своих программ уникальные “говорящие” имена.

В поле Create new program (Создать новую программу) введите Hello! и нажмите кнопку Go (Вперёд).

Рис. 1.8. Создание или открытие программы

Внимание! Экран NXT отображает текст только на английском языке, поэтому символы кириллицы в имени файла недопустимы.

В дальнейшем открыть уже созданную программу можно, выбрав её из списка в поле Open recent program (Открыть существующую программу) (Рис. 1.8).

Для создания и открытия файлов можно использовать и стандартные средства – комбинации клавиш Ctrl+N и Ctrl+O соответственно или воспользоваться меню File.

Вкладки в левой верхней части окна среды позволяют открыть Robo Center и My Portal (Рис. 1.9). Эти возможности мы оставляем за рамками настоящего пособия и рекомендуем читателю самостоятельно с ними ознакомиться. Просто нажмите на крестик, чтобы увеличить область программирования.

увеличить изображение
Рис. 1.9. Доступ к Robo Center и My Portal

При необходимости эти вкладки всегда можно включить.

В NXT-G реализован визуальный способ проектирования программ, что очень удобно для обучения. Программа составляется из блоков. Каждый блок представляет различные типы действий. Блоки можно настраивать.

Все блоки организованы и представлены в трёх палитрах программирования (Рис. 1.10) – “Common” (Общая), “Complete” (Полная) и “Custom” (Пользовательская). Одновременно можно работать только с одной палитрой.

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

Например, все блоки, которые отвечают за выполнение некоторого действия (Action), окрашены зелёным цветом, а блоки, которые отображают текущие значения датчиков – жёлтым цветом.

Цветовая окраска позволяет легко находить нужные блоки в палитре.

увеличить изображение
Рис. 1.10. Палитры блоков NXT-G

Блоки, которые используются наиболее часто, сгруппированы в палитре “Common”. Каждая иконка этой палитры является отдельным программным блоком, кроме иконки Wait, которая показывает шесть вариантов этого блока (Рис. 1.11):

увеличить изображение
Рис. 1.11. Выпадающий список вариантов блока Wait

Любой из вариантов блока Wait можно получить путём настроек блока.

Задание 1.7. Изучите всплывающие подсказки блоков палитры “Common”, наводя на них указатель мыши.

Полная палитра открывает доступ к 39 блокам, организованным в шесть категорий. Самая первая категория повторяет общую палитру. С остальными категориями мы познакомимся позднее на конкретных примерах.

Пользовательская палитра содержит блоки, которые Вы загрузили и создали самостоятельно. Работу с этой палитрой мы будем изучать в теме 6.

Источник: http://www.intuit.ru/studies/courses/14007/1280/lecture/24099?page=2

Элементы математической логики в среде NXT-G. Работа с данными

Данная статья посвящена изучению темы “Основы робототехники с Lego Mindstorms NXT 2.0”, непосредственно для начинающих, при изучении палитры данных: их настроек, возможностей и примеры программирования в среде NXT-G 2.0

Образовательная робототехника – это новая технология обучения, позволяет вовлечь в процесс инженерного творчества детей, начиная с младшего школьного возраста.

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

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

В данной статье мы рассмотрим, как реализовать перечисляемые навыки, используя лего-робота Lego Mindstorms NXT 2.0 и среду его программирования.

Данная среда программирования является графической (используя пиктограммы, для программирования лего-робота), что облегчает восприятие учащихся при изучении алгоритмизации и программировании.

Чтобы создать программу в данной среде необходимо выбрать нужную пиктограмму, или упрощенное его называют «блок», и перетащить его на коммутатор, который является объединяющей составляющей всей программы.

В данной среде существует множество блоков, которые отвечают за определенные действия робота см. таблицу 1.

Таблица 1. Описание палитры в среде Lego Mindstorms NXT 2.0

Название палитры Изображение палитры Название блоков/палитры, составляющих
Общая палитра 1 – блок движения2 – блок запись-воспроизведение3 – блок звук4 – блок дисплей5 – блок жди (имеются дополнительные блоки)6 – блок цикл7 – блок переключатель (условия)
Полная палитра 1 – общая палитра2 – палитра действий3 – палитра датчиков4 – палитра управления выполнением программы5 – палитра данных6 – палитра дополнения
Пользовательская палитра 1 – палитра моих блоков, созданная при установке программ на компьютер. Сюда по умолчанию помещаются созданные программные блоки пользователя2 – палитра загружаемых из Интернет блоков

Рассмотрим более подробно «палитру работы с данными» и один блок из «палитры дополнения» – перевод «числа в текст», а также их настройки (см. таблицу 2.).

Таблица 2. Описание блоков

Блок Назначение
Logic/Логика Команда Логика позволяет работать с логическими переменными, константами или значениями, переданными в блок от других команд через концентратор данных. К двум значениям может применяться одна из логических операций И (AND), ИЛИ (OR), ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR), ОТРИЦАНИЕ (NOT). При этом, если значения не передаются в команду, они задаются в параметрах для переменных А и В (галочка – истина, крестик – ложь). Изображение кругов внутри прямоугольника, называемых кругами Эйлера-Венна – это подсказка. Закрашенная оранжевым часть обозначает результат, который команда выдаст после применения выбранной операции.Настройки блока:
Math/Математика Команда Математика предназначена для расчетов. С ее помощью можно выполнять над числами различные операции: сложение, вычитание, умножение, деление, абсолютная величина (модуль) и извлечение квадратного корня. Внутри прямоугольника, в нижнем правом углу, отображается соответствующий символ выбранной операции. Входные параметры задаются теми же способами, что и у остальных команд этой группы, вводимые значения могут быть как положительными, так и отрицательными целыми (целое – число без десятичных величин). Результат применения команды – число (ответ, полученный после применения операции к значениям А и В). Например, если А равно 5, В равно 7, операция Сложение, то результатом работы команды будет число 12.Настройки блока:
Compare/Сравнение Команда Сравнение предназначен для сравнения, принимает четыре значения сравнения: больше, меньше, равно. Отметим только, что результат у нее логического типа, тогда как входные данные должны быть числовыми. Знак операции указывается в параметре Action (Действие).Настройки блока:
Rang/Диапазон Команда Диапазон предназначен для определения принадлежности числа к определенному диапазону чисел, или находится вне этого интервала. Данный блок может принимать два значения: в пределах интервала, за пределом. Задаваемый интервал должен быть числовым, как и проверяемое значение. Если значение входит (не входит) в интервал, команда передает в программу логическое значение Истина.Настройки блока:
Random/Случайное значение Команда Случайное значение является важным элементом теории программирования. В более сложных языках ее называют «Генератор случайных (псевдослучайных) чисел». Вам нужно указать диапазон, задав максимальное и минимальное значение в окне настройки параметров команды. Результатом ее работы будет случайное число из указанного диапазона.Настройки блока:
Variable/Переменная Команда Переменная, предназначена для хранения информации в виртуальной папке, которая существует в его памяти. Информацию, которую он может хранить может принимать следующие значения: логический, числовой и текстовый.Настройки блока:Мы также можем вводить собственные переменные, для этого нужно выбрать в меню Edit (Правка) à Define Variables (Определитель переменных) и появиться окно Edit Variables (Редактирование переменных) à Create (Создать), в которых и создаются новые переменные.Переменные могут изменять свои значения во время работы программы. Но тип значений переменной задается один раз, и в программе изменяться не может. (В более сложных языках возможно и это, но NXT-G не поддерживает функцию приведения типов). Переменную можно создать только для чтения значений, тогда ее содержимое менять будет запрещено. Чтобы снять запрет, в параметрах нужно указать вариант Write (Записать). В одной и той же программе переменная может быть и только для чтения, и для чтения и записи. Например, в начале программы Вы создали переменную V1 с параметром Read (только чтение), а в середине кода в еще одном блоке Variable указали для нее значение Write (Записать).
Constant/Константа Константы во многом похожи на переменные, но их главная особенность в том, что значение константы задается один раз и больше изменяться не может. Они также бывают трех типов: число, текст и логическое значение. По умолчанию Вы можете создать три константы, соответственно числового, текстового и логического типа.Настройки блока:Значения их устанавливаются в окне настройки параметров вручную. Для создания большего количества констант, как и в случае с переменными, есть Define Constants (Редактор констант), расположенный в меню Edit (Правка).В окне редактора можно создать, удалить или редактировать константу. После нажатия на кнопку Create (Создать) Вам нужно указать имя константы, ее тип и значение. Нажмите кнопку ОК. Ваша константа создана и автоматически добавлена к списку всех констант блока Constant и данное окно можно закрыть.
Number to Text /Число в текст Команда Число в текст, прежде всего, относится к «палитре дополнения», которая позволяет преобразовать число в текст, например для вывода на экран дисплея.Настройки блока:

Каждый из перечисленных блоков можно управлять динамически, подключив так называемую «шину данных» (от концентраторов данных одних блоков к концентраторам данных других блоков). Для этого нужно, предварительно поместить нужный блок в рабочую область, открыть концентратор данных блока, щелкнув по кнопке в нижней левой части блока (см.рис.1).

Рис. 1 Концентратор данных блока

Шины данных, передающие входящие данные на блок, подключены к разъемам, находящимся на левой стороне их концентраторов данных. Шины данных, передающие исходящие данные, подключены к разъемам, находящимся на правой стороне.

Рис. 2 Внешний вид разъемов данных и цветовая окраска шин данных

[A] Входной разъем

[B] Выходной разъем

[C] Числовая шина данных (желтая)

[D] Логическая шина данных (зеленая)

[E] Текстовая шина данных (оранжевая)

[F] Поврежденная шина данных (серая)

Если для входного разъема есть соответствующий выходной разъем (см. выше A), входящие данные будут проходить от входного разъема на выходной разъем без изменений.

В этом случае можно использовать выходной разъем, если входной разъем подключен к шине данных входа; подключение шины данных выхода к такому выходному разъему без подключенной шины данных входа приведет к «неисправности» шины данных выхода (она будет окрашена в серый цвет).

Каждая шина данных осуществляет обмен специфическими типами данных между блоками. Например, если шина данных перетянута с логического разъема на концентратор данным блока, ее можно подключить только к логическому разъему на концентраторе данных другого блока.

Рассмотрим два примера программ на применения рассмотренных блоков.

Пример 1. Даны два числа х=25 и у=-5, выведите на экран сумму этих двух чисел.

Программа реализации решения:

1 Используем математический блок с операцией (Operation) à сложение (Addition), в данном блоке используются две переменные А и В, то есть вводим наши значения в данные поля.
Далее, как ввели данные значения, мы воспользуемся блоком число в текст, что бы отобразить результат вычисления на дисплей лего-робота. После чего мы раскрыли концентратор данных блоков, из выходных данных математического блока () объединим с входными данными блока число в текст ().
2 В блоке дисплей выбираем действие (Actoin) à текст (Text), вводимый текст в данном случае можно не удалять, он удалиться автоматически, так как мы объединили выходные данные блока число в текст () с входными данными блока дисплей (), раскрыв концентратор данных блоков.
3 После блока дисплей, мы поставили блок ожидания, для того чтобы смогли увидеть результат вычисления в течение 3 секунд, то есть указав в пункте контроль (Control) à время (Time).

Примечание: Также в данной задаче можно было использовать переменн(-ую/-ые), для введения значений переменной х и у.

Пример 2. Даны два случайных числа хÎ[-25;0] и y=36. Вычислите значение и определите, принадлежит ли данное число данному отрезку [1;25].

Программа реализации решения:

1 Выбираем блок случайных значений, для того чтобы программа выбирало значение х из заданного отрезка [-25,0].
2 Математический блок используем для вычисления формулы |х|, то есть в пункте операция (Operation) à абсолютная величина (Absolute Value), причем значение А и В мы не вносим, так как значение А берется из выходных данных блока случайных значений, а значение В равно 0 (работаем с одной переменной).
3 Создали константу, используя блок константы, а именно в главном меню выбрали пункт править (Edit) à редактор констант (Define Constants), в появившемся окне (Edit Constants) нажимаем на кнопку создать (Create) и перед вами станут активны следующие пункты константы:- имя (Name);- тип данных(Datatype);- значение (Value).В данных пунктах указываем имя переменной у, типа число равное 36, и нажимаем на кнопку ОК, после чего можно закрыть данное окно.После чего в настройке блока константы в пункте действие (Actoin) à выберите из списка (Choose from list) и в поле лист (List) выберите нужную константу.
4 Математический блок используем для вычисления формулы, то есть в пункте операция (Operation) à квадратный корень (Square Root), причем значение А берется из выходных данных блока константы (), а значение В равно 0 (работаем с одной переменной).
5 Математический блок используем для вычисления формулы, то есть в пункте операция (Operation) à сложение (Addition), причем значение А берется из выходных данных математического блока(под номером 2), а значение В – выходных данных математического блока(под номером 4)
6 Блок диапазон используем для того чтобы определить принадлежит ли результат нашего вычисления отрезку [1,25], выбрав операцию (Operation) à в пределах интервала (Inside Range).
Далее, раскрыли концентратор блоков (диапазон, число в текст, переключатель) и объединим блок диапазон с блоком число в текст, что бы отобразить результат вычисления на дисплей лего-робота (используя блок дисплей), и с блоком переключателя (условием), чтобы сообщить соответствующую информацию на включения данного значения, а именно:- выходные данные блока диапазон (), с входными данными блока число в текст ().- выходные данные блока диапазон (), с входными данными блока переключатель(), который принимает значение в настройках данного блока контроль (Control) логическое значение (Logic).
7 В блоке дисплей выбираем действие (Actoin) à текст (Text), вводимый текст в данном случае можно не удалять, он удалиться автоматически, так как мы объединили выходные данные блока число в текст () с входными данными блока дисплей (), раскрыв концентратор данных блоков.
8 – 10 Блок ожидания, необходим для того чтобы смогли увидеть соответствующую информацию в течение 2 секунд, указав в пункте контроль (Control) à время (Time).
9 Блок переключателя (условия), как раннее было сказано, необходим чтобы, сообщить информацию на включения данного значения в отрезок [1,25], в соответствии «да» или «нет».
В блоке дисплей выбираем действие (Actoin) à текст (Text), в данном пункте вели текст «- Yes» и установили его позицию (Position) на дисплеи блока NXT, указав значение координат Х=22 и У=32, так же можно указать расположение текста по линии (Line).
В блоке дисплей выбираем действие (Actoin) à текст (Text), в данном пункте вели текст «- Not» и установили его позицию (Position) на дисплеи блока NXT, указав значение координат Х=22 и У=32.

Источник: https://novainfo.ru/article/1847

NXT-G: Создание и использование собственных блоков в среде NXT-G

Переведено и опубликовано с разрешения nxtprograms.com (translated and posted by permission by nxtprograms.com).

Что такое MyBlock?

В среде программирования NXT-G все блоки, установленные вместе с ней и доступные для создания программ для Lego Mindstorms NXT, расположены в двух палитрах инструментов Common (Базовая) и Complete (Полная).

Помимо стандартных блоков, среда NXT-G позволяет создавать свои собственные блоки, называемые MyBlocks (Мои Блоки). Эти блоки отличаются от остальных голубым цветом и после создания доступны в палитре Custom (Специальная). Каждый такой блок – последовательность других блоков, которые объедены в отдельный блок для упрощения использования этой последовательности в программе. В других языках программирования есть подобные сущности называемые «подпрограммами», «процедурами» или «функциями».

Рисунок 1: MyBlock отличается от остальных голубым цветом и после создания доступен в палитре Custom.

Когда используют MyBlock?

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

При использовании собственных блков, вам необходимо создать последовательность только один раз, и затем вы можете использовать ее сколько угодно раз в ваших программах – просто вставьте созданный MyBlock в нужное место.

Еще одно преимущество – та последовательность действий, которую вы помещаете в MyBlock, располагается в памяти NXT блока только один раз для каждой вашей программы, вне зависимости от того сколько раз в этой программе вы использовали этот блок. Таким образом, это позволяет вам экономить память, доступную для программ в довольно ограниченном объеме в NXT блоке.

Ну и наконец, вы можете использовать собственные блоки для того, чтобы просто разбить большую программу на кусочки для упрощения программирования. Даже если вы не планируете использовать эти кусочки повтороно, работа с маленькими программами в позволит вам сохранить и время и нервы из-за особенностей среды NXT-G.

В этой серии статей, будут рассмотрены несколько примеров создания и использования собственных блоков, начиная с очень простых примеров, затем, постепенно переходя к более сложным, в которых используются такие возможности как входные, выходные параметры и переменные, позволяющие создавать более универсальные собственные блоки. Пошаговая инструкция покажет возможности как создания так и тестирования сложных блоков. И, наконец, мы рассмотрим как вы можете настраивать свои собственные блоки, упорядочивать их и использовать совместно с другими разработчиками.

Создание вашего первого собственного блока

В первом примере MyBlock мы будет создавать блок, называемый BeepBeep, который будет воспроизводить два звуковых сигнала, и затем мы будет использовать этот блок в нашей программе совместно с другими блоками, обеспечивающих движение робота.

Создание MyBlock

Первым шагом для создания MyBlock является написание программы, в которой используется последовательность нужных блоков. Рисунок 2 показывается программу состоящую из пяти блоков, которые обеспечивают движение робота вперед, воспроизведение двух звуковых сигналов и, затем, снова движение вперед.

Три блока, выделенных в середине, ответственны за воспроизведение сигналов (блок Ожидание/Wait используется для паузы между сигналами). Мы преобразуем последовательность этих трех блоков в MyBlock с именем BeepBeep, что обеспечит нам повторное использование этой последовательности снова.

Рисунок 2: Последовательность блоков может выделена и преобразована в MyBlock для более легкого повтороного использования.
Как только вы получили рабочую программу, включающую поведение вашего будущего MyBlock, обведите прямоугольником выделения последовательность блоков, из которой будет состоять ваш собственныый блок, как это показано на Рисунке 2. Каждый выделенный блок при этом будет при этом обведен голубой рамкой. Чтобы сделать MyBlock из выделенных блоков, на панели инструментов выберите и нажмите «Create My Block» (“Создать собственный блок”) так, как показано на Рисунке 3, это приведет к появлению окна «My Block Builder» (“Конструктор собственных блоков”), изображенного на Риснуке 4.

Рисунок 3: После выделения блоков, нажмите «Create My Block» в панели инструментов для создания собственного блока.
«Конструктор собственных блоков» состоит из двух шагов. Первый шаг, изображенный на Рисунке 4, позволяет просмотреть содержимое собственного блока в области «Selected Blocks» (“Выделенные блоки”). На этом шаге вы должны задать имя для вашего блока в поле «Block Name» (“Название блока”) – в нашем случае BeepBeep. Выбирайте название для вашего блока так, чтобы оно ясно описывало его предназначение, но в то же время было коротким. Хотя длинные названия и не запрещаются, они будут обрезаны, когда блок будет отображаться в вашей программе, и поэтому их будет сложно читать. Вы можете также описать назначение вашего блока в поле «Block Description» («Описание блока»), хотя это и не обязательно Эта информация будет печататься вместе с последовательностью включенных блоков, если вы захотите распечатать содержимое вашего блока, используя команду «Print» (“Печать”) в меню «File» (“Файл”). Вы можете оставить это поле незаполненным и просто описать назначение вашего блока позже, рядом с последовательностью блоков, составляющих ваш MyBlock, используя инструмент «Comment» (“Комментарий”).

Нажмите кнопку «Next» (“Продолжить”), чтобы перейти ко второму шагу «Конструктора соственных блоков», который позволит определить иконку, для создания собственного отображения вашего блока. Нажатие кнопки «Finish» (“Завершить”) после первого шага позволит пропустить выбор иконки и тогда для вашего блока выберется стандартное отображание.

Рисунок 4: На первом шаге «My Block Builder» здайте имя вашего блока и опишите его назначение.
Второй шаг «Конструкторая собственных блоков» показан на Рисунке 5, он позволяет определить иконку, для создания собственного отображения вашего блока. Вы можете выбрать иконку из списка и перетащить ее на белую область в верхней части окна. Затем, перетаскивая иконку с помощью мышки (или с помощью кнопок управления курсором на клавиатуре) по полю, вы можете задать позицию иконки на отображении блока. Вы можете также изменять размер иконки, если будете тащить за черные уголки выделяющего прямоугольника. Если вы хотите, то можете выбрать больше чем одну иконку из списка и наложить их друг на друга для создания более оригинального отображения вашего блока. На Рисунке 5 две копии музыкальной ноты (вторая иконка в списке) используются для создания изображения, намекающего на то, что назначение блока – воспроизведение двух звуков. Нажмите «Finish» («Завершить»), чтобы закончить работу «Конструкторая собственных блоков» и создать ваш собственный блок.

Рисунок 5: На шаге «Icon Builder» (“Конструктор иконки”) вы можете задать отображение для вашего собственного блока.
Та измененная программа, что получиться после создания вашего MyBlock, показана на Рисунке 6. Три блока, составлющие теперь блок BeepBeep, замещены одним голубым MyBlock c изображением названия и иконки, которые вы выбрали для вашего блока. Такая программа будет делать все те же самые действия, которые делала раньше (двигаться вперед, воспроизвести два сигнала и двигаться снова вперерд), но теперь часть программы содержится внутри вашего собственного блока.

Заметьте: иногда после создания собственного блока в программе остается пустое пространство там, где располагались первоначальные блоки. Чтобы избавиться от пустого пространства вы можете сократить перекладину крепления блоков, поместив курсор в место, показанное на Рисунке 6 и передвинув его влево.

Рисунок 6: Лишнее пустое пространство, полученное после создания MyBlock, может быть уменьшено сокращением перекладины крепления блоков.

Просмотр и редактирование содержимого собственного блока

Как только блок BeepBeep создан, блоки, составляющие его, пропадают из основной программы (их не видно, но они все еще часть программы) – это можно увидеть на Рисунке 7.

Чтобы просмотреть или изменить содержимое созданного блока, вы можете дважы нажать на нужном MyBlock, что приведет к открытию его содержимого в новой вкладке редактора NXT-G, как это показано на Рисунке 8.

Это похоже на то, как будто вы открыли еще одну NXT-G программу, но при этом вкладка BeepBeep помечается двумя голубыми полосками, чтобы показать что это не обычная программа, а содержимое вашего собственного блока.

Рисунок 7: Чтобы просмотреть или изменить содержимое MyBlock, дважды кликните по нему.

Рисунок 8: Открытие MyBlock для просмотра или редактирования происходит в отдельной вкладке с именем вашего блока и двумя полосками, обозначающих, что это MyBlock.
Чтобы изменить содержимое MyBlock, просто добваляйте и изменяйте блоки и их последовательность в данной вкладке также как в обычной программе. Любые изменения сделанные в этой вкладке будут влиять на каждое вхождение вашего блока во всех программах, которые используют его, после того как эта программа (программы) скомпилирована и загружена заново на NXT блок.

Заметьте: После изменения содержимого вашего блока, любая программа, использующая его должна быть заново загружена на NXT блок, для того чтобы изменения вступили в силу, иначе программа останется неизмененной и будет использовать старое содержимое данного блока. Типичная ошибка после изменения MyBlock – это загрузка его собственного содержимого на NXT блок (из-за того что активная вкладка – вкладка блока, а не программы) вместо загрузки программы, испольщующей это блок, что не затронет поведение программ где этот блок используется.

Вставка вашего блока в программу

После создания MyBlock, NXT-G автоматически изменит изначальную программу для использования этого MyBlock вместо первичной последовательности блоков, как это показано на Рисунке 7 выше.

Сейчас вы можете также повторно использовать этот MyBlock, вставляя его в другие места в этой же программе или в другие программы. Для того чтобы вставить новый блок в программу, выберите Custom палитру (см. Рисунок 9).

Блоки созданные вами содержаться в самом верхнем меню блоков в Сustom палитре. Рисунок 10 показывает блок BeepBeep совместно с другими семью блоками, созданными мной. Блоки перечислены в этом меню в алфавитном порядке, согласно их названию.

Если вы используете несколько пользовательских профилей в NXT-G, каждый профиль будет содержать собственный список блоков, созданных в этом пользовательском профиле.

Рисунок 9: Чтобы вставить MyBlock а программу, выберите Custom палитру.

Рисунок 10: Самое верхнее меню в Custom палитре содержит все созданные вами блоки.
Собственные блоки выбранные в Custom палитре могут быть вставлены в программу таким же образом как и обычные блоки. Измененная программа на Рисунке 11 сейчас использует BeepBeep блок дважды. Если сравнивать такую программу с ее альтернативой, где то, что находится в блоке BeepBeep, вставлено непосредственно в программу дважды, то программа, использующая блок BeepBeep, короче, легче для чтения и занимает меньше места в NXT блоке.

Рисунок 11: Созданные блоки легко могут быть использованы повторно, уменьшая тем самым как время программирования, так и память в NXT блоке.

Источник: http://nxt33.blogspot.com/2013/04/nxt-g-nxt-g.html

NXT-G | ВАЛЛИ-БОТ

При  запуске  Lego  Mindstorms  NXT  появляется  основной  экран

Чтобы  увидеть интерфейс NXT-G и начать  с ним  работу, необходимо создать новую программу или открыть существующую.

Новая программа

Чтобы  создать  новую  программу,  напишите  её  название (напримерTEST) в  рамке под словами «Новая программа» и  затем нажмите кнопку «Далее>>». Чтобы открыть существующую программу, к которой вы недавно обращались, просто выберите программу из ниспадающего меню под словами ФайлОткрыть и затем нажмите кнопку Ок.

Интерфейс NXT-G  появляется,  как  только  создана  или  открыта программа («Самоучитель» уменьшает обзор интерфейса, можно временно скрыть его).

В результате получаем окно программы, состоящее из четырех  основных прямоугольников:  1)  рабочее поле программы, на  котором  расположен  командный  центр;  2)  палитра  команд;  3)  окно  настройки параметров команд; 4) окно просмотра общего вида программы.

Кроме  того,  сверху  находится  главное меню  и  пиктораммы переключения интерфейса  среды,  в частности пиктограмма  оранжевой трехмодульной  балки,  по  которой  можно  вернуться  в Robo Center. Стрелкой на рис. показана пиктограмма перехода к полной палитре команд. 

Перетаскивая  блоки  из  палитры  команд  на  рабочее  поле,  можно создавать программу. При этом близлежащие блоки автоматически связываются проводами, похожими на гладкие балки серии Technic, создавая  последовательность  выполнения  команд.  Этими же  балками,  придерживая клавишу Shift, можно строить ответвления для параллельных  задач.

В окне настройки параметров команд указывается, к какому порту подсоединено устройство,  а также в каком диапазоне  значений и в каком режиме  оно работает (для всех устройств по-разному). Внесенные параметры  в  виде миниатюрных  пиктограмм  отображаются  на  блоках команд в программе. 

Рассмотрим  пиктограмму  блока управления моторами «Движение» ,  параметры  которого  приведены  в окне настройки.Буквы  в  правом  верхнем  углу  блока (1)  показывают,  какие  из  портов  устройства NXT  будут  контролироваться.  Пиктограмма «стрелка» (2) дает направление движения  робота.

Пиктограмма «индикатор  мощности» (3)  показывает  уровень мощности. Скорость  робота может  также  зависеть  от прочих  условий, например  поверхности,  по  которой  он  движется,  а  также  движения  в гору или под гору.

Пиктограмма (4) определяет значение, установленное для  характеристики «Продолжительность»  вращения:  без  ограниченний, градусы, обороты или секунды.

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

Как правило, шина данных создается между  двумя  концентраторами.  На  подключаемых разъемах один из них должен возвращать  данные,  а  другой —  принимать  их.  Если  шину  подключить  неправильно,  на  несовместимые  разъемы,  то она будет выглядеть поврежденной, в виде пунктирной линии. Вот примеры подключении шин данных :

(A) — входной разъем,

(B) — выходной разъем,

(C) — числовая шина данных (желтая),

(D) — логическая шина данных (зеленая),

(E) — текстовая шина данных (оранжевая),

(F) — поврежденная шина данных (серая).

Есть еще несколько специфических блоков, которые  стоит упомянуть. Первый из них «Блок принятия решений», или «Ветвление».

Ветвления: по датчику нажатия (слева), по логическому или числовому значению (справа).

В приведенном примере (слева) в зависимости от состояния датчика нажатия (1) выполняется либо верхняя ветвь (2 — если нажат), либо нижняя (3 — если отпущен).

Любое  ветвление  с  помощью  окна  настройки  параметров  можно перенастроить  на  другое  условие. Например, можно  принимать  решение на  основании некоторого  значения (справа), подаваемого на специальный разъем. В этом  случае  значение должно поступить по логической или числовой шине данных от какого-то другого блока.

Ветвление может  отображаться  в двух  режимах:  1)  когда  видны  обе ветви (и  «Да»,  и  «Нет»), 2) с  отображением  только  одной из  выбранных  ветвей,  как на  рис. Это  может  быть  полезно  для  экономии места на экране, которого в NXT-G катастрофически не хватает. Режим определяется установкой флажка «Flat view»  в  левой  нижней  части  окна  настройки параметров.   

Следующий  блок,  с  которым  стоит  познакомиться,  это  цикл. Как правило, в NXT-G используются циклы либо с параметром, либо с постусловием.

Пиктограмма бесконечного цикла (слева), цикл по датчику освещенности (справа).

В качестве условия в правом нижнем углу пиктограммы (1) указывается  режим  повторений,  в  примере  слева  цикл  работает  бесконечно. Кроме того, циклы бывают с фиксированным числом повторений, по значению таймера, значению датчика, значению переменной.

В приведенном примере (справа) моторы B и C работают до тех пор, пока на датчике освещенности на 3-м порту не будет показано  значение  больше 50. При  этом  включен  режим  вывода  значения счетчика  повторений,  и  программист  может  подсоединить шину  данных к разъему в левом нижнем углу пиктограммы цикла.

Для  использования  переменных  в NXT-G  предусмотрен  блок Variable, находящийся в палитре Data .

 К единственному разъему (1) у него можно подключить  шину  данных,  по  которой  будет  передаваться значение .

  Направление передачи на чтение или запись (2) и  значение  переменной (3)  настраиваются  в  параметрах  блока.  По  умолчанию  присутствуют  всего три  переменных  трех  типов (1):  логика,  число  и текст.

Программист может  создать  свою переменную, воспользовавшись  пунктом  главного  меню Правка → Редактор переменных.

Настройка типа переменной.

Блок «Экран» Этот блок используется для вывода изображений, набора текстового фрагмента или рисования на дисплее NXT.
Блок «Цикл» Этот блок используется для повтора последовательностей команд. Назначьте условие, необходимое для завершения цикла: истекшее время, количество повторов, логическая команда или сигнал от датчика. Также можно задать бесконечное повторение цикла.
Блок «Движение» Этот блок предназначен для задания роботу прямолинейного движения вперед или назад, или для выполнения поворотов при движении по криволинейной траектории. Задайте дальность перемещения робота, используя параметр ” Время”.
Блок «Писать /Играть» Этот блок позволяет записывать параметры действия, выполненного роботом. Блок «Писать/Играть» «запоминает» количество оборотов, сделанных моторами робота, и затем воспроизводит это количество оборотов при выборе команды “Пуск” на Блоке «Писать/Играть» и запуске программы.
Блок «Звук» Этот Блок можно использовать для воспроизведения звукового файла или какого-либо одиночного звука. Чтобы составить мелодию из отдельных звуков, выстройте в ряд несколько Блоков “Звук”, каждый из которых настроен для воспроизведения различных звуков (нот).
Блок «Переключатель» Этот Блок используют для выбора одной из двух последовательностей команд. Например, если Блок «Переключатель» сконфигурирован под датчик касания, то он должен запустить одну последовательность Блоков в случае, если датчик нажат, и другую последовательность – если датчик не нажат.
Блок «Ожи-дание» Этот Блок придаёт роботу способность следить за окружающей его обстановкой, ожидая наступления определенных условий, чтобы продолжить свои действия. Воспользуйтесь движком, или введите число, чтобы задать пороговое значение времени или показания датчика.
Блок «Лампа» Этот блок предназначен для управления работой лампы. Вам понадобится один такой блок для включения лампы и ещё один блок для её выключения.
Блок «Мотор» Этот блок позволяет с высокой точностью управлять оборотами одного мотора. Вы можете повышать обороты до заданного значения, или снижать их вплоть до полной остановки мотора. Если снять флажок “До завершения”, программа может перейти к следующему блоку сразу же после того, как Блок «Мотор» включит мотор.
Блок «Отправить сообщение» Этот блок позволяет отправить сообщение с помощью беспроводной связи на другое устройство NXT.
Блок «Приём сообщений» Для получения сообщения в беспроводном режиме передачи задайте тип сообщения и номер почтового ящика, они должны быть такими же, как и у NXT, с которого сообщение передаётся. Исходящий из этого блока сигнал может быть как входящим сообщением, так и логическим значением “истина/ложь” (при сопоставлении входящего и тестового сообщения).
Блок «Цветная лампа» Блок “Цветная лампа” предназначен для управления лампой датчика цвета.
Блок «Датчик освещённости» Этот датчик фиксирует общую освещённость (рассеянный свет). Через шину данных датчик может передавать текущие значения освещённости или логический сигнал (“истина” или “ложь”), в зависимости от того, превышает текущий уровень освещённости пороговое значение, или он ниже.
Блок «Датчик оборотов» Этот блок подсчитывает количество градусов (в одном полном обороте 360 градусов) или количество полных оборотов вала мотора. По шинам данных Блок «Датчик оборотов» может передавать текущее количество градусов или оборотов, совершённых валом мотора и логический сигнал (“истина” или “ложь”), в зависимости от того, больше или меньше оборотов совершил мотор, по сравнению с заданным пороговым значением .
Блок «Датчик звука» Этот Блок является детектором звукового сигнала. По шинам данных Блок «Датчик Звука» может передавать текущее показание датчика звука и логическую команду (“истина” или “ложь”), в зависимости от того превышает текущее показание пороговое значение, или ниже его.
 «Датчик темпе-ратуры» Используя шины данных, этот блок может передавать текущее значение температуры и логический сигнал (“истина” или “ложь”) в зависимости от того, выше или ниже порогового значения находится текущее значение температуры.
Блок «Таймер» Когда программа начинает выполняться, три встроенных в NXT таймера автоматически начинают отсчет времени. Используя этот блок, можно выбрать следующие действия: снимать текущие показания времени или сбросить таймер для начала нового отсчета времени с нуля.
Блок «Датчик касания» Этот блок проверяет состояние датчика касания на определенном этапе выполнения программы. Он посылает зарегистрированный сигнал в виде логической команды (“истина” или “ложь”) через шину данных. Если датчик сработал, блок отправит команду “истина”; если датчик не сработал, блок отправит команду “ложь”.
Блок «Датчик расстояния» Этот блок может обнаруживать объекты на расстоянии до 250 см (100 дюймов). Используя шины данных, блок может передавать текущее значение ультразвукового сигнала и логическую команду (“истина” или “ложь”) в зависимости от того, выше или ниже текущий сигнал, чем пороговое значение срабатывания.
Блок «Датчик цвета» Блок “Датчик цвета” имеет два режима: один для распознавания цвета, а второй для измерения его интенсивности (то есть освещенности датчика). Используйте оба режима с Блоком переключателя, Блоком ожидания и Блоком цикла для формирования логического сигнала “истина” или “ложь”.
Блок «Стоп» Этот блок прекратит выполнение Вашей программы и остановит работу любых моторов, ламп или устройств, генерирующих звук.
Блок «Сравнение» Этот блок может определить, является ли число больше (>) или меньше (

Источник: http://valli-bot.minobr63.ru/node/17

Советы и хитрости NXT-G

Советы и хитрости NXT-G

Известно, что среда NXT-G довольно тяжелая и неповоротливая. На медленных компьютерах работа с ней превращается в мучение. С этим ничего нельзя поделать.

Существует несколько советов, которые позволят избежать многих досадных неприятностей при работе с данной программой. В этом разделе приведена подборка подсказок и приемов NXT-G, записанных Брайаном Дэвисом.

Это не “официальные” советы, а просто коллекция его собственных мыслей и правил использования NXT-G v1.1.

Первое правило NXT-G: не торопите редактор. Когда вставляете блок между уже существующими блоками, Вы можете перетащить его в нужное положение так, что “тень” размером  1×3 клеточки появится в правильном месте…

но не отпускайте блок, пока редактор не создаст для него место.

По неизвестным причинам, редактор при спешке чаще всего «теряется» и начинает ошибаться с расстановкой блоков, хотя и предполагается, что он запомнил последовательность всех произведенных действий.

Второе правило NXT- G (и всего остального на компьютере):“Сохраняйтесь как можно чаще”.

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

Не сохраняйте рабочие копии под одним и тем же именем, что и основной файл, сохраняйте “новые версии” программ (и My Blocks!), таким образом, Вы всегда сможете вернуться к предыдущей версии.

Третье правило NXT-G: используйте My Blocks. Они позволяют сохранить огромное количество памяти, способствуют хорошему программированию, делают код более читабельным и т.д.

Единственный недостаток My Blocks – иногда в редакторе они кажутся “поврежденными”, но компилятор все равно будет получать из них отличный код; это плохо выглядит, но хорошо работает.

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

4) Переключатели выглядят слишком большими в “плоской” форме – избавьтесь от них.

Форма «вкладок» более полезна (можно подсоединять/разсоединять связи в виде вкладок, при этом иметь более двух состояний) и более стабильна (возможно, потому что она намного ближе к тому, как NI реализует это в LabVIEW, в то время как “плоский” формат является специальной адаптацией для NXT- G).

4.

1) При проводном соединении в рамках снабженной вкладками структуры Switch, соединение хорошо работает в “первом” поле с вкладками (например, “истинное” поле логического Switch), но делает забавные “прямые провода в бесконечность” в других полях. Вы можете соединить объекты на луче последовательности позади Switch, затем выбрать весь объект (провода также) и перетащить его.

5) Не используйте переменные там, где каналы данных сделают это за вас. Каждый из нас на основании текстовых языков находит трудным избавиться от привычки использовать переменные, но в некоторых случаях NXT- G обрабатывает значения, передаваемые через канал данных, лучше, чем это делаются при наличии фактических переменных (ограничения: все переменные – общие, длинные имена переменных не отображаются).

6) При связывании блоков между собой с помощью каналов данных в Switches & Loops сначала целиком разверните все блоки, которые вы хотите связывать – сделав это один раз, вам не нужно будет больше тратить на это время (в прошлом подпрограмма ” crowbar & pin”). Затем используйте каналы связи так, как было Вами задумано (не просто “соединить две точки”). Щелчок в промежуточной позиции позволит “прикрепить” провод связи к одной точке и отрисовать его к следующему сегменту.

7) Старайтесь избегать использования многозадачных программ. Довольно часто они не нужны, к тому же они замедляют общее выполнение. Во-вторых, если NXT- G довольно хорошо работает при редактировании первой задачи…

то гораздо хуже работает со второй, третьей и т.д. Также если Вы решили разделить какую-то задачу посреди выполнения, то среда будет нормально отрабатывать ее до тех пор, пока Вы не захотите удалить/добавить что-то из задачи, которую вы разделили.

Если возможно, избегайте этого вообще.

8) Выводите отладочную информацию на экран. Это сделает вашу жизнь проще.

Использование собственных блоков (MyBlocks) для отладки не увеличит объем вашей программы значительно – в скомпилированном виде только одна копия MyBlock хранится в памяти, в остальных же местах программа просто обращается к этой памяти. Вывести текстовую строку на экран в нужной позиции: PrintLine.rbt. Вывести число строк на экран в нужной позиции: PrintNumber.rbt.

Простые Sound блоки, “подающие звуковой сигнал” в различных тонах, – еще один хороший пример отладки.

9) Опция клонирования существующего блока (или ряда блоков) копирует его вместе со всеми внутренними сохраненными настройками. Зажмите Ctrl и перетащите блок или группу блоков.

Другими словами, если Вам необходимо дублировать уже существующий на поле программирования блок “Motor B”, то Вам не нужно обращаться к панели, чтобы создать новый и переконфигурировать его должным образом, нужно просто использовать “клон-перетаскивание” существующего блока. 

10) Если Вы устали от того, что редактор слишком медленно работает, перемещая объекты, что  все значки на карте в нижнем правом углу экрана похожи на единичные пиксели… обратитесь к совету 3 (но прежде, чем сделаете это, снова последуйте правилу 2). 

11) Copy-and-Paste скорее не работает, чем работает. Используйте клонирование из совета 9, вместо Copy-and-Paste.

12) Для разработки значков My Block Вы можете использовать многократные перекрывающиеся значки, так же как и изменять их размеры. Для удаления же на Mac нужно выбрать значок, который хотите удалить, и нажать fn-delete (“функция удаления”), на PC – только “Delete”.

13) Если у Вас стали появляться незавершенные графические элементы в блоках Loop или Switch (например, “луч выполнения” не достигает конца блока Loop, когда вы используете блок Switch внутри блока Loop) – это сигнал того, что редактор начал “терять вещи из виду”.

Один из способов исправить – перетащить блок Switch целиком на пустое пространство и заменить его новым блоком (не спешите, помните про совет 1). Скорее всего, редактор вновь дорисует “луч выполнения” до конца. Также иногда удаление последнего элемента в блоке Loop может привести к тому, что в нем не будет отображаться достаточно пустого места для вставки нового блока. Чтобы исправить это, нужно удалить старый цикл и создать новый.

14) Операция Undo работает хорошо (вызывается из меню редактирования или с помощью сочетания клавиш), но редактор не хранит достаточно длинную историю изменений. Тем не менее, довольно часто Вы можете попробовать “отменить” последние изменения, которые привели к тому, что Ваша программа стала работать некорректно.

15) Вы не можете подключить связь к Wait (для программы нужно установить условие, которое не было известным во время компиляции) или Switch…

, но можно всегда использовать блоки Compare Logic для составления необходимого условия, и установить логический Switch, или подсоединить значение в Loop, которое выполняет некоторую внутреннюю проверку для получения логики, которая управляет Loop.

Значение состояния для Loop и Switch по умолчанию должно быть “control on logical”, поскольку это помогает избежать многих проблем.

16) Каналы данных можно разветвлять так, чтобы один выход мог вести к нескольким входам: просто начните вести новый “провод” от нужного выхода к соответствующему каналу данных и щелкните мышкой для соединения.

Будьте осторожны при удалении таких разветвляющихся каналов. Если выбрать канал, а потом нажать Delete – удалиться весь канал целиком со всех входов. Довольно трудно восстановить по памяти после этого все соединения, которые удалять не надо было. Если нужно удалить только одно ответвление – выберите соответствующий вход (курсор изменит свой внешний вид) и нажмите на него.

17) Когда никакой блок не выбран, клавиши “1”, “2” и “3” обозначают панели, к которым Вы можете перейти. Клавиша “Tab” переключает инструменты. 

18) Если возможно, не смешивайте структуру каталогов. NXT- G действительно хорош при поиске объектов (My Blocks, например), которые были перемещены…, но не всегда, и поиск занимает время, особенно когда Вы открываете программу.

19) Если необходимо опубликовать где-то всю Вашу программу целиком в виде картинки, а не .rbt файла, лучший способ это сделать – воспользоваться пунктом Печать.

Он предусматривает печать в html файл, при этом сама программа сохраняется в виде .png картинок. Если программа имеет вызовы подпрограмм (созданных через MyBlock) или блоки Выбор с вкладками – их содержимое будет сохранено в отдельные файлы, если Print Hidden Code будет выбрана.
Все картинки и .html файл будут сохранены в том же месте, где и сама программа.

Авторы: KoAl, teamhassenplug

Наверх

Источник: http://capitano.com.ua/index.php/nxt-2/item/58-sovety-i-khitrosti-nxt-g

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}