Описание пользователя
Глава 3. Использование стандартных модулей автокомпиляции
§3.7. Краткий перечень вводимых в модель описаний и реакций на события
§3.7.6. Загрузка и запись данных блока и всей схемы
Рассматриваются реакции на события, связанные с записью и загрузкой схемы и отдельных ее блоков.
§3.7.6.1. Загрузка данных блока
Событие загрузки данных блока возникает при загрузке этого блока из файла в составе схемы, при вставке его в схему из библиотеки или из буфера обмена, а также при отмене изменения параметров блока пользователем (при этом прежние данные блока загружаются из внутреннего буфера отмены операций RDS). Следует учитывать, что реакция на событие вызывается, только если у блока есть какие-либо сохраненные параметры – если у блока нет автоматически сохраняемых настроечных параметров и он ничего не сохранил в реакции на запись данных самостоятельно (см. §3.7.6.2), событие загрузки данных не возникнет. Реакция на загрузку данных вводится на вкладке «» левой панели редактора модели: раздел «», подраздел «». Не следует путать эту реакцию с реакцией на загрузку состояния блока (см. §3.7.7.1).
Каждый блок, помимо общих параметров, которые сохраняет и загружает RDS, может иметь личные параметры, за загрузку и запись которых отвечает модель самого блока. При сохранении схемы или блока на диск или при копировании их в буфер обмена модель вызывается для сохранения этих личных параметров. Если модель что-то сохранила, при последующей загрузке этого блока она будет вызвана для чтения сохраненных параметров – возникнет событие загрузки данных блока. Настроечные параметры, добавленные в модель средствами редактора (см. §3.5.6 и §3.6.6), сохраняются и загружаются автоматически, для их загрузки данная реакция не требуется.
В классе блока для реакции на событие загрузки данных создается функция с именем rdsbcppLoadText:
// Loading block personal data text
void rdsbcppBlockClass::rdsbcppLoadText(char *LoadedText)
{
… пользовательский текст реакции …
}
В параметре LoadedText передается указатель на текст (char*) в кодировке UTF8, сформированный моделью при записи данных блока. Следует учитывать, что, если в блоке есть настроечные параметры, добавленные средствами редактора модели, в этот текст их данные не войдут: при загрузке блока сначала данные этих параметров извлекаются из текста, и только потом остаток текста передается в реакцию на событие загрузки. Таким образом, в эту реакцию передается в точности тот же текст, который был создан различными вызовами сервисных функций RDS в реакции на запись данных блока.
Реакция на загрузку данных блока может использоваться двумя способами. Во-первых, если у блока есть какие-то сложные параметры, которые невозможно описать средствами редактора модели (например, массивы, связные списки и т.п.), модель должна уметь сохранять их в текстовом формате в реакции на запись данных и загружать их в этом же формате в реакции на загрузку. Формат выбирается разработчиком произвольно, все действия по формированию текста со значениями параметров и по последующему разбору этого текста должны выполняться вручную. Сохранение и загрузка данных блока в текстовом формате подробно рассматривается в §2.8.3, §2.8.4 и §2.8.5 руководства программиста.
Во-вторых, реакцию на загрузку данных блока можно использовать для того, чтобы выполнить какие-либо действия после загрузки стандартных параметров блока. Если в модель блока в ее редакторе были добавлены какие-либо настроечные параметры, реакция на загрузку данных будет вызвана сразу после того, как их значения будут считаны, причем она вызовется даже в том случае, если у модели не будет реакции на запись параметров (в LoadedText при этом будет передана пустая строка). В §3.6.7 был приведен пример модели блока, в которой имя динамической переменной, которую этот блок создает, было настроечным параметром. Поскольку значение параметра, то есть имя переменной, становится известным модели только после загрузки параметров, команда создания переменной в этом примере была записана именно в реакции на загрузку данных.
При написании моделей блоков без использования модуля автокомпиляции событию загрузки данных блока соответствует константа RDS RDS_BFM_LOADTXT.