Страница 4 из 4 ПерваяПервая ... 234
Показано с 31 по 38 из 38

Тема: Библиотека SysLibFile

  1. #31

    По умолчанию

    1. Абсолютно неправильно работает вся система управления архиватором.
    Например код
    ST_T:=254;
    ...
    ST_T:=255;

    выполнятся правильно не будет, т.к. архиватор получает команду только после завершения цикла ПЛК, а любые манипуляции в ходе цикла игнорируются (это ключевая особенность ПЛК как класса).
    В результате каждый цикл файл пишется и доступ к файлу, естественно, оказывается заблокированным, т.к. этот файл занят.

    Далее:

    Одновременно с попыткой управления архиватором происходит еще множественный доступ к файлам

    REGISTRATOR_TENZO(....);

    WRITE_RETAIN;

    Archive;

    Эти операции необходимо разнести по времени.

    В программе Archive
    происходит также одновременный множественный доступ к файловой системе. Этот участок тоже надо разбить на отдельно исполняемые части.
    В программе PLC_PRG больша часть событий обрабатывается тоже в 1 цикле - это неправильно.

  2. #32

    По умолчанию

    Спасибо Владислав.
    У вас есть простенький пример работы с архиватором по команде?
    Что мне необходимо сделать, чтобы добавить очередную запись в файл по событию?
    Как я понял, нужно придать соответствующие значения архивируемым переменным, после чего придать переменной Status значение 255 (ST_T:=255 в моей программе), так? И команду "стоп" (ST_T:=254) нужно будет подать в следующем цикле работы ПЛК. Я понял правильно?

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Одновременно с попыткой управления архиватором происходит еще множественный доступ к файлам

    REGISTRATOR_TENZO(....);

    WRITE_RETAIN;

    Archive;

    Эти операции необходимо разнести по времени.
    Ну программа REGISTRATOR_TENZO(....); у меня как раз и управляет архиватором.

    WRITE_RETAIN пришлось делать по причине не сохранения ретэйн переменных при перезагрузке. Собственно, если я буду ее вызывать из Task Configuration по событию befor reset, этого будет достаточно, так?

    Разнести операции записи в файл нужно по реальному времени, или достаточно будет выполнять их в разных циклах работы ПЛК?

    В программе PLC_PRG больша часть событий обрабатывается тоже в 1 цикле - это неправильно.
    Если я сделаю основную программу на SFC, разнеся события по разным шагам, то это будет правильно?

    Заранее благодарен.

  3. #33

    По умолчанию

    Еще раз здравствуйте.
    Все переделал, вроде получилось. Модуль архив - штука не жизнеспособная, была выкинута, сделал через SysLibFile.
    Встал вопрос, что делать с переполнением регистратора. Как из файла удалять часть более ранних записей, продолжая добавлять в конец новые данные? Как реализовать "shift mode" средствами SysLibFile?

  4. #34

    По умолчанию

    очень просто. читаете последнюю половину файла в буфер, создаете новый файл, записываете буфер (не забудьте заголовок добавить к нему), удаляете старый файл, переименовываете.
    лучше делить файл не побайтно, а по строкам.

  5. #35

    По умолчанию

    Ага. Буфер должен быть строковой переменной так? я собираюсь удалять треть файла после записи 6000 строк, максимальная длина строки - 100 символов, размер файла тогда может доходить до 600 кБ (100*6000). CoDeSys будет нормально работать со строкой длиной 400 000 ? Или со строковым массивом 4000 Х 100? Или следует считывать и записывать файл построчно? В таком случае, сколько времени это может занять?

  6. #36

    По умолчанию

    Buffer:Array [0..1024] of byte;
    Строки можно делать любой длинны, но работать с ними с помощью строковых функций - только до размера 256 байт.

  7. #37
    Пользователь
    Регистрация
    10.01.2007
    Адрес
    Красноярск
    Сообщений
    138

    По умолчанию

    Хочу прояснить для себя следующее, т.к. на форуме всё разбросано по разным темам.
    Ситуация. Ratain сбрасываются при Reset Original контроллера. Поэтому для комфортной отладки и дальнейшей эксплуатации сохраняю уставки работы системы в файл. Т.е. при изменнении уставок выполняю перезапись данных в файл с заданным именем, а при начале работы программы восстанавливаю из файла. Какая последовательность действий при записи данных в файл верная:

    - открыть файл на запись
    - записать файл
    - закрыть файл

    или

    - удалить файл
    - открыть файл на запись
    - записать файл
    - закрыть файл

    Конкретно интересует в первом случае ФС трёт данные по одному и тому же месту диска или каждый раз использует разные места?
    На какой ресурс количества записей можно расчитывать в том и другом случае?
    Размер файла укладывается в один блок.

  8. #38

    По умолчанию

    ресурс одноблоковых записей (первый блок==448 байт!) 300000000 записей.
    если размер данных не меняется или только увеличивается - вариант 1 подходит.
    если уменьшается - вариант 2.

Страница 4 из 4 ПерваяПервая ... 234

Ваши права

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