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

Описания RDS

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

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

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

§3.7.10. Обмен данными по сети

§3.7.10.5. Ошибка сети

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

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

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

#### §3.7.10. Обмен данными по сети

##### §3.7.10.5. Ошибка сети

Это событие возникает в блоке, участвующем в обмене данными по сети, при возникновении различных ошибок в сетевом соединении. Большую часть таких ошибок RDS обрабатывает самостоятельно, поэтому, как правило, в моделях блоков реакция на это событие не требуется. Стандартный модуль автокомпиляции не автоматизирует передачу данных между блоками по сети, желающие реализовать ее могут изучить §2.15 руководства программиста.

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

      // Network error
      void rdsbcppBlockClass::rdsbcppNetError(RDS_PNETERRORDATA ErrorData)
      {
         … пользовательский текст реакции …
      }

Параметр функции ErrorData – это указатель на структуру RDS_NETERRORDATA, описывающую соединение и возникшую ошибку:

      typedef struct {
        RDSINT32 ConnId;        // Идентификатор соединения
        RDSCSTR HostA;          // URL или IP-адрес сервера (UTF8)
        RDSWCSTR HostW;         // URL или IP-адрес сервера (UTF16)
        //RDSXCSTR Host;        // URL или IP-адрес сервера (поле-псевдоним)
        RDSINT32 Port;          // Порт
        RDSCSTR ChannelA;       // Имя канала (UTF8)
        RDSWCSTR ChannelW;      // Имя канала (UTF16)
        //RDSXCSTR Channel;     // Имя канала (поле-псевдоним)
        RDSINT32 ErrorCode;     // Код ошибки (RDS_NETERR_*)
        RDS_NETSTATION Station; // Идентификатор машины
        RDS_NETBLOCK Block;     // Идентификатор блока
      } RDS_NETERRORDATA;
      typedef RDS_NETERRORDATA *RDS_PNETERRORDATA;

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

ConnId(int)
  Уникальный идентификатор сетевого соединения, возвращенный сервисной функцией при его создании.
HostA(RDSCSTR),HostW(RDSWCSTR),Host(RDSXCSTR)
  Имя (URL) или IP-адрес сервера, с которым установлено соединение.
Port(int)
  Номер сетевого порта, через который идет обмен данными.
ChannelA(RDSCSTR),ChannelW(RDSWCSTR),Channel(RDSXCSTR)
  Имя канала передачи данных.
ErrorCode(int)
  Один из поддерживаемых кодов ошибки:

  RDS_NETERR_NOBLOCK | Блок, которому переданы данные, не существует.
  RDS_NETERR_SEND | Ошибка при передаче данных.
  RDS_NETERR_RECEIVE | Ошибка при приеме данных.
  RDS_NETERR_DISCONNECT | Ошибка при попытке разорвать связь.
  RDS_NETERR_ACCEPT | Ошибка при установке соединения сервера с клиентом.
  RDS_NETERR_CLIENTCONN | Для блоков схемы, работающей на сервере – ошибка при установке соединения с клиентом.
  RDS_NETERR_GENERAL | Неизвестная ошибка.

SenderStation(RDS_NETSTATION)
  Идентификатор машины, если он нужен для описания ошибки (при коде ошибки RDS_NETERR_NOBLOCK).
SenderBlock(RDS_NETBLOCK)
  Идентификатор блока на машине Station.

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