Навигация:
<< >> Оглавление Указатель

Описание пользователя

Глава 3. Использование стандартных модулей автокомпиляции

§3.7. Краткий перечень вводимых в модель описаний и реакций на события

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

§3.7.1. Дополнительные описания, вводимые в модель

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

Помимо реакций на события, происходящие с блоком в схеме, в модель могут быть вставлены различные описания пользователя: описания типов и классов, служебные функции, команды включения различных файлов заголовков и т.п. Модуль автокомпиляции предоставляет три точки для вставки таких описаний внутрь автоматически формируемой программы модели: глобальные описания, описания внутри класса блока и описания после класса блока. Тексты всех этих описаний вводятся на вкладке «события» в соответствующих подразделах раздела «описания».

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

Глобальные описания из параметров модуля автокомпиляции
  #include <windows.h>
  #include <stdlib.h>
  #include <math.h>
  #include <float.h>
Автоматически сформированные служебные описания и команды включения стандартных заголовков RDS
  #include <RdsDef.h>
  #define RDS_SERV_FUNC_BODY rdsbcppGetService
  #include <RdsFunc.h>
  #include <CommonBl.h>
  #include <CommonAC.hpp>
  …
Глобальные описания пользователя
Автоматически сформированные описания классов для функций блока
  class rdsbcppFunction0G : public rdsbcppFunction // Global
  { … }
  class rdsbcppFunction0L : public rdsbcppFunction // Local
  { … }
  …
Автоматически сформированная главная функция DLL
  int WINAPI DllEntryPoint( hinst,
      unsigned long reason,void *lpReserved)
  { … }
Макросы для автоматического формирования описаний классов переменных блока
  // Type char ("S")
  RDSBCPP_STATICPLAINCLASS(rdsbcstSignal,char);
  // Dynamic of type double ("D")
  RDSBCPP_DYNAMICPLAINCLASS(rdsbcdtDouble,double,"D");
  …
  //----------------------------------------
  // Block class
  //----------------------------------------
  class rdsbcppBlockClass
  { public:
      // RDS internal block data structure
       ;
Автоматически сформированные описания динамических и статических переменных блока, настроечных параметров и объектов для доступа к функциям
      // Dynamic variables
      rdsbcdtDouble DynTime;
      // Static variables
      rdsbcstSignal Start;
      rdsbcstSignal Ready;
      // Objects for block functions (share their names with the global ones)
      rdsbcppFunction0L rdsfuncControlValueChanged;
      …
Автоматически сформированные служебные функции класса блока и заголовки функций реакции на события
      // Vars initialization
      void rdsbcppInitVars(void *base)
      { … };
      // Check for dynamic vars existance
       rdsbcppDynVarsOk(void){return DynTime.();};
      // Setup params load
      char *rdsbcppLoadParameters(char *rdsbcpp_Text);
      // Setup params save
      void rdsbcppSaveParameters(void);
      // Open setup window
       rdsbcppShowSetupWindow(void);
      // Event reaction functions
      void rdsbcppModel(void);
      …
Описания пользователя внутри класса блока
  }; // class rdsbcppBlockClass
  //----------------------------------------
Автоматически сформированные служебные функции класса блока, тела которых вынесены за пределы самого класса
  // Setup parameters load
  char *rdsbcppLoadParameters(char *rdsbcpp_Text)
  { … }
  // Setup parameters save
  void rdsbcppSaveParameters(void)
  { … }
  …
Описания пользователя после класса блока
Автоматически сформированная функция модели блока
  extern "C" __declspec(dllexport)
    int  rdsbcppBlockEntryPoint(
      int CallMode, BlockData,
       ExtParam)
  { … }
Автоматически сформированные функции реакций на события, внутрь каждой из которых вставлен введенный пользователем текст
  // One simulation step
  void rdsbcppBlockClass::rdsbcppModel(void)
  { … }
  …

Глобальные описания пользователя размещаются после команд включения стандартных файлов заголовков и специализированных заголовков RDS, поэтому в них можно использовать все стандартные типы, константы и структуры Windows API (LPVOID, HANDLE, HWND и т.п.) Можно также использовать любые стандартные типы, константы и структуры RDS (RDS_BHANDLE, RDS_BLOCKDATA и т.п.) В глобальных описаниях нельзя ссылаться на объекты, создаваемые для работы с функциями блока (см. §3.6.13) и на класс блока rdsbcppBlockClass – все эти описания располагаются после глобальных описаний пользователя. Чаще всего в глобальные описания включают:

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

Описания пользователя после класса блока, как следует из их названия, размещаются после класса блока и нескольких его служебных функций. К этому моменту все служебные объекты модели уже описаны, и в описаниях можно на них ссылаться. Чаще всего здесь размещают:

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


<< >> Оглавление Указатель