Страница 1 из 1
Добавлено: 08 июн 2010, 05:42
Б.Е.Г.
При создании привязок создаются пользовательские функции:
для контроля
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.
Будьте любезны, растолкуйте смысл остальных параметров. Или
скажите, где можно почитать.
Добавлено: 15 июн 2010, 04:42
Б.Е.Г.
Определен тип в модели:
Тип 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 с тем же результатом.
Помогите разобраться!
Добавлено: 15 июн 2010, 14:18
galina
Как выставлять динамику - написано в предыдущей теме:
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-клиента в этот выходной аналог будет устанавливаться бит Динамики.
Добавлено: 15 июн 2010, 17:59
Dino
Б.Е.Г. писал(а):Не нашел описания этих функций.
Опытным путем определил смысл параметров aFullRelativeOpcName, *aListParUserFunc, &aValue, &aWriteValue.
Будьте любезны, растолкуйте смысл остальных параметров. Или
скажите, где можно почитать.
Читайте файл помощи depComponentsPack3.chm(устанавливается вместе с depComponentsPack_RAD_Studio_2007-2010-3.x.exe) - OPC проект отображения мнемосхемы -> Редактор динамизации компонентов
-> Пользовательские функции.
Добавлено: 16 июн 2010, 15:00
Б.Е.Г.
Galina, здравствуйте. Спасибо за заботу. Но Вы не ответили на мой вопрос. Кстати, тактовую функцию я использовал.
Жду ответа.
Добавлено: 16 июн 2010, 15:16
Б.Е.Г.
Александр, здравствуйте. Спасибо.
Не скажу, что в Help'е описание полное. Я протестировал
WORD &aQuality и получил значения: 20 для неопределенных значений и 192 - для значений 0. Что это за цифры?
Добавлено: 17 июн 2010, 13:56
Dino
Quality это качество в соответствии со спецификацией OPC Data Access. От значения сигнала оно не зависит, а просто можно сказать его дополняет. Смысловое значение данного параметра можно понять анализируя значения его битов. Можно почитать спецификацию OPC Data Access, а можно воспользоваться написанными нами функциями(depComponentsPack3.chm -> Программный доступ для расширенных возможностей -> Тип TdepOpcQuality и функции для работы с ним).
Добавлено: 20 июн 2010, 09:01
Б.Е.Г.
Жду ответа на мой вопрос от 15.06
Добавлено: 20 июн 2010, 10:55
galina
Вы получили ответ. Еще раз:
1) если вы используете тип wdDOut, wdAOut то в D надо писать true.
3) если wdDOutImp то динамика автоматически будет сформирована
Добавлено: 24 июн 2010, 14:33
Б.Е.Г.
Здравствуйте!
У меня такой вопрос: Дискретный согнал "Пожар" на объекте привязан к мнемосхеме через
пользовательскую функцию:
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, то какое значение будет при чтении этого парматра?
Добавлено: 25 июн 2010, 13:01
galina
Для того, чтобы поставить неопределенность - надо использовать
procedure QualitySetBad(var aQuality: TdepOpcQuality);
Добавлено: 03 июл 2010, 11:39
Б.Е.Г.
Здравствуйте!
Скажите пожалуйста, как в "Конструкторе
"ОРС" можно определить неопределенность (недостоверность) параметра 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, то какое значение будет при чтении этого парматра?
Добавлено: 05 июл 2010, 10:38
galina
Функция makeBad() делает элемент неопределенным
Добавлено: 05 июл 2010, 10:54
Б.Е.Г.
galina писал(а):Функция makeBad() делает элемент неопределенным
Здравствуйте, Галя!
Простите, но я спрашивал, как определить - в базе WinDecont парметр
опрелелен или нет.
Если нет связи или по какой-то другой причине параметр не определен, я должен отобразть параметр на мнемосхеме желтым цветом. если определен, отображается по значению: 0 - зеленый (норма), 1 - красный (авария).
Сейчас я не могу отличить неопределенность от значения 0. Представте, что творится на мнемосхеме, когда я работаю с PLDA!
И еще, Галя, я могу обрабатывать параметры в конструкторе ОРС (очевидно, там определена функция makeBad,) или в мнемосхеме, в среде С++, в пользовательской функции. А какие DEPовские функции определены в С?
Добавлено: 06 июл 2010, 09:45
galina
В модели:
· bool good();// Значение достоверно
· bool bad(); // Значение недостоверно
Для того, чтобы показать неопределенность желтым цветом, а в остальных случаях другими цветами, надо делать соответствующую привязку.. Сначала обрабатывать бит неопределенности, затем значение 0 и 1.