- Применение
- Схема
- Компоненты
- Микроконтроллеры
- Скриптовые компоненты
- Мониторы
- Редактор/компилятор
- Файлы
- Разработка
Скриптовые компоненты
Скриптовые компоненты — это разновидность модульных компонентов, дополнительно содержащих файл со скриптом, который определяет поведение устройства.
Создание скриптового компонента включает следующие шаги:
1. Создание файла корпуса.
2. Создание файла описания.
3. Создание файла скрипта.
4. Создание папки компонента со всеми файлами.
5. Добавление в список компонентов.
Создание файла определения
Это XML-файлы, описывающие, к какому типу относится компонент и какие части или модули он содержит.
Корневой элемент:
Основные характеристики задаются в корневом элементе. Имя тега может быть любым, типичные варианты: “mcu” для микроконтроллеров или “iou” — «Input/Output Unit» (модуль ввода/вывода).
Возможные поля в корневом элементе одинаковы для всех модульных компонентов.
<iou name="comp_name" core="scripted" script="file.as" >
</iou>
Мы видим, что ядро установлено в значение “scripted”, значит это скриптовый компонент, а сам скрипт находится в файле “file.as”.
Ниже приведены некоторые модули и функции, которые можно добавить к скриптовому компоненту:
Свойства:
Вы можете добавить свойства для настройки некоторых настроек в вашем компоненте.
<iou name="comp_name" core="scripted" script="file.as" >
<propertygroup name="group name">
<property name="Prop1" type="double" />
<property name="Prop2" type="uint" />
</propertygroup>
</iou>
Мы видим, что существует группа свойств с двумя свойствами.
У группы свойств есть поле name — это имя, отображаемое в диалоговом окне свойств.
Каждое свойство имеет два поля:
name: имя свойства.
type: тип данных (bool, double, int, uint, string).
Скрипт должен реализовывать геттеры и сеттеры свойств:
void setProp1( double val )
double getProp1()
void setProp2( uint val )
uint getProp2()
Эти геттеры и сеттеры вызываются из диалогового окна Properties в графическом интерфейсе.
Обычно в скрипте есть переменная для хранения значения свойства.
Когда вызывается сеттер, скрипт может применить ограничения к значению (например, максимальное или минимальное) и сохранить его в этой переменной.
Когда вызывается геттер, скрипт, как правило, возвращает значение этой переменной.
Порты ввода-вывода (IO Ports):
Файл определения:
<iou name="comp_name" core="scripted" script="file.as" >
<ioport name="PORTA" pins="A,B,C,D,E,F" />
</iou>
Каждый порт имеет 2 поля:
• name: Название объекта.
• pins: список пин-имён, разделенных запятыми.
Связи:
Вы можете добавить некоторые модули для связи.
UART:
<iou name="comp_name" core="scripted" script="file.as" >
<ioport name="PORTA" pins="A,B,C,D,E,F" />
</iou>
SPI:
<iou name="comp_name" core="scripted" script="file.as" >
<spi/>
</iou>
TWI:
<iou name="comp_name" core="scripted" script="file.as" >
<twi/>
</iou>
Создание файла скрипта.
Это программа, написанная на скриптовом языке, которая описывает поведение компонента.
Файлы скриптов должны иметь расширение .as и использовать имя, заданное в файле определения.
Функции скрипта, вызываемые из C++.
Это функции, которые вы можете реализовать в скрипте.
void setup()
void reset()
void voltChanged()
void updateStep()
void runEvent()
void extClock( bool clkState )
int getCpuReg( string name )
string getStrReg( string name )
void command( string c )
void setLinkedValue( int val, int i )
void setLinkedString( string str, int i )
void INTERRUPT( uint vector )
Доступные функции C++ для вызова из скрипта.
Отладочные сообщения:
void print( string &msg )
компонент:
IoPort@ getPort( string port )
IoPin@ getPin( string pin )
McuPort@ getMcuPort( string port )
McuPin@ getMcuPin( string pin )
void addCpuReg( string name, string type )
void addCpuVar( string name, string type )
void toConsole( string msg ) // To Delete
void showValue( string val )
void addEvent( uint time_ps )
void cancelEvents()
uint64 circTime()
int readPGM( uint addr )
void writePGM( uint addr, int val )
int readRAM( uint addr )
void writeRAM( uint addr, int val )
int readROM( uint addr )
void writeROM( uint addr, int val )
void INTERRUPT( uint vector )
// For linked Components:
// index: index on Linked component in the list
string getPropStr( int index, string name )
void setLinkedValue( int index, int val, int i )
void setLinkedString( int index, string val, int i )
IoPort@
void setPinMode( uint mode )
uint getInpState()
void scheduleState( uint32 state, uint64 time )
void setOutState( uint state )
void changeCallBack( eElement@ e, bool en )
void addSequence( array<array<uint64>>@ t )
void trigger( uint n ) // Trgger sequence
IoPin@.
void setPinMode( uint mode )
void setOutState( bool state )
void scheduleState( bool state, uint64 time )
void setStateZ( bool z )
bool getInpState()
double getVoltage()
void setVoltage( double volt )
void setOutHighV( double volt )
void setImpedance( double imp )
void changeCallBack( eElement@ e, bool en )
bool isConnected()
McuPort@.
void controlPort( bool outCtrl, bool dirCtrl )
void setDirection( uint dir )
uint getInpState()
void setOutState( uint state )
McuPin@.
void setDirection( bool dir )
void setPortState( bool state )
void controlPin( bool outCtrl, bool dirCtrl )
void setExtInt( uint mode )
void setPinMode( uint mode )
bool getInpState()
void setOutState( bool state )
double getVoltage()
void setVoltage( double volt )
void changeCallBack( eElement@ e, bool en )
Ресурсы:
- Forum discussion,
- Видео (english): Creating Scripted Components Part I
- Видео (spanish): Creando componentes script en SimulIDE
- Scripted Dev.
- Скриптовые компоненты недоступны в версии 1.0.0