PDA

Просмотр полной версии : SysDir - вдруг пригодится?



Малышев Олег
05.08.2011, 18:10
dinfo:ARRAY [1..20] OF DirInfo;
res:UDINT;
handle:UDINT;
dirs:ARRAY [1..20] OF STRING(255);



PLC_PRG.cnt:=1;
str1:='/mnt/ufs/root/';
PLC_PRG.handle:=SysDirOpen(PLC_PRG.str1,'',20,ADR( PLC_PRG.dinfo[1]),ADR(PLC_PRG.res));
IF PLC_PRG.handle=-1 THEN
RETURN;
END_IF
WHILE (ERR_OK=SysDirRead(PLC_PRG.handle,PLC_PRG.str1,20, ADR(PLC_PRG.dinfo))) DO
IF FIND(str1,'.dat')<>0 THEN
PLC_PRG.dirs[PLC_PRG.cnt]:=PLC_PRG.str1;
PLC_PRG.cnt:=PLC_PRG.cnt+1;
END_IF
END_WHILE
SysDirClose(PLC_PRG.handle);

Ave
01.06.2016, 10:19
Спасибо пригодилось

alexmaemur
15.06.2016, 10:22
SysDir - вдруг пригодится?

А что это? Коллеги подскажите, может и мне пригодится.
Ищу инфу как архивы сохранять на флэшку СПК, подозреваю это что то из этой темы.
Прошу не сильно пинать:D Поиском нашел доку CODESYS_Control_3.4.3.0_Reference.pdf
но пока ничего не понял:confused:

Ave
21.06.2016, 14:43
А что это? Коллеги подскажите, может и мне пригодится.
Ищу инфу как архивы сохранять на флэшку СПК, подозреваю это что то из этой темы.
Прошу не сильно пинать:D Поиском нашел доку CODESYS_Control_3.4.3.0_Reference.pdf
но пока ничего не понял:confused:

Надо прописать путь к флэшки СПК. Возможно не подходит флэшка.
Если еще актуально могу посмотреть тип флэшки на которую копирую.

alexmaemur
21.06.2016, 17:37
Надо прописать путь к флэшки СПК. Возможно не подходит флэшка.
Если еще актуально могу посмотреть тип флэшки на которую копирую.
Спасибо Ave:)
Я еще полный ноль в Codesys, да и задачи ранее были несколько иные соответственно приходится все с нуля поднимать кроме SCL:D
Задача с панельки сохранять, а в последствии (дальнем будущем) передавать в 1С массив данных. Пока задача минимум - получить в CSV подобном формате текстовик для открытия его в Excel. Имеющаяся библиотека ArchivatorOwenLib этот вопрос почти решила. Но... пока что почти:confused: Вот и ищу еще какие варианты.

А попутно по форуму собираю все что в будущем может пригодится, вот и эта тема возможно тоже, но т.к полный ноль то и задал вопрос что это SysDir. К сожалению в Help ни слова, на вскидку что этот кусок кода делает мне не понятно, а очень любопытно:p. К сожалению в S7-400 операции с файлами никогда не требовались, а вот в СПК стали особенно актуальны и важны.

Ave
23.06.2016, 10:37
var
// handle для работы с файлами
handle_rf: SYSFILE.RTS_IEC_HANDLE;
// путь к директории на USB Flash
heatPath: STRING(INT#128):= '/mnt/ufs/media/mmcblk0p1/archive/';
// путь к файлам в директории на SD /mnt/ufs/media/sda1/ дальше указываете имя вашей директории
//
heatPathUSB: STRING(INT#128):= '/mnt/ufs/media/sda1/archive/';
sPath:STRING; // путь на CD в папку Archieve
var_end

(*

проверка существования файла, если нет то открываем для записи и записываем заголовок
Для создания формата cvs разделитель надо использовать точка с запятой(;)
SysDir... для работы с файлами в директории на Flash или SD
*)

sPath:= CONCAT(STR1:= heatPath, STR2:= '1.calibr');
handle_rf:= SysFileOpen(szFile:= sPath, am:= AM_READ, pResult:= error_rf1);
IF handle_rf = 16#FFFFFFFF THEN
handle_rf:= SysFileOpen(szFile:= sPath, am:= AM_WRITE, pResult:= error_rf1);
FOR jj:= 0 TO 14 DO
sFileCSV:= CONCAT(STR1:= nameString[jj], STR2:= ';');
SysFileWrite(hFile:= handle_rf, pbyBuffer:= ADR(sFileCSV), ulSize:= INT_TO_DWORD(Standard.LEN(sFileCSV)), pResult:= error_rf1);
END_FOR
SysFileWrite(hFile:= handle_rf, pbyBuffer:= ADR(strPSVK), ulSize:= 2, pResult:= error_rf1);
END_IF
SysFileClose(hFile:= handle_rf);

Ave
23.06.2016, 10:46
Надо подключить библиотеку CAA File.
Набрать в тексте например SysDirOpen. Нажать правую кнопку мышки. Выбрать пункт меню Обзор->перейти к определению.
Там описано подробней

SysDirOpen открывает директорию и получаете хэндел. Если он не равен 16#ffffffff все нормально можно читать.
SysDirRead читает названия файлов
SysDirClose закрывает работу с директорией.

Ave
23.06.2016, 11:07
Я использую JetFlash Transcend 4Gb. Пробовал Verbatun 8G не заработала. Так что надо пробовать разные, какая-то и заработает.

Pimpl
20.12.2016, 10:34
Подскажите пожалуйста. Верх у меня на Мастер Скада, низ CoDeSysOPCDA. При обрыве связи не диагностируется потеря связи. Всё замирает по последним данным и не подхватывает возобновление связи. Постоянно приходится перезагружать АРМ. что делать?

ГЛЮКОNIC
13.09.2023, 18:36
Кто подскажет SysDir В Обьявления переменных сделал
szSourceDir :STRING := 'D:/Papers'; (*путь откуда копировать*)
szDestDir :STRING := 'D:/Papers2/'; (*путь куда копировать*)
xRecursiveDir :BOOL := TRUE; (*Копировать все подпапки True, или пропускать подпапки False*)
xOverwriteDir :BOOL := TRUE; (*Перезаписать файлы True, оставить без изменения False*)
stResult :SysDir.RTS_IEC_RESULT; (*Код системной ошибки среды выполнения*)
в коде вот что
stResult := SysDirCopy(szSourceDir, szDestDir, xRecursiveDir, xOverwriteDir) - ни чего не происходит - а в режиме эмуляции с библиотекой SysFile вот этот код работает stResult := SysFileCopy(strDestFile, strSourceFile, ADR(nCopiedSize)); - попробовал блок на CFC тоже глухо, не нашёл информацию как указывать папки нужно. Кто знает ?

Евгений Кислов
14.09.2023, 07:15
Поменяйте местами szSourceDir и szDestDir.

ГЛЮКОNIC
14.09.2023, 13:19
Поменяйте местами szSourceDir и szDestDir.

Евгений, вот так ? stResult := SysDirCopy(szDestDir, szSourceDir, xRecursiveDir, xOverwriteDir); - а с указанием папок не ошибся ?

Евгений Кислов
14.09.2023, 13:23
Евгений, вот так ? stResult := SysDirCopy(szDestDir, szSourceDir, xRecursiveDir, xOverwriteDir); - а с указанием папок не ошибся ?

Да.
В путях к папкам я бы рекомендовал использовать традиционные для Windows слэши (\), но ваш вариант тоже будет работать.

ГЛЮКОNIC
14.09.2023, 13:47
вот и я смотрю вроде должно, уже код просто втыкал отдельно в нижнюю часть на этом экране где и переменные, сначало делал что-бы функция исполнялась после будевого старта, сейчас напрямую, вчера ломал голову весь вечер и не понял что не так, решил найти в интернете, ни удалось, потом решился спросить вот на этой теме на данном форуме экспертов или просто людей, буду благодарен за ещё один пиннок, в тексте Ахивация я нашёл про CCA файл и ОвенАрхивер.

ГЛЮКОNIC
15.09.2023, 10:37
хм, попробовал указать Директории для СПК - реально копирует, но не все файлы, скопировал 6 мегабайт, в остальных файлах только названи, буду копать дальше - хм, а вторая попытка всё норм, видимо сбой был какой-то

МихаилГл
15.09.2023, 10:44
хм, попробовал указать Директории для СПК - реально копирует, но не все файлы, скопировал 6 мегабайт, в остальных файлах только названи, буду копать дальше

А может файлы имеют свои разрешения на копирование и пр., что не дает это делать...

ГЛЮКОNIC
15.09.2023, 13:47
А может файлы имеют свои разрешения на копирование и пр., что не дает это делать...

не знаю, сделал повторно процедуру и всё норм, там 11 фото более 3 мегабайт каждая

ГЛЮКОNIC
15.09.2023, 19:55
Спасибо за pdf Архивация, пролистал, там и директории есть контроллеров, взял на вооружение и получилось, Вот только хотел спросить мне хочется что-бы указать или выбрать имя папки назначения или исходной папки в которую пишет Овен Архивер я так понял библиотека Стринг Утилс мне в помощь, там есть замена частичная стринг имени, я не разбирался, но мельком посмотрел библиотека вроде понятная.