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

Тема: Архив типа shift mode средствами SysLibFile

  1. #31

    Exclamation Реализация режима Shift mode

    Огромный привет Gans! Ну, вот, приехал с командировки и третий день пытаюсь разнести по циклам работу с файлами. Получается все что угодно, только не то что нужно... Может кто подскажет, как правильно и грамотно это сделать?
    Какие операторы работы с файлами из SysLibFile требуют больше времени для завершения своих действий, а какие можно писать в программе подряд? Привожу часть кода из ARC_Y_10_04_17 который нужно разнести по циклам.

    sizAR := SysFileGetSize('arc.txt'); (*Получаем размер файла в байтах*)
    IF sizAR > 3072 THEN (*Если файл превысил лимит по объему в байтах, хотя придел надо уточнять*)

    sizBUF := (sizAR / 3) *2; (*Вычисляем 2/3 размера файла*)
    SysFileSetPos(f1, sizBUF); (*Выставляем указатель на 2/3 файла*)
    SysFileRead(f1, ADR(BUFER), (siz - sizBUF)); (*Читаем в буфер последнюю треть файла*)
    SysFileClose(f1);

    IF f2 = 0 THEN f2 := SysFileOpen('temp.txt', 'w'); END_IF (*Открываю новый файл для записи*)
    SysFileWrite(f2, ADR(BUFER), SIZEOF(BUFER));
    FOR i := 0 TO 1024 DO BUFER [i] := 0; END_FOR (*Очищищаем буфер*)

    SysFileClose(f2);
    SysFileDelete('arc.txt');
    SysFileRename('temp.txt', 'arc.txt');

    END_IF;(*IF sizAR > 3072 THEN*)

  2. #32

    По умолчанию

    Я бы сделал
    case i of
    1: i:=+1;
    2: i:=+1;

    n:

    end_case
    Часто задаваемые вопросы по кодесис
    1) Почему программа не работает - Следует выполнить "Онлайн ->Старт"
    2) Где скачать CoDeSys, таргеты, прошивки, библиотеки - http://www.owen.ru/catalog/codesys_v3/opisanie

  3. #33

    По умолчанию

    здравствуйте владимир. выложите последний вариант вашей программы и окружающие помогут. мне кажется что сам процесс переноса последних 30% в новый файл (с заменой старого) нужно делать отдельным функциональным блоком. вобщем выкладывай, посмотрим :-)
    Автоматизация Диспетчеризация Сервис
    e-mail: ads-kaluga@mail.ru

  4. #34

    По умолчанию

    Цитата Сообщение от Владимир Васильевич Посмотреть сообщение
    Рекомендую не писать 20 раз в файл, а накапливать данные в буфере и сбрасывать на диск большими блоками. Каждое обращение к функции записи неизбежно затирает 1 блок Flash. Да и быстрее будет..
    Вопрос. Допустим, организовали буфер длинной в 1 блок Flash (хорошо бы еще длину знать) и пишем в файл по заполнению буфера. Допустим, каждая десятая запись начинается с начала файла и затирает "самую древнюю". Будет ли использовано только десять блоков на Flash? И еще, если, скажем, необходимо скинуть незаполненный буфер в файл, например, при выключении. Скинули. Теперь если при включении прочитать этот кусок в буфер, добить его(буфер) данными и записать в ту же позицию файла будет начат следующий блок Flash или запишется в прошлый( в тот куда записался "недобитый" кусок буфера в прошлый раз )? Заранее благодарен
    Последний раз редактировалось lazy; 09.07.2010 в 14:19.

  5. #35

    По умолчанию

    первый блок 448 байт, остальные по 512.
    Нет. Записи равномерно растираются по всей Flash для одинакового износа.
    Но 1 запись = 1 запись на Flash. В любом случае. Дозаписи не бывает, весь блок во Flash при записи аппаратно стирается.
    Дозапись бывает если использовать сегмент - но это для больших объемов требуется.

  6. #36

    По умолчанию

    Добрый день! Предлагаю свой вариант "Шифт-архива". Строки архива формируется из "постоянной" и "переменной" частей подобно sprintf. Строки накапливаются в ретайн буфере равном двум записям в файл. В данном примере запись равна 512 байт. При достижении архивом "критического размера" каждая новая запись в архив затирает самую старую. Запись в файл разбита по циклам ПЛК. С помощью этой программы можно увидеть, что кнопка "Reset" генерирует только события "Start" и "Power_On". Поэтому, после сброса ПЛК кнопкой "Reset", архив начинает запись по предыдущему "Store". Что, естественно, идеологически неверно. События "Before_Reset" и "After_Reset" генерируются только при команде "Сброс" из CoDeSys. Это моя вторая программа для "Овен" (первая была подобна "Hello Word") поэтому буду благодарен любому пинку. И все-таки интересно, какие события должны генерироваться при нажатии на кнопку "Reset"?

    В предпоследней строчке fbArchiver нужно исправить строчку gr_anParam[_STEP] := 0; на:
    gr_anParam[_STEP] := gr_anParam[_STEP] - WRITESIZE;
    Вложения Вложения
    Последний раз редактировалось lazy; 24.08.2010 в 09:30.

  7. #37

    По умолчанию

    Так кто же все таки ответит? Почему невозможно перехватить нажатие на кнопку "Reset" на контроллере ПЛК100-24.К-М до того как он начнет "перезагружаться" (или сбрасываться)? А если возможно, то как? Заранее благодарю.

  8. #38

    По умолчанию

    Потому что reset аппаратный

  9. #39

    По умолчанию

    Я так понял даже "Power status" бессилен? Конечно, не мне решать, но правильно ли это? Господи, Нео, просто нажми "Reset" матрица об этом никогда не узнает...

  10. #40

    По умолчанию

    Вот для этого Reset и утоплен в корпус. Типичный палец млекопитающего начиная с 1 кг весом не пролазит в дырку.

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

Ваши права

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