PDA

Просмотр полной версии : проблемы с SysFileClose



Safron
17.03.2011, 14:28
Всем привет. Пытаюсь освоить системные бибилиотеки. А именно SysLibFile. Файл открывается. Возвращается количество записанных байт. Удаляется. Считывается. А вот закрыть не удаётся...Не знаю где собака порылась.

Safron
18.03.2011, 07:31
Это ошибка в реализации библиотеки. На самом деле файл закрывается.
Функция Close на самом деле возвращает DWORD. - Слова Филоненко Александра, с какой-то темы. Но если установить переменной (присвающей значение SysFileClose)тип DWORD. то компилятор выдаёт ошибку несоответствия типов. ???

Safron
28.03.2011, 11:04
Да...похоже не очень популярный вопрос я задал. Никто из ОВЕНа не отозвался. Теперь следующие вопросы к производителям ПЛК 154. В приведённом ниже примере файл прекрасно пишется и закрывается.
Но есть два вопроса:
1) Функция записи работает только в режиме 'W'. В режиме 'a' выдаёт ошибку 100.
2) Так и не ясно , что возвращает xReturn := SysFileClose(dwHandle) в случае ошибки и возвращает ли, что либо ещё кроме FALSE. Мои эксперименты показали, что в случае удачного закрытия файла возвращается FALSE, а не TRUE как в описании. Добиться момента когда произойдёт ошибка мне не удалось.
Хотелось бы понять это ошибки самой библиотеки или же в контроллере не полностью реализованы эти функционалы?

Александр Приходько
28.03.2011, 12:15
День, добрый. Скажем так, не очень много пользователей используют данный функционал. Попробуйте мой пример с архивом поглядеть. У меня все работало:
http://www.owen.ru/forum/showpost.php?p=23817&postcount=45

Thorn
08.05.2011, 15:24
Попробуйте мой пример с архивом поглядеть. У меня все работало:===========
SysFileClose(f1);
t(IN := FALSE, PT:= T#0s);
===========

- Хех, если коды возврата не проверять то так конечно будет "работать" ;)

Филоненко Владислав
09.05.2011, 20:55
1. SysWrite действительно работает только в режимах w и r. Которые и описаны в документации. Других режимов в документации не описано. Это не библиотечная функция C!
1а. Режим A можно реализовать самому, вызвав после открытия функцию SysFileSeek()
2. Документацию желательно читать ДО.
3. SysFileClose всегда закрывает файл. Причин ей помешать нет.

P.S. Я Владислав :)

Thorn
09.05.2011, 22:25
1. SysWrite действительно работает только в режимах w и r. Которые и описаны в документации. Других режимов в документации не описано. Это не библиотечная функция C!Мне 'a' не нужно было, но вы меня заинтриговали, вот что говорит доступная мне документация (F1 в CoDeSys):
==================
Access mode:
w write (File will be updated or created newly)
r read (File will only be opened for reading; if the file does not exist, an error will be returned)
rw read and write (File will be updated; if the file does not exist, an error will be returned)
a append (File will be opened like described for 'w', but the written data will be appended at the end of the file)
==================
Слово в слово содержимое файла SysLibFile_E.pdf и перевод в SysLibFile_RU.pdf. Хотя вы правы, я не поленился проверить - оно действительно не работает.
Источник PDF'ок файл Bibl_CoDeSys.zip, откуда слил не помню, но с огромной долей вероятности с www.owen.ru.

Александр Приходько
10.05.2011, 09:31
Смотрим описание тут:
4015

Smith2007
07.10.2013, 21:13
В приведенном по ссылке файле явно указаны режимы "rw" при открытии файла.
Больше двух лет проблеме и она до сих пор не решена?
Ну хоть описание поддерживаемых функций поправьте.