При создании привязок создаются пользовательские функции:
для контроля
fastcall TfCtp14::RegCtrl(const AnsiString aFullRelativeOpcName,
TdepOpcListParUserFunc *aListParUserFunc, int aIndexParChange,
bool aAllConnected, bool aAllChanged, Variant &aValue, WORD &aQuality,
bool &aSetProperties)
для события
fastcall TfCtp14::PumpCmdOn(const AnsiString aFullRelativeOpcName,
TdepOpcListParUserFunc *aListParUserFunc, int aIndexParChange,
bool aAllConnected, bool aAllChanged, Variant &aWriteValue,
bool &aQualitySpecified, WORD &aWriteQuality, bool &aWriting)
Не нашел описания этих функций.
Опытным путем определил смысл параметров aFullRelativeOpcName, *aListParUserFunc, &aValue, &aWriteValue.
Будьте любезны, растолкуйте смысл остальных параметров. Или
скажите, где можно почитать.
Пользовательские функции
Определен тип в модели:
Тип RegUst
Uv iInt
A wdNoA
Ustk wdAout
В привязке Uv=%f
Функция:
//--!-- virtual void RegUst::tact() ;public
void RegUst::tact()
{
inherited::tact();
if(Uv.value()!=0) {
Ustk=Uv;
A=true;
Uv=0;
}
else {A=true; Ustk=113; }
}
Результат: в базе WinDecont значение 113 без динамики, а нужно с битом динамики.
Примечание: пробовал A wdNoD с тем же результатом.
Помогите разобраться!
Тип RegUst
Uv iInt
A wdNoA
Ustk wdAout
В привязке Uv=%f
Функция:
//--!-- virtual void RegUst::tact() ;public
void RegUst::tact()
{
inherited::tact();
if(Uv.value()!=0) {
Ustk=Uv;
A=true;
Uv=0;
}
else {A=true; Ustk=113; }
}
Результат: в базе WinDecont значение 113 без динамики, а нужно с битом динамики.
Примечание: пробовал A wdNoD с тем же результатом.
Помогите разобраться!
С уважением, Б.Гаврилов
Теплосеть г. Королев.
Теплосеть г. Королев.
Как выставлять динамику - написано в предыдущей теме:
http://www.dep.ru/forum/viewtopic.php?t=2273
Для этого надо использовать тактовую функцию в моделе для элемента wdAOut.
Справка по Конструктору: "Программирование/Элементы WinDecont":
Помимо перечисленных в разделе Элементы Windecont полей, типы wdDIn, wdDOut, wdAOut имеют поле D(bool) - признак динамики. Тип wdDIn при чтении из базы Windecont устанавливает поле D в true, если в дискрете установлен бит динамики. Поле D держится равным true на протяжении одного такта работы модели, затем сбрасывается в false. Для типов wdDOut и wdAOut если установлено поле D в true, то в элемент базы записывается значение с установленным битом динамики, после чего поле D сбрасывается в false.
и ещё базовые элементы имеют флаг:
"· bool written(); void setWritten(bool);
Признак записи некоторого значения в элемент после предыдущего такта работы.
Флаг взводится как при записи в элемент в методах обработки, так и при записи через OPC-интерфейс. Сбрасывается в конце такта после afterTact."
Поэтому, можно в тактовой функции написать что то подобное:
if( written() ) D=true;
Тогда при любой записи OPC-клиента в этот выходной аналог будет устанавливаться бит Динамики.
http://www.dep.ru/forum/viewtopic.php?t=2273
Для этого надо использовать тактовую функцию в моделе для элемента wdAOut.
Справка по Конструктору: "Программирование/Элементы WinDecont":
Помимо перечисленных в разделе Элементы Windecont полей, типы wdDIn, wdDOut, wdAOut имеют поле D(bool) - признак динамики. Тип wdDIn при чтении из базы Windecont устанавливает поле D в true, если в дискрете установлен бит динамики. Поле D держится равным true на протяжении одного такта работы модели, затем сбрасывается в false. Для типов wdDOut и wdAOut если установлено поле D в true, то в элемент базы записывается значение с установленным битом динамики, после чего поле D сбрасывается в false.
и ещё базовые элементы имеют флаг:
"· bool written(); void setWritten(bool);
Признак записи некоторого значения в элемент после предыдущего такта работы.
Флаг взводится как при записи в элемент в методах обработки, так и при записи через OPC-интерфейс. Сбрасывается в конце такта после afterTact."
Поэтому, можно в тактовой функции написать что то подобное:
if( written() ) D=true;
Тогда при любой записи OPC-клиента в этот выходной аналог будет устанавливаться бит Динамики.
Б.Е.Г. писал(а):Не нашел описания этих функций.
Опытным путем определил смысл параметров aFullRelativeOpcName, *aListParUserFunc, &aValue, &aWriteValue.
Будьте любезны, растолкуйте смысл остальных параметров. Или
скажите, где можно почитать.
Читайте файл помощи depComponentsPack3.chm(устанавливается вместе с depComponentsPack_RAD_Studio_2007-2010-3.x.exe) - OPC проект отображения мнемосхемы -> Редактор динамизации компонентов
-> Пользовательские функции.
С уважением Климов Александр
Компания ДЭП
г. Москва
(495) 995-00-12 доб. 150
Компания ДЭП
г. Москва
(495) 995-00-12 доб. 150
Quality это качество в соответствии со спецификацией OPC Data Access. От значения сигнала оно не зависит, а просто можно сказать его дополняет. Смысловое значение данного параметра можно понять анализируя значения его битов. Можно почитать спецификацию OPC Data Access, а можно воспользоваться написанными нами функциями(depComponentsPack3.chm -> Программный доступ для расширенных возможностей -> Тип TdepOpcQuality и функции для работы с ним).
С уважением Климов Александр
Компания ДЭП
г. Москва
(495) 995-00-12 доб. 150
Компания ДЭП
г. Москва
(495) 995-00-12 доб. 150
Здравствуйте!
У меня такой вопрос: Дискретный согнал "Пожар" на объекте привязан к мнемосхеме через
пользовательскую функцию:
void __fastcall TfCTP3::ObjCtrl(const AnsiString aFullRelativeOpcName,
TdepOpcListParUserFunc *aListParUserFunc, int aIndexParChange,
bool aAllConnected, bool aAllChanged, Variant &aValue, WORD &aQuality,
bool &aSetProperties)
{
int p=aListParUserFunc->Items[0]->Value;
aValue=p;
//операторы организации оповещения оператора при аварии (р=1)
}
Функция возвращает два значения: 1 - пожар; 0 - в остальных случаях.
Нужно, чтобы возвращавлось три значения: 0,1,неопределенность.
Как это сделать?
Примечания:
1. речь идет о функции программы С++ мнемосхемы, а не модели.
2. Если можно использоать aQuality, то какое значение будет при чтении этого парматра?
У меня такой вопрос: Дискретный согнал "Пожар" на объекте привязан к мнемосхеме через
пользовательскую функцию:
void __fastcall TfCTP3::ObjCtrl(const AnsiString aFullRelativeOpcName,
TdepOpcListParUserFunc *aListParUserFunc, int aIndexParChange,
bool aAllConnected, bool aAllChanged, Variant &aValue, WORD &aQuality,
bool &aSetProperties)
{
int p=aListParUserFunc->Items[0]->Value;
aValue=p;
//операторы организации оповещения оператора при аварии (р=1)
}
Функция возвращает два значения: 1 - пожар; 0 - в остальных случаях.
Нужно, чтобы возвращавлось три значения: 0,1,неопределенность.
Как это сделать?
Примечания:
1. речь идет о функции программы С++ мнемосхемы, а не модели.
2. Если можно использоать aQuality, то какое значение будет при чтении этого парматра?
С уважением, Б.Гаврилов
Теплосеть г. Королев.
Теплосеть г. Королев.
Здравствуйте!
Скажите пожалуйста, как в "Конструкторе
"ОРС" можно определить неопределенность (недостоверность) параметра wdDin
А можно ли это сделать в С++? Я писал об этой проблеме, цититрую:
Скажите пожалуйста, как в "Конструкторе
"ОРС" можно определить неопределенность (недостоверность) параметра wdDin
А можно ли это сделать в С++? Я писал об этой проблеме, цититрую:
Б.Е.Г. писал(а):Здравствуйте!
У меня такой вопрос: Дискретный согнал "Пожар" на объекте привязан к мнемосхеме через
пользовательскую функцию:
void __fastcall TfCTP3::ObjCtrl(const AnsiString aFullRelativeOpcName,
TdepOpcListParUserFunc *aListParUserFunc, int aIndexParChange,
bool aAllConnected, bool aAllChanged, Variant &aValue, WORD &aQuality,
bool &aSetProperties)
{
int p=aListParUserFunc->Items[0]->Value;
aValue=p;
//операторы организации оповещения оператора при аварии (р=1)
}
Функция возвращает два значения: 1 - пожар; 0 - в остальных случаях.
Нужно, чтобы возвращавлось три значения: 0,1,неопределенность.
Как это сделать?
Примечания:
1. речь идет о функции программы С++ мнемосхемы, а не модели.
2. Если можно использоать aQuality, то какое значение будет при чтении этого парматра?
С уважением, Б.Гаврилов
Теплосеть г. Королев.
Теплосеть г. Королев.
galina писал(а):Функция makeBad() делает элемент неопределенным
Здравствуйте, Галя!
Простите, но я спрашивал, как определить - в базе WinDecont парметр
опрелелен или нет.
Если нет связи или по какой-то другой причине параметр не определен, я должен отобразть параметр на мнемосхеме желтым цветом. если определен, отображается по значению: 0 - зеленый (норма), 1 - красный (авария).
Сейчас я не могу отличить неопределенность от значения 0. Представте, что творится на мнемосхеме, когда я работаю с PLDA!
И еще, Галя, я могу обрабатывать параметры в конструкторе ОРС (очевидно, там определена функция makeBad,) или в мнемосхеме, в среде С++, в пользовательской функции. А какие DEPовские функции определены в С?
С уважением, Б.Гаврилов
Теплосеть г. Королев.
Теплосеть г. Королев.