ОШИБКА или ОГРАНИЧЕНИЕ WInCC 5.1
!?
Александр
Шестаков; 21.5.03
Вводная:
1. Создаем глобальный указатель на строку:
char* pBuffer = NULL;
void Dummy ()
{
}
2. Прописываем вызов этой функции при открытии стартового окна
(думаю ясно для чего).
3. Создаем на стартовом окне поле ввода-вывода IOField1. Его
свойства Data Format устанавливаем в String. Для свойства Output
Value пришем C Action сделующего содержание (приведен пример,
только тела акции):
extern char* pBuffer;
return pBuffer;
и привязываем Event Name к тегу count (предварительно созданному и
имеющему типа Unsigned 32-bit value) c циклом Upon change.
Компилируем и сохраняем.
4. Создаем кнопку Button1 и на событие Mouse Action пишем следующий
код (приводится только тело акции):
#define STR_LEN 100 // Длина строки
// Произвольный символ
#define DUMMY_CHAR 'x'
extern char* pBuffer;
int i = 0;
if (pBuffer) { free(pBuffer); pBuffer = NULL; }
pBuffer = (char*) calloc (STR_LEN+1,sizeof(char));
if (pBuffer==NULL) { printf ("Error!\r\n"); return; }
// Заполняем строку
for (i=0; i<STR_LEN; i++) pBuffer[i] = DUMMY_CHAR;
pBuffer[i] = '\0';
// Извещаем поле ввода-вывода
//об изменении буфера строки
SetTagDWord ("count",GetTagDWord("count")+1);
printf ("Ok!\r\n");
5. Запускаем RunTime.(Неплохо было бы перед этим создать окно
диагностики для просмотра сообщений о результатах выполнения акции
и средства для освобожнения выделенной памяти при выходе из
RunTime).
Главная часть:
Первонаначально устанавливам размер буфера для строки равным 100
(корректируем STR_LEN). Компилируем перезапускаем RunTime и щелкаем
по кнопке сколько угодно раз все работает замечательно! В окне
диагностики Ok!, в поле ввода-вывода в нашем случае xxxxx... .
Затем последовательно увеличиваем размер буфера строки и повторяем
все выше описанные действия. Все работает отлично, но при
превышении размера буфера строки 4030 (в моем случае), при первом
же щелчке (или втором) на кнопке WinCC 5.1 вешается напрочь!
Применание: По данной технологии передачи длинных строк были
опробаваны также ActiveX-компоненты. Эффект тот-же.
Вопросы:
1. Это ошибка или все-таки ограничение WinCC 5.1?
2. Какие еще способы передачи длинных строк можно придумать для
передачи их в визуальные компоненты формы для их отображения в
требуемом формате или как обойти это ограничение?