- •I. Быстрый Старт
- •Установка и запуск NL5
- •Установка NL5
- •Типы файлов
- •Запуск NL5
- •Создание и Симуляция Вашей Первой Схемы
- •Ввод схемы
- •Редактирование параметров компонентов
- •Установки переходного процесса (transient)
- •Данные переходного процесса
- •Запуск анализа переходного процесса
- •Установки частотной характеристики (AC)
- •Данные AC
- •Запуск AC анализа
- •Лицензия NL5
- •Single PC License
- •Portable License
- •Network License
- •Personal License
- •II. Интерфейс Пользователя
- •Графический Интерфейс Пользователя
- •Основное Окно
- •Основное Меню (Main Menu)
- •Основная инструментальная панель (Main Toolbar)
- •Строка состояния (Status Bar)
- •Панель выбора (Selection Bar)
- •Панель навигации
- •Окна документа
- •Другие окна
- •Окна диалогов
- •Помощь (Help)
- •Горячие клавиши
- •Предпочтения (Preferences)
- •Preferences (предпочтения)
- •Application (приложение)
- •Document (документ)
- •Schematic (схема)
- •Drawings (рисунки)
- •Mouse (Schematic) (мышь, схема)
- •Components (компоненты)
- •Symbols (символы компонентов)
- •Warnings (предупреждения)
- •Graphs (графики)
- •Table (таблица)
- •Legend (условные обозначения, список кривых на графике)
- •Annotation (аннотация)
- •Text (текст)
- •Mouse (Graphs) (мышь, графики)
- •Transient (переходный процесс)
- •HTTP Server
- •Печать
- •Форматирование печати
- •Формат данных
- •Нечувствительность к регистру (case-insensitivity).
- •Числа
- •Имена
- •Операторы
- •Функции
- •Выражения
- •Язык C
- •Comments (комментарии)
- •Data types (типы данных)
- •Variables (переменные)
- •Arrays (массивы)
- •Statements and operators
- •Скрипт
- •Синтаксис
- •Команды
- •Примеры скрипта
- •III. Схема
- •Окно схемы
- •Редактирование схемы
- •Курсор
- •Проводник
- •Соединение (Connection)
- •Земля
- •Компонент
- •Вид компонента (View)
- •Этикетка (Label)
- •Атрибуты
- •Рисунки (линия, прямоугольник, овал)
- •Текст и Переменные
- •Прокрутка и масштабирование
- •Выделение и сброс выделения
- •Удаление
- •Перемещение и копирование
- •Отключить и включить (Disable and Enable)
- •Повернуть, отразить, перевернуть (Rotate, Mirror, Flip)
- •Формат
- •Отменить и выполнить повторно (Undo, Redo)
- •Команды редактирования схемы
- •Клавиатура и горячие клавиши
- •Операции с мышкой
- •Компоненты и модели
- •Формулы
- •Функции
- •Редактирование конфигурируемого компонента (customized)
- •Работа с подсхемами
- •Работа с PWL моделью
- •Работа с PWL источником
- •Работа с моделью List
- •Работа с моделью Table
- •Работа с двухмерной (2D) моделью Table
- •Работа с моделью C
- •Работа с моделью DLL
- •Окно Компонентов (Componets Window)
- •Инструментальная панель
- •Список компонентов
- •Выбор модели
- •Редактирование параметров
- •Окно переменных (Variables Window)
- •Панель инструментов
- •Редактирование переменных
- •Листы (Sheets)
- •Группы
- •Проверка схемы
- •Инструменты схемы
- •Renumber (перенумерация)
- •Initial Conditions (начальные условия)
- •Clean Up (чистка)
- •Formulas (формулы)
- •Parameters (параметры)
- •Transform (преобразование)
- •Свойства (Properties)
- •Симуляция
- •Алгоритм симуляции
- •Данные симуляции
- •Установки переходного процесса (Transient Settings)
- •Advanced Settings
- •Данные переходного процесса (Transient Data)
- •Инструментальная панель
- •Traces (кривые)
- •Симуляция
- •Окно переходного процесса (Transient window)
- •График
- •Legend (условные обозначения)
- •Курсоры
- •Текст
- •Storage (накопитель данных, «хранилище»)
- •Data table (Таблица данных)
- •Прокрутка и масштабирование
- •Команды переходного процесса
- •Клавиатура и горячие клавиши
- •Операции с мышкой
- •Инструменты переходного процесса (Transient Tools)
- •DC sweep
- •XY diagram (XY-диаграмма)
- •Amplitude histogram (амплитудная гистограмма)
- •Histogram (гистограмма)
- •FFT (Быстрое Преобразование Фурье)
- •Eye diagram (Глазковая диаграмма)
- •Markers (маркеры)
- •Power (мощность)
- •Line snapshot
- •V. Частотная Характеристика (AC)
- •Симуляция
- •Метод линеаризации схемы
- •Метод «включения» источника (Sweep AC source)
- •Z-преобразование (Z-transform)
- •Данные симуляции
- •Установки AC (AC Settings)
- •Advanced Settings
- •Данные AC (AC Data)
- •Инструментальная панель
- •Traces (кривые)
- •Выполнение симуляции
- •Окно AC (AC window)
- •График
- •Legend (условные обозначения)
- •Курсоры
- •Text.
- •Storage (накопитель данных)
- •Data table (Таблица данных)
- •Прокрутка и масштабирование
- •Команды AC
- •Клавиатура и горячие клавиши
- •Операции с мышкой
- •Инструменты AC (AC Tools)
- •Histogram (гистограмма)
- •Smith Chart (Диаграмма Смита)
- •Диаграмма Найквиста
- •Диаграмма Николса
- •Markers (маркеры)
- •VI. Инструменты (Tools)
- •Скрипт
- •Выполнение скрипта
- •Console (консоль)
- •Командная строка
- •Sweep (серия)
- •Оптимизация
- •HTTP link
- •Запуск HTTP сервера
- •Посылка URL запроса
- •Запуск симуляция
- •Пример связи NL5-MATLAB
- •VII. Приложения (Attachments)
- •Label
- •2. Operators
- •3. Functions
- •4. Script commands
- •5. END USER LICENSE AGREEMENT
NL5 circuit simulator |
Руководство Пользователя |
Работа с моделью DLL
Функционирование компонента Code с моделью DLL описывается программой, написанной на стандартном языке C, скомпилированной любым доступным компилятором, и помещенной в DLL файл (Dynamic-linked library). Функции DLL будут вызываться во время симуляции переходного процесса. Программа, помещенная в DLL, будет выполняться значительно быстрее, чем написанная на языке C в модели C, однако любое изменение программы потребует создания новой DLL.
Выполнение программы. Пример выполнения программы из DLL приведен на следующей диаграмме:
Напряжение на входе компонента (―in‖) измеряется вольтметром, и его величина присваивается соответствующему элементу массива data типа double. Выполняется функция DLL main с указателем на этот массив в качестве параметра. При этом вычисляется новое значение выхода компонента ―out‖, которое помещается в соответственный элемент массива data. И, наконец, напряжение, равное по величине этому значению, выставляется на заземленный источник напряжения, подключенный к выходу компонента.
Входы и выходы. Как видно из диаграммы, вход являются вольтметром с бесконечным входным сопротивленим, а выход являются заземленным источником напряжения с нулевым выходным сопротивлением. Массив double data[] используется для передачи входных/выходных величин в/из функции DLL. Размер массива равен <число входов> + <число выходов>. При вызове функции DLL первые < число входов > элементов массива заполнены входными величинами, в том же порядке, как они показаны на изображении элемента (левая сторона, сверху-вниз). Выходные величины, вычисленные функцией DLL, помещаются в последующие <число выходов> элементов массива, в том же порядке, как они показаны на изображении элемента (правая сторона, сверху-вниз). Например, для компонента с тремя входами и двумя выходами следующий код присвоит первому выходу минимальное значение на входах, и второму выходу – максимальное значение на входах:
data[3] = min( data[0], min(data[1],data[2]) ); data[4] = max( data[0], max(data[1],data[2]) );
Переменные компонента. Для отладки кода внутренние переменные DLL кода могут быть доступны и выведены на график без добавления специальных выводов компонента. Чтобы это сделать, добавьте имена переменных в окне Var диалогового окна Edit Component (см. главу
Редактирование конфигурируемого компонента, X - Code). Размер массива data[] должен быть равен <number of inputs> + <number of outputs> + <number of variables>. В коде DLL присвойте
136
NL5 circuit simulator |
Руководство Пользователя |
необходимые значения элементам массива dat, следующим за значениями выходов. Например, если добавить переменную counter компоненту из предыдущего примера, то следующи код возвратит значение внутренней переменной DLL counter в NL5:
data[5] = counter;
Чтобы отобразить переменную counter на графике, добавьте кривую типа function, и введите имя переменной (или выражение с этой переменной) в следующем формате:
component_name.counter
Функции DLL. Функции DLL должны быть определены следующим образом:
extern "C" __declspec (dllexport) int NAME(double t, double* data);
где:
NAME – произвольное имя функции, например main t – текущее время переходного процесса
data – указатель на массив с входными/выходными данными
Функция возвращает ноль, если нет ошибок, или определенное пользователем ненулевое целое число – код ошибки. Код ошибки будет показан в сообщении об ошибке.
Например, следующая функция sum вычисляет сумму напряжений на восьми входах:
extern "C" __declspec (dllexport) int sum(double t, double* x)
{
double y=0;
for( int i=0; i<8; ++i ) { y += x[i];
}
x[8] = y; return 0;
}
Функция инициализации выполняется один раз в начале симуляции при t=0. Эта функция не является обязательной и может быть опущена (оставьте пустым параметр ―Init‖).
Функция инициализации используется для присвоения начальных значений выходам (выходным переменным), путем установки нужных значений соответствующим элементам массива data[], а также описания и инициализации глобальных переменных DLL и массивов. Глобальные переменные могут быть использованы для хранения глобальных параметров, вычисляемых только один раз в начале симуляции, и затем используемых в основной функции. Также глобальные переменные могут хранить величины, вычисляемые на одном шаге симуляции, и затем используемые на следующем шаге. Следует иметь в виду, что если несколько компонентов используют одну DLL, то в память программы будет загружена только одна копия DLL, так что все компоненты будут использовать одни и те же глобальные переменные.
137
NL5 circuit simulator |
Руководство Пользователя |
Основная функция вычисляет значения выходов, используя текущие значения входов. Если у компонента не задан вывод clock, эта функция выполняется на каждом шаге симуляции. Если вывод clock существует, функция выполняется только при нарастающем фронте сигнала синхронизации на этом выводе.
Создание DLL. Программа может быть скомпилирована и сохранена в виде DLL помощью любого доступного средства разработки C/C++. В настоящее время были протестированы
Borland C++ Builder и Microsoft Visual C++. Примеры проектов для Borland C++ Builder 6
находятся в директории примеров Examples/Components/X folder полного загрузочного пакета
NL5.
138