Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 18

Тема: SysLibFile не пишет в память

  1. #1

    По умолчанию SysLibFile не пишет в память

    Коллеги, добрый день!

    Что-то не понимаю, в чем дело. В приложенном проекте не пишутся значения на внутреннюю флеш-память. У меня ПЛК150-УМ, прошивка 2.14.0, таргеты 2.11 с сайта ОВЕНа. Если в SysFileOpen в режиме доступа поставить 'w', и при этом файл только создается, то программа "вываливается" (обрывается связь с ПК, и ПЛК уходит в перезагрузку), а в существующий запись не происходит. Если поставить 'rw', то новый файл не создается (функция возвращает 0), а в существующий ничего не пишется. Прошу помощи, так как мыслей никаких уже нет, а сроки поджимают.
    Вложения Вложения
    Последний раз редактировалось Hemann; 07.06.2015 в 23:15.

  2. #2

    По умолчанию

    Особо разбирался но
    1. однозначно 'w';
    2. Tst_str2:=CONCAT(Tst_str2,'$R$N');
    3. что будет если не выполницо условие IF fwByteNum=LEN(fTotal_str) THEN? Будем открывать '1.log' с новым хендлом? Кста, вроде есть ограничение на кол-во открытых файлов, вроде четыре... (???)
    4. перед fTotal_str:=CONCAT(Tst_str,Tst_str2); тоже неплохо было бы fTotal_str:='';
    5. на форуме часто пишут, что методически грамотно разделять операции с файлами по циклам. )
    6. Плохо понимаю условия переходов между шагами.
    Прогоните прогу пошагово обращая внимание что происходит со строками и манипулятором файла.
    7. Да, если есть '$R$N' и SysFileClose то не хватает еще и SysFileSetPos... )

    Еще. полезно писать как то так:

    IF fHandle = 0 THEN
    fHandle:=SysFileOpen('1.log','w');
    END_IF
    IF fHandle <> 0 then
    SysFileClose(fHandle);
    fHandle := 0;
    END_IF
    Последний раз редактировалось lazy; 08.06.2015 в 12:01.

  3. #3

    По умолчанию

    Спасибо! Будем пробовать

  4. #4

    По умолчанию

    Большое спасибо lazy за подсказку, особенно за вот это:
    IF fHandle = 0 THEN
    fHandle:=SysFileOpen('1.log','w');
    END_IF
    Я-то делал без этой проверки, поэтому файл открывался столько раз, сколько хватало дескрипторов, а потом-всё...

    Остался, правда, нюанс в том, что если файла не существует, то ПЛК уходит в перезагрузку... Перед началом работы программы приходится записывать пустой файл во флеш-память, тогда работает.

  5. #5

    По умолчанию

    SysFileOpen('1.log','w') должен либо открывать файл либо создавать его когда такового нет. вполне возможно создать файл за один цикл не получаецо поэтому в условиях перехода между шагами апосля SysFileOpen поставь не TRUE, а fHandle > 0. или проверяй дескриптор перед записью. думаю так )

  6. #6

    По умолчанию

    Неа, не пошло. Дескриптор проверяю по-любому, и при выходе из шага с созданием файла, и (когда файл существует) перед записью, но ПЛК при отсутствии файла все равно уходит в перезагрузку.

  7. #7

    По умолчанию

    Сделай так чтобы за один цикл ПЛК было только одно обращение к какой либо функции работы с файлами. Потом. При включении открываем файл. Обращаемсо к SysFileOpen пока не дождемся хендла. Открылся? (значит создался) - следующим циклом - закрываем. Далее Цикл - Открываем. следующий цикл - пишем. следующий - закрываем. итд. У меня по таком алгоритму все и работает. )

  8. #8

    По умолчанию

    lazy это все оказались проделки самого ПЛК. Я взял у себя на складе ПЛК110-32 и перенес программу на него - все создается и пишет и т.д. Но тут оказались еще чудеса. Я открываю файл с двумя хендлами, т.е. один раз создаю/открываю на запись, а второй-на чтение. Это для того чтобы данные могли одновременно записываться в архив, и в тоже самое время можно было по нему двигаться для просмотра. В общих чертах работает, но почему-то при чтении удается двигаться только между первыми пятью записями, дальше не удается. Я пытаюсь установить нужную позицию с помощью SysFileSetPos и контролирую что получилось с помощью SysFileGetPos, так вот SysFileGetPos упирается в какой-то "потолок" и все. Вниз до нуля-пожалуйста, от нуля до этого "потолка"-тоже без проблем, а вот выше-никак. Чтобы это значило?

  9. #9
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Я открываю файл с двумя хендлами
    Так не делают. До закрытия дескриптора на запись в дескрипторе на чтение можно ожидать чего угодно.
    Последний раз редактировалось Yegor; 14.06.2015 в 11:56.

  10. #10

    По умолчанию

    Yegor Спасибо. Может быть тогда посоветуете как мне быть: нужно и записывать в архив новые значения, и двигаться по этому файлу в режиме чтения уже имеющихся записей, причем одновременно (не в одно мгновение, но читать файл не прерывая записи)

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Modbus (Master) не отображается в память Modbus (Slave)
    от ghoch в разделе Помощь Разработчикам
    Ответов: 3
    Последнее сообщение: 07.05.2018, 09:40
  2. Архиватор не пишет файлы
    от Hemann в разделе СПК2хх
    Ответов: 6
    Последнее сообщение: 25.11.2013, 22:38
  3. МСД200 Slave ModBus RTU 0x10 не пишет все регистры
    от Туман в разделе Эксплуатация
    Ответов: 10
    Последнее сообщение: 06.10.2013, 13:23
  4. Кто в чем пишет
    от asdvas в разделе Подбор Оборудования
    Ответов: 20
    Последнее сообщение: 07.04.2012, 13:56
  5. ИП320 пишет Downloading
    от drvlas в разделе Панели оператора (HMI)
    Ответов: 2
    Последнее сообщение: 29.11.2011, 15:26

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •