Из написаного выше думаю и так понятно откуда. Банальность в том что в обратном направлении всё рабоатет, тобиж VAR PERSISTENT RETAIN > FLASH. А обратно нет.
Из написаного выше думаю и так понятно откуда. Банальность в том что в обратном направлении всё рабоатет, тобиж VAR PERSISTENT RETAIN > FLASH. А обратно нет.
Вообще-то, если посмотреть на скриншот- просто кончилась память Retain. Уменьшите размер данных и всё.
Тролль-наседка, добрый, нежный и ласковый
Я извиняюсь, но про какую 8-ю строку разговор, может я что-то пропустил. Подетальней пожалуйста, что и где работает? Оператор присваивания в вашем примере точно работает сомнений нет.
упрощенная реализация для наглядности. Код работает, когда элемент sDb лежит в GLOBAL VAR и НЕ РАБОТАЕТ, когда в GLOBAL VAR PERSISTENT RETAIN.
CASE Step OF
0: IF ReadStart THEN
Step := 1;
END_IF
ReadStart := FALSE;
1: dwReadBytes := 0;
SysFileClose (dwFileIndex);
Step := 2;
2: dwFileIndex := SysFileOpen ('sDb_n.txt' , 'r');
Step := 3;
3: dwReadBytes := SysFileRead (dwFileIndex , ADR(sDb) , SIZEOF(sDb));
SysFileSetPos (dwFileIndex, 0 );
IF dwReadBytes <> 0 THEN
Step := 4;
END_IF
4: SysFileClose (dwFileIndex);
Step := 0;
END_CASE
Каким х.. прочитать куда надо?
Последний раз редактировалось saniyo; 12.04.2018 в 23:20.
Т.С, в вашем коде примера в 3м стэпе логическая ошибка: как только кол-во байт превысит 0 переход к закрытию файла.
И эти Сименсовские заморочки "Persistent Retain" к чему? Масло-масляное, в КДС работает просто VAR Retain.
Когда заболит зуб, стоматологу пришлите его макет (как упрощеный релиз) - пусть лечит. Хрен ли
Последний раз редактировалось Валенок; 14.04.2018 в 02:13.
Залил тотже проект в другой плк на прошывке 1.0.72 - работает.
Попоробую продаунгрейтить рабочий плк.
тоже макет )
3: dwReadBytes := dwReadBytes + SysFileRead (dwFileIndex , ADR(sDb) + dwReadBytes , SIZEOF(sDb) - dwReadBytes );
IF dwReadBytes = SIZEOF(sDb) THEN
SysFileSetPos (dwFileIndex, 0 ); (* зачем здесь? *)
Step := 4;
END_IF