Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 38

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

  1. #21

    По умолчанию

    или мне достаточно будет узнать как можно записывать в архив периодически (ну скажем через секунду) строковую переменную 'slovo'. в данной программе оно записывается только 1 раз. если кто поможет то буду очень благодарен!!!

    PROGRAM PLC_PRG
    VAR
    x:STRING; (*строка для архивирования*)
    number: DWORD; (*дескриптор файла*)
    dipos: DINT; (*текущая позиция в файле*)
    dwSize: DWORD; (*количество записанных байт данных*)
    dwSize1: DWORD; (*размер файла*)
    END_VAR

    (*открываем файл*)
    number:=SysFileOpen('arc.log', 'w');
    (*создаём строку*)
    x:='slovo';
    (*Пишем строку в файл*)
    dwSize:=SysFileWrite(number,ADR(x),LEN(x));
    (*получаем текущую позицию в файле*)
    dipos:=SysFileGetPos(number);
    (*получаем размер файла в байтах*)
    dwSize1:=SysFileGetSize('arc.log');

  2. #22

    По умолчанию

    см. другой пост. зачем их дублировать?

  3. #23

    По умолчанию

    прошу прощения, думал одно из сообщение не отправилось. скорость интеренета на работе оставляет желать лучшего)

  4. #24

    По умолчанию

    Здравствуйте.
    У меня вопрос. Попытался воспользоваться функцией SysFileGetSize
    Она работает некорректно, на файл размером в 18 кБ, возвращается непонятное число - 9 с лишнем миллионов.
    Нужно вот для чего, у меня ведется архивация с помощью модуля Archiver, на вашем форуме я прочитал, что размер архива не может превышать 32 кБ, практика показала, что это правда (почему -то не указанная в документации). Нужно внести такие изменения в программу, чтобы она проверяла размер архива, и, в случае превышения его размера, скажем, 30 кБ, копировала его в новый файл.
    Функция SysFileCopy, кстати, то же работает у меня не корректно, новый файл создается, но он пустой.
    Как быть?

  5. #25

    По умолчанию

    1. Опишите что за ПЛК
    2. "неработающий" код в студию.
    3. Архиватор - не абсолютное решение, а предназначен для простых задач. Если его функционала не хватает - Вы можете сами написать его улучшенный аналог использую библиотеку SysLibFile.lib

  6. #26

    По умолчанию

    Выложу написанный мной текст программы, который сейчас не работает как надо

    PROGRAM Archive
    VAR
    FileSize: DWORD;
    filename: STRING [40];
    Files_Name_Array: Files_Name;
    fAD,fSize, fileadr: DWORD;
    END_VAR
    VAR RETAIN
    Flag:BOOL;
    END_VAR

    TYPE Files_Name :
    STRUCT
    File_Name_Array: ARRAY[1..50] OF STRING[40];
    NFile: BYTE;
    END_STRUCT
    END_TYPE


    FileSize:=SysFileGetSize('tenzo_reg.log'); (*Определение размера файла регистратора *)

    IF FileSize> 30000 AND (NOT Flag) THEN (*Если размер файла превысел 30 Кбайт, то сохраняем данные в новом файле *)

    filename:=CONCAT('reg' , '_');
    filename:=CONCAT(filename ,INT_TO_STRING(DT_NOW[3]));
    filename:=CONCAT(filename , '_');
    filename:=CONCAT(filename ,INT_TO_STRING(DT_NOW[2]));
    filename:=CONCAT(filename , '_');
    filename:=CONCAT(filename ,INT_TO_STRING(DT_NOW[1]));
    filename:=CONCAT(filename , '_');
    filename:=CONCAT(filename ,INT_TO_STRING(DT_NOW[4]));
    filename:=CONCAT(filename , '_');
    filename:=CONCAT(filename ,INT_TO_STRING(DT_NOW[5]));
    filename:=CONCAT(filename , '.log');

    SysFileCopy(filename,'tenzo_reg.log');

    Flag:=TRUE;

    fAD:=ADR(Files_Name_Array);
    fSize:=SIZEOF(Files_Name_Array);
    fileadr:=SysFileOpen('Nfile.txt','r');
    SysFileRead(fileadr,fAD,fSize); (*Считываем данные об уже записанных фалах*)
    SysFileClose(fileadr);

    IF Files_Name_Array.NFile < 50 THEN
    Files_Name_Array.NFile:=Files_Name_Array.NFile+1;
    ELSE Files_Name_Array.NFile:=1;
    END_IF;

    SysFileDelete(Files_Name_Array.File_Name_Array[Files_Name_Array.NFile]); (*удаляем старый файл*)

    Files_Name_Array.File_Name_Array[Files_Name_Array.NFile]:=filename; (*Записываем в массиы имя нового файла*)

    fAD:=ADR(Files_Name_Array);
    fSize:=SIZEOF(Files_Name_Array);
    fileadr:=SysFileOpen('Nfile.txt','w');
    SysFileWrite(fileadr,fAD,fSize); (*Записываем в файл данные об имеющихся файлах регистратора*)

    ELSE Flag:=FALSE;
    END_IF;


    В файле tenso_reg.log ведется архив через модуль Archiver в режиме Shift mode. Нужно его периодически копировать в новый файл.

    По факту происходит следующее. FileSize принимает то невероятно большие значения, то становится равным 0, в результате у меня в ПЛК создается куча файлов (за полчаса работы штук 20), все пустые.
    Что я делаю неправильно?

    ПЛК 150 IM
    Последний раз редактировалось Ollegator; 25.11.2009 в 17:36.

  7. #27

    По умолчанию

    Эта программа у меня вызывается после каждого сделанного цикла грузоподъемного крана, параметры этого цикла нужно регистрировать, в файле tenzo_reg.log сохраняется информация о 150 - 200 последних циклах, этого недостаточно. Полностью переписывать принцип регистрации, используя SysLibFile неохота, да и время поджимает.

  8. #28

    По умолчанию

    пришлите весь проект, я его протестирую.
    какой у вас плк, версии прошивок, логи загрузки пришлите.

  9. #29

    По умолчанию

    хорошо, сейчас выложу, однако, чтобы протестировать проект, нужно подавать сигналы от датчиков на аналоговые входы плк, у меня для этого стоит другой плк , который имитирует эти сигналы по нужному алгаритму. кроме того, многие уставки вводятся с панели оператора.

  10. #30

    По умолчанию

    плк 150 Im
    прошивка 10.5.0

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

    цикл в программе начинается, когда усилие на датчике превышает определенное значение (5 т для основного подъема в этой программе) и регистрируется, если его длительность превышает 15 с.
    конец цикла определяется, когда сигнал с датчика становится меньше определенного значения.

    я еще прикрепил файл уставок, который надо записать на плк, чтобы не вводить с панели.

    вообще, проект не мой, многое в нем мне самому не нравится, но мне его править.
    Вложения Вложения

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Ваши права

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