Страница 2 из 28 ПерваяПервая 123412 ... ПоследняяПоследняя
Показано с 11 по 20 из 279

Тема: CODESYS V3.5. Архивация

  1. #11
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,064

    По умолчанию

    Я на следующей неделе постараюсь подготовить небольшой пример на тему WSTRING.

    + по аналогии с Вашим примером сделал "сшивание строк" при помощи WCONCAT - не работает функция (аналог Вашей CONCAT11 - там менял STRING на WSTRING)
    пришлось все склеивать руками, хотя с массивами быстрее было бы.
    Сложно что-то сказать, не видя кода. Но сама концепция подойдет и для WSTRING.

  2. #12

    По умолчанию

    ну я переделал модуль примерно так:

    FUNCTION CONCAT11 : WSTRING
    VAR_INPUT
    asSTR: ARRAY [0..c_MAX_STR] OF WSTRING;
    END_VAR
    VAR
    sBuffer: WSTRING; // промежуточная переменная
    i: INT; // счетчик для цикла
    END_VAR

    VAR CONSTANT
    c_MAX_STR: INT:=10; // размер массива строковых переменных
    END_VAR

    и, соответственно переменные с которыми он работает заменил на WSTRING.
    Склеивание через массив не проходило, хотя переменные было видно.

    Сейчас есть проблема с кодировкой, к сожалению... В CSV файле белиберда...

  3. #13
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,064

    По умолчанию

    Итак, по поводу архивации в WSTRING/Unicode.

    1. Берем исходный пример и везде, где идет работа с сохраняемыми данными, меняем тип STRING на WSTRING (это касается как кода программы StringFileExample_PRG, так и вспомогательных функций и ФБ типа CONCAT11, SPLIT_DT_TO_FSTRINGS и всех остальных). Также меняем строковые функции из библиотеки Standard на аналогичные из Standard64 (CONCAT на WCONCAT и т.д.).

    2. При записи в файл умножаем длину строки на 2 (т.к. у WSTRING каждый символ весит 2 байта):
    Код:
    fbFileWrite(xExecute:=TRUE, hFile:=hFile, pBuffer:=ADR(wsArchEntry), szSize:=2*INT_TO_UDINT(WLEN(wsArchEntry)));
    3. У семейства Unicode есть разные кодировки - Utf8, Utf16, Utf32. Кроме того, бывают разные вариации с порядком байт (Big Endian и Little Endian). Чтобы упростить жизнь, придумали такую штуку, как маркер последовательности байт. В сущности - это несколько спецсимволов, которые записываются в начало файла и содержат информацию о кодировке/порядке байт. В текстовом редакторе, соответственно, эти символы не отображаются. Подробнее по ссылке.

    В CODESYS тип WSTRING связан с кодировкой UCS2. В принципе, это тот же UTF16, только каждый символ всегда занимает ровно 2 байта.
    Давайте добавим к нашему файлу маркер. Создадим в программе переменную wsByteOrderMark и инициализируем ее в коде (поскольку маркер - спецсимвол, то задаем его прямо побайтно):
    Код:
    wsByteOrderMark[0]:=16#FEFF; // почему именно такое значение - см. ссылку выше
    Маркер должен быть в начале файла - т.е. в нашем случае перед заголовком архива. Поэтому склеим его и заголовок в переменную wsFirstString:
    Код:
    wsFirstSting:=WCONCAT(wsByteOrderMark, c_sTitle);
    И теперь везде в программе, где мы раньше использовали c_sTitle, заменим ее на wsFirstSting. Собственно, вот и вся история с маркером.

    4. Не все текстовые редакторы адекватно отображают Unicode-файлы, в которых есть маркеры и спецсимволы. Например, стандартный Блокнот и встроенный редактор WinSCP - не лучший выбор. Лучше использовать что-то типа Notepad++.


    Прикладываю к посту архив с адаптированным примером, в котором ведется архивация строк типа WSTRING в файл формата .txt.
    Вложения Вложения

  4. #14

    По умолчанию

    ФТП опять отвалился? Не могу скачать ни один файл по Кодесису 3.

  5. #15
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,064

    По умолчанию

    Цитата Сообщение от FoeNicks Посмотреть сообщение
    ФТП опять отвалился? Не могу скачать ни один файл по Кодесису 3.
    К сожалению, да.

    Upd. - починили.

  6. #16

    По умолчанию

    FTP - снова не работает((!

  7. #17

  8. #18
    Пользователь Аватар для Serhioromano
    Регистрация
    15.09.2015
    Адрес
    Бишкек
    Сообщений
    265

    По умолчанию

    Вопрост такой. Допустим у меня есть процесс некий из 4х шагов. Это процесс сушки форукта. Под каждый фрукт разные настройки. Я хочу сохранить настройки в файл например и потом загрузить из файла.

    В принципе из документа все понятно, как записать и как прочитать, как вывести список файлов, выбрать и т.д. С этим воросов нет. Но вот мне не свосем понятно с форматом. Я пришел из веб прогрммирования. Там я мог сохранять в файлы JSON потом читать и просто декодировать обратно в объект.

    Что можно использовать тут что бы можно было просто обратно прочитать в в переменные? Какой формат записи что бы потом леко прочесть? Моя конфигурация это просто набор имен и значений.

  9. #19

    По умолчанию

    Посмотрите не работу с файлами а использование рецептов.

  10. #20

Страница 2 из 28 ПерваяПервая 123412 ... ПоследняяПоследняя

Похожие темы

  1. ОРМ и архивация трм202
    от Vlad$13 в разделе OWEN Proces Manager
    Ответов: 5
    Последнее сообщение: 13.01.2017, 08:44
  2. OPM и Архивация
    от DmitrySoratnik в разделе OWEN Proces Manager
    Ответов: 1
    Последнее сообщение: 30.09.2016, 11:19
  3. Архивация в CoDeSys v3.5 SP7
    от Анатолий К. в разделе СПК2хх
    Ответов: 3
    Последнее сообщение: 04.03.2016, 11:49
  4. Архивация
    от Salvafion в разделе Master SCADA 3
    Ответов: 7
    Последнее сообщение: 28.09.2011, 08:29
  5. Архивация данных
    от Alor в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 25.11.2008, 11:27

Ваши права

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