Текущий раздел:

Описания RDS

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

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

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

§3.7.11. Прочие реакции

§3.7.11.4. Обновление окон блока

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

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

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

#### §3.7.11. Прочие реакции

##### §3.7.11.4. Обновление окон блока

Это событие возникает в подсистемах и блоках при необходимости обновить принадлежащие им окна по таймеру, по команде от пользователя или от другого блока. Обычные окна подсистем обновляются автоматически, для этого не требуется реакция на это событие. Такая реакция нужна только в блоках, которые программно открывают какие-либо окна и самостоятельно следят за их обновлением. Автокомпилируемые блоки крайне редко программно открывают какие-либо отдельные окна – это достаточно сложная процедура, и в простых моделях она, как правило, не нужна. По этой причине и реакция на обновление окон в автокомпилируемых моделях практически никогда не используется. Тем не менее, иногда она может служит альтернативой реакции на срабатывание таймера – таймер можно запрограммировать так, чтобы вместо стандартного события срабатывания он вызывал блок для обновления окон. Пример модели, использующей это событие таким образом и созданной без применения модуля автокомпиляции, приведен в §2.10.4 руководства программиста.

Текст реакции на обновление окон вводится на вкладке «события» левой панели редактора модели: раздел «разное», подраздел «обновление окон блока». В классе блока для нее создается функция с именем rdsbcppWinRefresh следующего вида:

      // Refreshing block non-modal windows
      void rdsbcppBlockClass::rdsbcppWinRefresh(RDS_PWINREFRESHDATA WinRefreshData)
      {
         … пользовательский текст реакции …
      }

Параметр функции WinRefreshData – это указатель на структуру RDS_WINREFRESHDATA:

      typedef struct {
        RDS_TIMERID Timer;  // Таймер, вызвавший обновление, или NULL
        double Delay;       // Возвращаемое время обновления окна, мс
      } RDS_WINREFRESHDATA;
      typedef RDS_WINREFRESHDATA *RDS_PWINREFRESHDATA;

Поля структуры имеют следующий смысл:

Timer(RDS_TIMERID)
  Идентификатор сработавшего таймера, созданного с флагом RDS_TIMERS_WINREF (такие таймеры служат для обновления окон, см. §2.9 руководства программиста) или NULL, если обновление окна вызвано не таймером, а сервисной функцией или командой пользователя.
Delay(double)
  Возвращаемое моделью полное время обновления окон блока в миллисекундах, если она его вычисляет (исходно в этом поле находится значение −1 и, если оно там и останется, время обновления будет вычислено RDS автоматически).

При написании моделей блоков без использования модуля автокомпиляции событию обновления окон блока соответствует константа RDS RDS_BFM_WINREFRESH.