Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Руководство NL5.pdf
Скачиваний:
84
Добавлен:
15.03.2016
Размер:
6.44 Mб
Скачать

NL5 circuit simulator

Руководство Пользователя

Работа с моделью C

Функционирование компонента Code с моделью C описывается кодом, написанном на языке C (C-code). Код интерпретируется симулятором во время анализа переходного процесса. Хотя интерпретация кода выполняется относительно медленно, использование этой модели позволяет делать изменения кода очень быстро. Когда код окончательно отлажен, его можно откомпилировать и поместить в DLL для значительно более быстрой симуляции. См. главу Работа с моделью DLL для подробностей.

Выполнение кода. Принцип выполнения C-кода показан на следующей диаграмме:

Каждому входу/выходу компонента с именем поставлена в соответствие переменная с таким же именем. Напряжение на входе компонента (―in‖) измеряется вольтметром, и величина измеренного напряжения присваивается переменной с тем же именем (double in). Затем интерпретируется С-код программы и вычисляется новое значение выходной переменной (double out). И, наконец, напряжение, равное по величине значению переменной out выставляется на заземленный источник напряжения, подключенный к выходу компонента с таким же именем (―out‖).

Входы и выходы. Входы являются вольтметром с бесконечным входным сопротивление. Выходы являются заземленными источниками напряжения с нулевым выходным сопротивлением. Значения сигналам входов (напряжение, измеренное вольтметром) и выходов (напряжение источника питания) доступны через переменные типа double, имеющие такие же имена, как и выводы компонента (например x1, x2, x3, y1, y2, y3). Также входам и выходам могут быть поставлены в соответствие элементы массивов (например x[0], x[1], x[2]).

Переменные (массивы) входов и выходов являются глобальными, и должны быть определены как переменные (массивы) типа double в самом начале кода (см. главу Глобальные переменные ниже ). Если переменные (массивы)

не определены явно, они будут автоматически созданы во время инициалации анализа при t=0.

130

NL5 circuit simulator

Руководство Пользователя

Структура кода. Типичная структура кода следующая:

/* Global variables */

...

/* Initialization code */ init() {

...

}

/* Main code */ main() {

...

}

Если сложная инициализация глобальных переменных не требуется, код инциализации (init) может быть опущен. Тогда структура кода будет такой:

/* Global variables */

...

/* Main code */ main() {

...

}

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

/* Main code */

...

Глобальные переменные. Глобальные переменные являются public переменными. Они могут быть доступны снвружи кода: из скрипта (например, для data logging), отображены на графике транзиента, использованы для задания источников (модель Function). Также, глобальные переменные являются статическими: они существуют и сохраняют свои значения в течение всего анализа.

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

Глобальные переменные должны быть определены в начале кода, вне функций init и main. Переменные могут быть инициализированы в момент определения (декларации), или внутри фунции инициализации init, если это требует сложных вычислений.

Переменные (массивы) входов и выходов всегда являются глобальными, и должны быть определены как переменные (массивы) типа double в самом начале кода. Если эти переменные

131

NL5 circuit simulator

Руководство Пользователя

(массивы) не определены явно, они будут автоматически созданы во время инициалации анализа при t=0.

Для доступа к глобальным переменным С-кода извне используется следующий формат:

component_name.variable_name

Для элементов масива:

component_name.array_name[index]

Например, чтобы отобразить глобальную переменную на графике, добавьте кривую типа function, и введите имя переменной (или выражение с этой переменной) в следующем формате:

X1.out1

Xcode.array[3]

X1.X2.temp (X1 – subcircuit, X2 Code component)

Код инициализации выполняется один раз в начале симуляции при t=0. Имя функции с кодом инициализации должно быть init. Код используется для инициализации глобальных переменных, требующей сложных вычислений. Этот код не является обязательным и может быть опущен.

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

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

Наряду с глобальными и локальными переменными, в основном коде могут быть использованы следующие, доступные только для чтения (read-only), переменные:

Параметры компонентов (например, R1, C2, V.period, и т.п.), t – текущее время переходного процесса

V(name) – напряжение на компоненте name I(name) – ток через компонент name P(name) – мощность на компоненте name

где name - это имя любого компонента в схеме.

132

NL5 circuit simulator

Руководство Пользователя

Основной код может быть модифицирован во время выполнения переходного анализа: приостановите анализ (Transient | Pause), сделайте изменения и продолжите анализ (Transient | Continue).

Начальные условия (“IC”) – это текстовая строка, которая может содержать код, присваивающий начальные значения переменным входов/выходов и глобальным переменным, определенным в инициализационная части кода. Например:

y1=1.2;y2=0;y3=2.345;integral=-4.19;counter=100

где y1, y2 и y3 – выходные переменные; integral и counter – глобальные переменные.

Строка IC может быть автоматически модифицирована некоторыми командами:

Команда Transient | Save IC заполняет строку текущими значениями переменных.

Команда Schematic | Tools, страница Initial Condition: при установленном флажке Clear C-code IC эта строка будет очищена.

Если строка не пустая, этот код будет исполнен сразу после выполнения кода инициализации (init) , перед первым шагом симуляции при t=0.

Редактирование C-кода. Для редактирования кода щелкните кнопку в строке параметра. Появится следующее диалоговое окно:

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

Следующие кнопки расположены на инструментальной панели окна:

Open code – загрузить код из файла.Save code – сохранить код в файле.Clear –очистить текст.

133

NL5 circuit simulator

Руководство Пользователя

Clear code and set template – oчистить текст и поместить шаблон кода:

Check – проверить текст программы на наличие синтаксических ошибок.

Show line numbers (no editing allowed in this mode) Показать номера строк. В этом режиме редактирование кода запрещено:

Select font – выбрать шрифт текста.

134

NL5 circuit simulator

Руководство Пользователя

Help (F1) – Помощь. Чтобы увидеть раздел помощи для определенного оператора, функции, или команды языка C, поместите курсор редактирования на соответствующее слово в программе и щелкните кнопку, или нажмите клавишу F1:

Place cursor on for operator

Click Help button

Help on for operator is displayed

 

or press F1

 

135