Показано с 1 по 8 из 8

Тема: Распределение памяти

  1. #1

    По умолчанию Распределение памяти

    В документации по пункту есть сноски, что размеры некоторых областей памяти можно изменять. Где узнать, в каких пределах?
    Вопрос второй: подскажите, как можно узнать заполнение Flash памяти (ПЛК150УМ)?

  2. #2

    По умолчанию

    1) Это можно сделать в Target Settings
    2) Не совсем понятно что Вы имеете в виду - возможно командами PLC browser 'dpt', 'ppt', 'pid' ?

  3. #3

    По умолчанию Распределение памяти

    По первому вопросу: Target Settings-> Memory Layout, допустим, Retain->Size - в каких пределах можно менять значение? Что такое сегментный номер Area? Где прочитать про это?
    У меня задача хранить большой объём данных. Как вариант - сбрасывать их в файл, используя библиотеку SysLibFile.lib. Нужна информация о максимально возможном размере одного файла и о максимально возможном объёме информации, хранимой в нескольких файлах. Как посмотреть кол-во используемой и свободной Flash памяти?

  4. #4

    По умолчанию

    1) Retain - max 16kB. Почитать в документации на CoDeSys.
    2) Считывайте размер каждого файла командой SysLibGetFileSize и полученное число вычитаете из 3мБ (размер ФС)-размер default.prg.
    Макс. размер файла в ФС - 4 Гб (понятно, что пока USB Host недоступен это конечно не нужно...)
    Последний раз редактировалось Малышев Олег; 31.05.2007 в 16:15.

  5. #5
    Пользователь
    Регистрация
    05.05.2007
    Адрес
    Барнаул->Москва
    Сообщений
    139

    По умолчанию

    Олег, а каким образом подгружать файлы? просто я тут почитал (пробовать пока некогда).... стринговая переменная вмещает в себе 200 символов. Я так понимаю придется заполнять массив кусками по 200 символов на переменную? Или есть менее извратный способ?

  6. #6

    По умолчанию

    Переменная типа STRING может иметь беск. размер (Аналогично строке в C). Ограничение на размер накладывается библиотечными функциями работы со строками. Если их не использовать, то все будет нормально.

    Также можно использовать массивы и более сложные структуры, а в файловые функции передавать указатель на них (приведенный к нужному типу).
    Тролль-наседка, добрый, нежный и ласковый

  7. #7
    Пользователь
    Регистрация
    05.05.2007
    Адрес
    Барнаул->Москва
    Сообщений
    139

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    (приведенный к нужному типу).
    В каком смысле? Обрезанный до 200?

  8. #8

    По умолчанию

    Пример:

    FUNCTION SysFileWrite : DWORD
    VAR_INPUT
    File: DWORD;
    Buffer: DWORD; (* Address (ADR) to Buffer *)
    Size: DWORD;
    END_VAR
    VAR
    END_VAR

    объявляем массив:

    my_file_buffer:Array 0 .. 65535 of BYTE;

    Вызываем функцию

    SysFileWrite (File_handler, ADR(my_file_buffer), 5000);
    В результате записали 5000 байт из массива my_file_buffer
    Тролль-наседка, добрый, нежный и ласковый

Ваши права

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