STATISTICA содержит два встроенных языка программирования STATISTICA BASIC и SCL (командный язык). Оба языка предназначены для работы в среде STATISTICA и содержат встроенные операции для обращения к таблицам исходных данных, таблицам результатов и графическим функциям.
Язык STATISTICA BASIC представляет собой простой и одновременно достаточно мощный язык программирования. С его помощью можно создать широкий спектр приложений, начиная от простых программ преобразования данных и кончая сложными пользовательскими процедурами комплексного анализа и вывода информации.
Этот язык программирования пригоден для решения больших вычислительных задач, поскольку обрабатываемые массивы данных могут иметь до 8 измерений и нет ограничений на размеры массивов. Таким образом, пользователь может использоваться всю доступную память и создавать процедуры, включающие операции с большими многомерными матрицами.
Встроенный язык STATISTICA BASIC доступен в любой момент анализа вместе с интегрированной средой, которая позволяет писать, редактировать, проверять, отлаживать (предварительно прогонять) и выполнять программы.
SCL 1. Введение и первая программа
Язык STATISTICA BASIC, как обычный язык программирования, поддерживает циклические операции и условные переходы, функции и подпрограммы, а также работу с динамическими библиотеками (DLL). В то же время он «понимает» структуру файлов данных системы STATISTICA и позволяет организовать интерактивную обработку данных в среде самой системы с помощью пользовательских диалоговых окон. С помощью этого языка пользователь может создавать свои собственные сложные программы анализа данных, одновременно используя готовые алгоритмы расчетов и построения графиков, предусмотренные в системе STATISTICA.
Командный язык SCL ( STATISTICA Command Language) предназначен для организации пакетной обработки данных и создания собственных приложений на основе процедур, содержащихся в системе STATISTICA. Для того чтобы пользователь мог при этом реализовать собственные алгоритмы расчетов, предусмотрена возможность интеграции языков STATISTICA BASIC и SCL.
Программы, написанные на встроенных языках системы STATISTICA, доступны в любом модуле системы и на любом этапе анализа данных, при этом их можно вызывать и выполнять как с помощью кнопок автозадач, так и непосредственно из окна редактирования. Пользователь также имеет возможность создавать собственные библиотеки функций и подпрограмм и таким образом значительно расширять предлагаемый набор процедур обработки данных и представления результатов.
Ввод и исполнение SCL-программ. STATISTICA может работать в «истинном» пакетном режиме как система, управляемая командами, с помощью встроенного языка управления приложениями SCL (STATISTICA Command Language), доступного в любом модуле системы из выпадающего меню Анализ. Можно ввести последовательность команд для выполнения определенных действий, а затем сколько угодно раз исполнять ее в пакетном режиме.
Возможен и другой способ действий — использование диалогового окна Мастер команд для быстрого выбора и ввода требуемого списка команд.
Непонятный SCL. Урок 1
Для написания и отладки «пакетов» команд используется интегрированная среда языка SCL. Она включает текстовый редактор, совмещенный с окном Мастер команд (см. иллюстрацию выше — кнопка Мастер команд на панели инструментов Командного языка), систему помощи по синтаксису языка с примерами и интегрированные средства проверки правильности программ (доступны из выпадающего меню Сервис).
Пользовательские расширения языка SCL. Программы на языке SCL могут включать не только предопределенные параметры и команды для выполнения действий по статистической обработке, управлению и графическому выводу данных (см. кнопки Справка: примеры и Справка: синтаксис на панели инструментов), но и пользовательские «команды», определенные с помощью инструмента Назначить клавиши (SendKeys) (в соответствии с правилами, принятыми в MS Visual BASIC).
Написанные таким образом программы могут выполнять, например, операции с буфером обмена (Копировать, Вставить), менять параметры вывода, принятые по умолчанию в различных процедурах, и выполнять другие функции.
SCL -программы могут также включать в себя программы и процедуры, написанные на языке STATISTICA BASIC (языке STATISTICA, предназначенном для преобразования данных и графиков и управления ими, который доступен из любого модуля пакета). Например, определенные пользователем графические или вычислительные процедуры на языке STATISTIС А В ASIС могут выполняться как часть пакета команд SCL.
Пользовательский интерактивный интерфейс для SCL-программ. Несмотря на то что в командном языке SCL не заложен в непосредственном виде специальный пользовательский интерактивный интерфейс, тем не менее для этих целей можно использовать программы на языке STATISTICA BASIC, вызываемые из SCL-npoграмм, например, для создания диалоговых окон, позволяющих выбирать переменные, файлы данных и т. п. в ходе выполнения программы (см. примеры в Электронном руководстве).
Исполняемый модуль STATISTICA. Командный язык содержит специальный Исполняемый модуль, позволяющий разрабатывать приложения «под ключ», которые вызываются двойным щелчком на значке соответствующего «пользовательского приложения» на рабочем столе Windows.
Эта возможность позволяет экономить время пользователя, когда многократно повторяется одна и та же процедура или последовательность процедур анализа, а также дает возможность использовать SСL-программы пользователями, которые не знакомы с соглашениями системы STATISTICA.
Чтобы создать такое приложение «под ключ», сначала нужно написать саму SCL-программу и сохранить ее обычным образом (например, в файле Program 1.sct). Затем в окне Диспетчер программ системы Windows нужно создать пиктограмму для исполняемого модуля с именем Sta_run.exe (оно находится в папке STATISTICA на диске).
В поле команд нужно задать имя SCL-программы, подлежащей исполнению (например, d:dataprogram1.scl’). Теперь при щелчке мышью на этом значке будет начинаться выполнение программы (в данном случае Program1.se!). Описанным способом можно создать любое количество пользовательских приложений, а с помощью окна Диспетчер программ дать им содержательные имена, соответствующие тем задачам анализа данных, которые эти приложения выполняют.
Источник: studfile.net
Эй, Симулятор! Покажи свой язык
Написанию этого материала способствовала статья Зачем язык Verilog программисту микроконтроллеров, где описывается возможность тестирования алгоритма (Си файла) проекта микроконтроллера в Verilog проекте. Т.е. симулятор Verilog HDL взаимодействует с Сишным кодом микроконтроллера и тестирует реализованный алгоритм на возможные логические ошибки.
Подобные методы отладки кода для микроконтроллеров уже реализованы производителями. За всех не поручусь, но могу показать на примере симулятора MPLAB SIM компании Microchip Technology Inc.
История
Много-много лет назад, в Microchip, в команде разработчиков симулятора MPLAB был разработан VHDL-подобный язык SCL – Stimulus Control Language, с помощью которого можно создавать testbench для помощи в отладке кода. Однако, в связи с уходом из команды автора реализации SCL и «сложности» языка, было решено создать GUI, которая освобождает embedded-программиста от вникания в тонкости VHDL-подобного SCL и помогает создать последовательности тестовых сигналов и инжекций данных в регистры симулируемого микроконтроллера. Такая GUI-обертка в среде разработки MPLAB IDE называется Stimulus.
Секретный язык
Microchip особо не продвигал SCL и не предоставлял описание языка. В 2006 году даже было объявлено, что в следующей версии MPLAB IDE v8.xx вообще уберут поддержку SCL, но участники forum.microchip.com высказались против этого и SCL оставили в следующих релизах.
Некоторые энтузиасты даже начали «реверсить» SCL (благо Stimulus может генерировать SCL-файлы) и создавать учебник по SCL и репозиторий примеров. Особо стоит отметить русскоязычный труд с описанием SCL, сопровождающийся несколькими примерами (от простого генератора, до эмуляции UART и генерации DTMF сигналов).
В связи с тем, что новое поколение MPLAB X IDE полностью переписано и получило кроссплатформенность (MPLAB X основан на NetBeans), то реализация SCL так же переписана и нынешние разработчики включили «неофициальный» SCL User’s Guide в документацию к MPLAB X IDE.
Возможности GUI Stimulus
Сейчас Stimulus позволяет:
А) создавать синхронные последовательности изменений состояний выводов или значений регистров (удобно для формирования повторяющихся последовательностей:
Во время Хn состояние (pin, регистр) = ХХ
Во время Хm состояние (pin, регистр) = YY
Процесс можно повторять начиная с шага i; между повторами задать задержку ii.
Б) создавать комплексные воздействия:
Если выполняется условие, что (pin, bit или регистр) становится (=, !=, = или >), то через N (тактов, нс, мкс, мс или ч.м.с) выполнить (однократно или с периодом M) воздействие (одно или несколько): записать в регистр значение, изменить состояние pin или bit, установить напряжение на аналоговом входе.
В) генерировать сигналы:
На выводе (pin_уу) с начальным значением (ВЫСОКОЕ или НИЗКОЕ) выдать последовательность (задается длительность ВЫСОКОГО и НИЗКОГО состояния). Задаются условия запуска и останова (старт программы или по значению программного счетчика или в заданное время или когда значение на pin_хх == ВЫСОКОЕ или НИЗКОЕ).
Г) инжекция данных в регистры:
Из указанного файла взять значение и записать его в заданный регистр. Действие произвести когда: происходит чтение из регистра (т.е. в отлаживаемой программе читаем регистр) или программный счетчик примет зафиксированное значение или выполнится указанное в файле условие. Например, можно инжектировать в UART данные из файла вида:
wait 1 sec // ждать 1 секунду
01 54 106 // инжектируемые данные
02 55
wait 200 ms // ждать 200 мс
“hello” // инжектируемые данные
rand 1 15 sec // случайная пауза от 1 до 15с
32 33 34
Stimulus, помимо описанного, позволяет сохранить созданные воздействия в виде SCL файла и (!) загружать собственные SCL сценарии.
Stimulus является достаточно мощным инструментом, но имеет существенные ограничения – служит в основном для задания простых и детерминированных воздействий, не всякую модель поведения «внешней среды» можно описать с помощью предлагаемой в среде разработки GUI.
SCL, являясь языком программирования, дает больше гибкости: доступны условные выражения (конструкции if-elsif-else), циклы, инструкции работы с файлами и др.
- Инжектирование значения в pin или в память данных микроконтроллера
- Чтение значения pin или из памяти данных
- Чтение и обработка файлов
- Выполнение действий на основании времени симуляции, командных циклов и на основании значения программного счетчика
- Выдача информационных сообщений в окно симулятора
То есть SCL может все, что доступно через GUI Stimulus в MPLAB IDE. Но SCL имеет более широкие возможности и позволяет формировать сложные зависимости между значениями на выводах и значениями регистров микроконтроллера; моделировать взаимодействие с внешней периферией; моделировать воздействия, которые сложно воспроизвести в «железе» и выявлять ситуации, приводящие к ошибкам. Кроме того, среда разработки позволяет подключать несколько SCL файлов, для их параллельного выполнения. Это может пригодиться, например, для подключения к проекту типовых testbench-ев.
Примеры
Допустим, для отладки и тестирования программного декодера нужно сформировать манчестерский код на входе микроконтроллера. С применением Stimulus задачу можно выполнить с помощью формирования последовательности изменения состояния вывода, но это слишком муторное занятие, так как каждое изменение битов нужно прописывать руками, типа так:
Теперь, если нужно изменить первый бит, то нужно переписать всю последовательность.
Другое дело, если формировать последовательность с использованием SCL: пишем testbench, который берет входной битовый поток (не кодированный), кодирует его и отправляет на вход симулируемого микроконтроллера. Для удобства изменения данных, входной битовый поток можно брать из внешнего файла. Попутно наш testbench может выводить информационные сообщения в окно симулятора.
Пример SCL файла:
configuration for «pic16f1509» is end configuration; testbench for «pic16f1509» is begin process is file fileVar : text; variable lineVar : line; — Строка, прочитанная из файла variable status : file_open_status; variable data_in : integer; begin loop file_open(status, fileVar, «dat.txt», read_mode); while endfile(fileVar) == false loop — Обрабатываем, пока файл не пуст readline(fileVar, lineVar); report(«Прочитана строка»); RB5
Файл внешних данных с битовой последовательностью:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 0 1 1 1 0 0 0 0 0 0 1 1
1 1 1 0 1 0 1 0 0 1 1 1 0 0 0
В случае применения SCL гораздо проще изменять данные, длину последовательности и временные параметры симулируемого потока, что облегчает проверку алгоритма, обработку ошибок и т.п…
Скрипт SCL может разбирать входной файл и получать внешние команды. Например, помимо битового потока, можно изменять параметры сигналов.
Пример задания параметров ШИМ-кодированной посылки с синхро-преамбулой (команды парсятся SCL-скриптом и выставлябт соответствующие задержки):
sync_bit_hi 2000 us
sync_bit_lo 500 us
pulse_lo 500 us
pulse_hi_0 500 us
pulse_hi_1 1000 us
1 0 0 0 1 1 0 1
wait 2 ms
1 1 1 1 0 0 0 0 1 0 1 0 1 0 1 0
wait 3 ms
0 0 0 0 1 1 1 1
1 0 1 0 1 0 1 1
wait 15 ms
Умение работать с внешними файлами существенно расширяет возможности симуляции. Так, в «репозитории SCL» (ссылка в конце статьи) есть пример получения данных для симуляции из внешнего приложения (Input to a Simulation From an External Application). Данный пример симулирует матричную клавиатуру и входной сигнал для АЦП (написано на VBA в Excel). «Нажатия» кнопок и изменения напряжения записываются в два файла, SCL скрипт читает эти файлы и симулирует изменение логических уровней портов В/В и напряжение на входе АЦП.
Итоги
SCL-программе доступны метки, адреса и переменные отлаживаемого.с или .asm кода. Доступно состояния регистров, программного счетчика микроконтроллера, время симуляции. SCL позволяет формировать несколько параллельных процессов в пределах одного testbench. Например, на одном входе формируем битовую последовательность, читаем данные с другого pin, обрабатываем и управляем состоянием других входов или состоянием регистров микроконтроллера.
Таким образом, SCL помогает организовать testbench-и для отладки кода микроконтроллера. Так как SCL является частью родного симулятора, то в одном проекте и в одном цикле отладки доступны SCL-сценарии (да, к отлаживаемому проекту можно подключать несколько SCL скриптов), точки останова, секундомер, стек, логический анализатор и др., выполняется симуляция периферии (таймера, UART, АЦП и пр.), прерывания и все это работает в одной среде разработки.
Следует отметить и некоторые недостатки текущей реализации SCL:
— ограниченные возможности отладки SCL кода (при подключении к проекту скрипта с ошибкой получаем лишь сообщение типа «ошибка парсера в строке № xx»). Если при подключении скрипта вы получили сообщение о дублировании переменных, то, скорее всего, вы подключили этот же тестбенч второй раз
— некоторые упрощения в текущей реализации (MPLAB X)
Подробнее о SCL можно почитать тут:
- SCL User’s Guide (в составе документации пакета MPLAB X IDE, www.microchip.com/mplabx/)
- Язык SCL
- SCL Code repository
- SCL PRIMER / TUTORIAL
Источник: habr.com
Особенности программирования Scl-блоков
В пользовательской Scl-программе используются кодовые блоки и блоки данных. Кодовые блоки – это вызываемые для выполнения подпрограммы, а блоки данных – это описания атрибутов переменных, которые принимают участие в выполнении этих подпрограмм.
В языке программирования SCL используется стандартная структура и стандартный интерфейс блока. Поэтому отдельные блоки, запрограммированные с использованием SCL, можно вызвать, например, в Fbd-блоке и, наоборот, с Scl-блоков можно вызвать блоки, созданные с использованием, например, языка STL.
Система STEP 7 поддерживает функции FC и функциональные блоки FB как кодовые блоки. В отличие от функций FC функциональные блоки FB вызываются вместе с блоками данных, в которых хранятся локальные переменные блока (память блока).
Параметры блока
Параметры блока обеспечивают связь между вызывающим и вызываемым блоками. Эти параметры могут быть объявлены как входные (Input), выходные (Output) и входные-выходные (In/Out) параметры. Входные параметры могут быть только прочитаны, выходные параметры могут быть только записаны. Поэтому, если параметры должны быть сначала прочитаны, потом изменены и, в конце концов, снова записаны, то следует использовать тип In/Out.
В функциях FC параметры блока являются указателями на фактические параметры или на другие указатели.
В функциональных блоках FB параметры блока хранятся в экземплярных блоках данных. Доступ к этим данным требует определения блока данных и адреса данных.
Формальные параметры
Для адресации блока используются формальные параметры. Они имеют такие же имена, как и параметры блока, и используются в выражениях программы в качестве операндов.
Формальные параметры параметрических типов TIMER и COUNTER могут быть обработаны с использованием функций таймеров и функций счетчиков. Значения формальных параметров могут быть переданы в вызываемые блоки.
С помощью формальных параметров типа BLOCK_xx можно получить доступ к адресам данных в блоке данных. Формальные параметры параметрических типов BLOCK_FB и BLOCK_FC при использовании языка программирования SCL могут только передаваться в вызываемые блоки, потому что команд для обработки формальных параметров такого типа в блоке нет.
Формальные параметры типов данных POINTER и ANY могут быть переданы в вызываемые блоки целиком. Исключения представляют временные локальные данные, передача которых не допускается.
Статические локальные данные
Статические локальные данные – это память функционального блока. Эти данные располагаются в экземплярном блоке данных. При этом значения данных хранятся до тех пор, пока не будут изменены программой. В статических локальных данных можно размещать также локальные экземпляры функциональных блоков и системных функциональных блоков.
Статические локальные данные объявляются с помощью ключевых слов VAR и END_VAR.
В качестве статических локальных данных допускается применять все простые, составные, пользовательские (UDT) типы данных, а также типы данных POINTER и ANY.
Если значение инициализации задавать не нужно, переменные можно сообщать списком.
VAR1, VAR2, VAR3: INT;
Необходимо учесть, что при программировании на языке SCL статические локальные данные в функциональном блоке могут быть адресованы только символьным образом.
Предварительная инициализация параметров блоков
Предварительная инициализация параметров блоков не обязательна и допускается только в отношении таких функциональных блоков, параметры которых хранятся как значения. Это распространяется на любые параметры блоков с простыми типами данных, а также на входные (Input) и выходные (Output) параметры сложных типов данных.
Если инициализация параметров блоков не сделана, то редактор будет использовать, как начальные значения параметров, или нулевое значение, или наименьшее значение, или пробел (в зависимости от типа данных). Для параметров типа BLOCK_DB как значение по умолчанию принимается DB1 (DB0 не существует).
Вызов SCL-блоков
При программировании блоков на языке программировании SCL различают блоки с функциональным значением и блоки без функционального значения.
Функциональные блоки FB и функции FC без функционального значения есть просто «областями» программы, то есть подпрограммами.
Функции FC с функциональным значением могут использоваться в выражениях присваивания, а также в других выражениях в качестве операндов.
Системные функциональные блоки SFB вызываются точно так же, как и функциональные блоки FB, а системные функции SFC вызываются точно так же, как функции FC. Следует учесть, что системный функциональный блок SFB вызывается с блоком данных, который размещается в пользовательской программе.
При вызове блока его параметры инициируются фактическими параметрами, которые представляют собой константы, переменные или выражение. Именно с этими параметрами блок обрабатывается при выполнении программы, и именно в них хранятся результаты этой обработки.
При вызове функций FC и системных функций SFC все параметры блока должны быть инициированы. При вызове функциональных блоков FB и системных функциональных блоков SFB инициализация параметров блока не обязательна.
Выходные параметры при вызове функциональных блоков FB и системных функциональных блоков SFB инициируются с помощью прямого обращения к экземплярным данным.
Пример вызова функции FC без функционального значения:
FC291 (MAX:= Maximum, IN:= Inputvar, MIN:= Minimum, OUT:= Result);
При вызове используется или абсолютный, или символьный адрес блока. Список параметров приводится в скобках. Скобки должны быть указаны, даже если функция FC не имеет параметров.
Порядок инициализации параметров может быть произвольным. Если функция имеет единый входной параметр, то имя параметра при инициализации может быть опущено.
Пример инициализации с преобразованием Int-переменной Speed в String-переменную Display:
Пример вызова функции FC с функциональным значением:
Result:= FC2 (MAX:= Maximum, IN:= Inputvar, MIN:= Minimum);
В данном примере глобальной переменной Result присваивается функциональное значение функции FC2. Функции FC с функциональным значением могут использоваться в качестве операндов в любых выражениях.
Если при вызове блока используется входной параметр EN, и если этот вход имеет значение FALSE, то функциональное значение не будет определено, то есть функциональному значению не будет присвоена никакая величина.
Экземплярный блок данных специфицируется при вызове функционального блока.
Пример вызова функционального блока с экземплярным блоком данных:
FB2.DB2 (IN:= Inputvalue);
В записи вызова сначала записывается адрес функционального блока, а потом, отделенный точкой, адрес экземплярного блока данных. Дальше в скобках представляется список параметров.
Поскольку входные и выходные параметры сложных типов хранятся как указатели, они должны быть инициированы значащими величинами при первом вызове функционального блока. Если параметр блока не инициирован, то он сохраняет свое последнее определенное значение.
Все параметры блока данных могут быть адресованы как глобальные данные с указанием имени экземплярного блока данных и имени параметра. Они также могут быть инициированы при вызове функционального блока с помощью операторов присваивания:
Функциональный блок, как локальный экземпляр
Функциональные блоки могут быть объявлены как локальные экземпляры и вызванные в другом функциональном блоке. Такие функциональные блоки сохраняют свои локальные данные в экземплярном блоке данных.
Delimiter (IN := Inputvar);
Объявление экземпляров выполняется в разделе статических локальных данных за ключевым словом VAR. Здесь локальному экземпляру (FB3) назначается имя, например, Delimiter. К моменту компилирования вызываемый функциональный блок должен уже существовать или в виде прежде скомпилированного блока в разделе Blocks (Блоки), или в виде исходной программы.
Аналогичные действия выполняются при вызове системного функционального блока SFB.
Применение механизма EN/ENO
При программировании на SCL пользователь имеет возможность проверить отдельные выражения (операции) на правильность их выполнения и в зависимости от этого принимать решение – выполнять следующий блок или не выполнять.
Для реализации этой возможности в языке программирования SCL существует переменная с именем «ОК» и типом данных BOOL. Эта переменная сообщает об ошибках, которые возникают при выполнении программы в Scl-блоке. В начале блока ОК-переменная имеет значение TRUE. При возникновении программной ошибки она сбрасывается в состояние FALSE. Результат проверки сообщается с помощью специального выхода блока ENO (Enable output – выход разблокирован) типа BOOL.
Проверять ОК-переменную можно с помощью соответствующих Scl-операций. Ниже приведен пример получения проверки результата арифметического выражения:
THEN (* не имеется ошибок *);
ELSE (* ошибка в операции добавления *);
Для того, чтобы вызываемый блок сохранил значение ОК-переменной на выходе ENO, необходимо предусмотреть следующие назначения:
После вызова блока значения ENO может быть использовано для определения того, правильно ли был обработан блок. Если блок был обработан правильно, то ENO = TRUE. Если при обработке блока возникла ошибка, то ENO = FALSE.
Пример программирования анализа ENO:
THEN (* не имеется ошибок *);
ELSE (* возникла ошибка *);
Для управления вызовами блока используется вход EN типа BOOL. Если вход EN инициирован значениям TRUE, то блок будет вызван для выполнения, если EN инициированный значениям FALSE, то блок не будет вызван для выполнения. При этом будет выполнен переход к следующему оператору после вызова блока.
Пример вызова блока с указанием значения входа EN:
FC1 (EN:= I1.0, In1:= . In2:= . ); (*FC15 выполняется только в случае, когда I1.0 = «1» *)
Если EN не используется, блок будет выполняться всегда.
Пример программирования вызова блока FC2 в случае, если обработка FC1 успешно завершена:
FC1 (EN := I1.0, In1:= . In2:= . );
FC2 (EN := ENO, In1:= . In2:= . );
Дата добавления: 2016-12-09 ; просмотров: 3898 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ
Источник: poznayka.org