Не устанавливается признак динамики в WinDecont

Общие вопросы по оборудованию и программному обеспечению Компании ДЭП
maxi21
Сообщения: 56
Зарегистрирован: 20 июл 2009, 21:21

Сообщение maxi21 » 31 май 2010, 14:35

Здравствуйте! Возникла такая проблема, необходимо изменить уставку регулятора на объекте с АРМа компьютера диспетчера. На компьютере диспетчера запущен экран диспетчера и модель для объектов. При изменении уставки на компьютере диспетчера она записывается в КУставку, передается на контроллер на объекте и должна считываться в ИУставку. Компонент регулятора на объекте работает по такому принципу и все нормально работает. На компьютере диспетчера новая уставка записывается в КУставку. но в базе параметров WinDecont можно увидеть, что флаг динамики при этом не установлен и в таком виде она передается на контроллер на объекте и без флага динамики не считывается и не меняется. Соответствие номеров сигналов в модели проверено. Если в базе параметров WinDecont вручную установить флаг динамики, то значение ИУставка на объекте меняется.

Ниже приведена функция и небольшой фрагмент кода программы, которые отвечают за изменение уставки регулятора.

void __fastcall TfCtp4::UstReg(const AnsiString aFullRelativeOpcName,
TdepOpcListParUserFunc *aListParUserFunc, int aIndexParChange,
bool aAllConnected, bool aAllChanged, Variant &aWriteValue,
bool &aQualitySpecified, WORD &aWriteQuality, bool &aWriting)
{

if(flWait==1) {
aWriting=true;
aWriteValue=edUst->Text;
pnU->Visible=false;
flWait=0;
}

Если диспетчер хочет изменить уставку регулятора, то flWait==1 и aWriting=true и aWriteValue=edUst->Text, форма изменения уставки становится невидимой и flWait=0.

Подразумевается, что параметр Writing отвечает за установку признака динамики. Подскажите пожалуйста, как правильно выйти из данной ситуации.

pooh
Сообщения: 421
Зарегистрирован: 22 июл 2008, 11:50
Откуда: Дэп

Сообщение pooh » 02 июн 2010, 12:30

Ответ на вопрос смотрите в почте

maxi21
Сообщения: 56
Зарегистрирован: 20 июл 2009, 21:21

Сообщение maxi21 » 03 июн 2010, 13:44

Добрый день! Прошу прощения, но в моем ящике lgmk@mail.ru ответа на этот вопрос нет, может быть, произошла какая-то ошибка?

galina
Сообщения: 79
Зарегистрирован: 03 дек 2007, 09:56
Откуда: Компания "ДЭП"

Сообщение galina » 04 июн 2010, 09:20

Смотрите ящик!

galina
Сообщения: 79
Зарегистрирован: 03 дек 2007, 09:56
Откуда: Компания "ДЭП"

Сообщение galina » 04 июн 2010, 14:47

В ОРС нет такого понятия, как признак динамики. В нашей системе внизу признак тревоги расценивается как признак динамики. Поэтому:

- aWriting означает писать или не писать значение
- aQualitySpecified означает записать качество(в терминах OPC), в котором можно установить признак тревоги
- с помощью функции procedure QualitySetAlarmed(var aQuality:
TdepOpcQuality; const b: Boolean); вы можете взвести тревогу

Поэтому, чтобы взвести тревогу надо написать:

aWriting = true;
aQualitySpecified = true;
QualitySetAlarmed(aWriteQuality, true);

Аватара пользователя
Б.Е.Г.
Сообщения: 169
Зарегистрирован: 20 май 2009, 07:48
Откуда: Королев

Сообщение Б.Е.Г. » 06 июн 2010, 19:05

Галя, здравствуйте! Извините, что вмешиваюсь.
Речь идет о передаче в базу данных, а в конечном итоге на удаленный объект, команды, сопровождаемой битом динамики.
Как это сделать?
С уважением, Б.Гаврилов
Теплосеть г. Королев.

Светлана
Сообщения: 329
Зарегистрирован: 06 июн 2005, 15:27
Откуда: Компания ДЭП

Сообщение Светлана » 09 июн 2010, 18:57

Для этого надо использовать тактовую функцию в моделе для элемента 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-клиента в этот выходной аналог будет устанавливаться бит Динамики.