Виснит Global Script после выполнения функции записи в файл
Хоружевский Роман; 9.9.03

Данный скрипт написан на встроенном в WinCC С. Скрипт работает вроде нормально, записывает в файл как положено, но после выполнения все остальные скрипты подвисают и не работают, кто знает, в чем может быть причина?



void SaveUstToFile()
{
float Test[36];//Массив значений уставок

char* szPrjPath;//Каталог файлов проекта

char* szNameFile;
FILE *outf;//Файловый идентификатор

//char szNameTag[30];//Имя тега
//int iIndex,jIndex;
//jIndex = 0;//Текущий индекс массива уставок
{

Test[0]= GetTagFloatWait("P_vac");
Test[1]= GetTagFloatWait("I_vac");
Test[2]= GetTagFloatWait("D_vac");
Test[3]= GetTagFloatWait"Zone_vac");
Test[4]= GetTagFloatWait "T_call_vac");
.
.
.

Test[35]= GetTagFloatWait("Dead_PG");

szPrjPath = GetTagChar("ProjectDir");

szNameFile = strcat(szPrjPath,"PID_REGU.DAT");

outf=fopen(szNameFile,"wb");//Откр файл

fwrite (Test, sizeof(float),36,outf);//Сохранить уставки в файл

fclose(outf);//Закрыть файл

}
Re: Виснит Global Script после выполнения функции записи в файл
Roy; 9.9.03

У меня вначале тоже висло, но записываемый файл создавай заранее. Например текстовой wb.ust.

Re: Виснит Global Script после выполнения функции записи в файл
Goodvin; 10.9.03

Попробуй писать в файл посредством fprintf, я обычно так делаю - не было проблем.

Re: Виснит Global Script после выполнения функции записи в файл
Шестаков Александр; 21.10.03

Ошибка в следующей строке:


szNameFile = strcat(szPrjPath,"PID_REGU.DAT");

Функция strcat добавляет строку PID_REGU.DAT в конец строки по указателю szPrjPath. Но т.к. это указатель на строку в памяти, размер которой равен размеру строки в теге. Таким образом ты выходишь за диапазон строкового массива выделенного при чтении текстового тега. Отсюда и зависание!
Re: Виснит Global Script после выполнения функции записи в файл
Шимолин Сергей; 22.10.03

А вообще когда нужно сохранять какие-нибудь настройки удобно работать через INI-файлы..не надо заботиться о структуре файла. если надо вышлю..

Re: Виснит Global Script после выполнения функции записи в файл
Шимолин Сергей; 23.10.03

несколько человек заинтересовалось, поэтому кидаю пример на форум..


//INI file write
#pragma code("kernel32.dll");
BOOL WritePrivateProfileStringA(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString, LPCTSTR lpFileName);
#pragma code();
WritePrivateProfileStringA("First","FirstKey","testFirstKey","d:\\TEMP\\initest.ini");

//INI file read
#pragma code("kernel32.dll");
DWORD GetPrivateProfileStringA(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnString,DWORD nSize,LPCSTR lpFileName);
#pragma code();
char ReturnString[100];
DWORD nSize = 100;
GetPrivateProfileStringA("Third","teststring","Pitch!!",ReturnString,nSize,"d:\\TEMP\\initest.ini");
printf("value of nSize %d\r\n",nSize);
printf("ini-file read inisection third=%s\r\n",ReturnString);