SIEMENS, DF&PD

Предыдущее посещение: Пн июл 04, 2016 7:46 Текущее время: Пн июл 04, 2016 7:46

Часовой пояс: UTC + 3 часа




 [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Как установить бит в слове С-скриптом?
СообщениеДобавлено: Пн июн 27, 2011 15:01 
Не в сети
Написал больше чем Вы читали

Зарегистрирован: Вс янв 25, 2009 22:05
Сообщения: 1906
Откуда: Киров
Не пинайте сильно ногами - 3-тий день не сплю и поэтому ОЧЕНЬ плохо думаю...

Приведите пожалуйста пример си скрипта устанавливающий/сбрасывающий определенный бит в слове...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как установить бит в слове С-скриптом?
СообщениеДобавлено: Пн июн 27, 2011 15:08 
Не в сети
Известный Писатель

Зарегистрирован: Ср сен 17, 2008 9:13
Сообщения: 253
Откуда: Тула
Для двойного слова:

// WINCC:TAGNAME_SECTION_START
#define TAG_1 "Control_Mode"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END

int value = GetTagDWord (TAG_1);

//Установить 1 бит, сбросить 0 бит
value = (value | 0x2) & 0xFE;

SetTagDWord (TAG_1, value);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 27, 2011 17:12 
Не в сети
Это точно не человек

Зарегистрирован: Чт фев 16, 2006 12:27
Сообщения: 7509
Откуда: Украина
Цитата:
Приведите пожалуйста пример си скрипта устанавливающий/сбрасывающий определенный бит в слове...

Курите поиск, коллега:-)
http://iadt.siemens.ru/forum/viewtopic.php?t=12141


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 28, 2011 7:06 
Не в сети
Известный Писатель

Зарегистрирован: Пт окт 30, 2009 10:27
Сообщения: 435
Откуда: Москва
Используйте Dynamic Wizard для взвода/сбрасывания бита в теге. Скрипт будет сгенерирован автоматически.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 28, 2011 8:00 
Не в сети
Написал больше чем Вы читали

Зарегистрирован: Вс янв 25, 2009 22:05
Сообщения: 1906
Откуда: Киров
Благодарю, работает.

Только при компиляции в GlobalScript нижеприведенная функция выдает предупреждение "...conversion may loose information"

Код:
void SetBitOn(char* TagName, int Nbit)
{
SetTagByte(TagName, (GetTagByte(TagName) | (1 << Nbit)));
return;
}


Что это означает?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 28, 2011 8:36 
Не в сети
Известный Писатель

Зарегистрирован: Ср фев 16, 2011 14:23
Сообщения: 434
Откуда: Санкт-Петербург, Москва
В данном случае не обращайте внимания.

Если не хотите ошибок, лучше так:

BOOL SetBitOn(char* TagName, unsigned Nbit)
{
if (TagName != NULL && Nbit <= 7)
{
SetTagByte(TagName, (BYTE)(GetTagByte(TagName) | (1 << Nbit)));
return TRUE;
}
return FALSE;
}

Пример:
char* pszMyTag = ...;
....
if (!SetBitOn(pszMyTag, 3))
{
printf("Ошибка в аргументах!");
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 28, 2011 11:53 
Не в сети
Написал больше чем Вы читали

Зарегистрирован: Вс янв 25, 2009 22:05
Сообщения: 1906
Откуда: Киров
Ага... теперь ясно значение предупреждения. Спасибо.

Еще вопрос: чем отличаются функции SetTagByte от SetTagByteWait и SetTagByteState ?

Прочитал в описании:
Цитата:
Функции установки
Общие функции установки
функции установки-ожидания
функции установки-состояния-ожидания

Функции ожидания отличаются от всех остальных тем, что обращение к значениям тегов производится непосредственно в ходе процесса. Теги при этом в Control Center не регистрируются.
Загрузку коммуникационной сети можно существенно снизить путем
применения соответствующих функций получения-ожидания или
получения-состояния-ожидания вместо функций получения или
получения-состояния, поскольку в этом случае теги не будут циклически сканироваться на обнаружение в них измененеий. Наконец, поскольку система ожидает до тех пор, пока не будет выполнена функция ожидания, можно произвести лучшую синхронизацию процессов.


Какое-то размытое понятие получается...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 28, 2011 12:34 
Не в сети
Ведущий специалист

Зарегистрирован: Пт дек 31, 2004 13:25
Сообщения: 2248
Откуда: SIEMENS I IA AS Москва
В WinCC Information System в теме "Principle of the SetTag functions" хоть и на английском, но на мой взгляд, понятней :

"SetTagXXX
The SetTagXXX function assigns the job a value to write and returns immediately to the caller. In this case, the system does not wait until value is actually written.

The call is marked by the following:
The call is fast.
The caller does not know when the value is actually written.
The function provides no information on the state of the write job.

SetTagXXXWait
The function SetTagXXXWait assigns the job of writing a value and will first return to the caller when the value has actually been written.

The call is marked by the following:
The call takes longer in comparison to SetTagXXX. The duration is also dependent on the channel and AS, amongst other things.
The value is written after the call.
The function provides no information on the state of the write job.

SetTagXXXState
The function SetTagXXXState has the same features as SetTagXXX; plus the function returns information regarding the status of the write request.
Since the status is always provided internally, there is no performance difference compared to SetTagXXX.

SetTagXXXStateWait

The function SetTagXXXStateWait has the same features as SetTagXXXWait; plus the function returns information regarding the status of the write request.
Since the status is always provided internally, there is no performance difference compared to SetTagXXXWait.
The difference between the functions SetTagXXXStateWait and SetTagXXXState corresponds to the difference between SetTagXXXWait and SetTagXXX.

Note, that certain statuses can only be generated when the write process has been completed"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 28, 2011 12:46 
Не в сети
Известный Писатель

Зарегистрирован: Пн авг 08, 2005 9:54
Сообщения: 337
Откуда: Украина, ПАО "НКМЗ"
из WinCC Information System:

Цитата:
SetTagXXX - Sets the value of a tag of the data type XXX.

SetTagXXXWait - Sets the value of a tag of the data type XXX. The function is ended after the AS has acknowledged acceptance of the value.

SetTagXXXState - Sets the value of a tag of the data type XXX. The status of the tag is also returned.


Т.е.
Wait - ожидает ответа AS (контроллера), тем самым реализуется некая синхронизация (упорядочивание) выполнения процедур записи-подтверждения получения значения контроллером, что несколько замедляет выполнение скриптов в рантайме и пр.

State - возращает статус тэга (разрыв связи и пр.) см. Tag Status в Dynamic Dialog.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
 [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group