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

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

  1. #11

    По умолчанию

    Я на следующей неделе постараюсь подготовить небольшой пример на тему 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

    По умолчанию

    Итак, по поводу архивации в 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

    По умолчанию

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

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

  6. #16

    По умолчанию

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

  7. #17

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

    По умолчанию

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

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

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

  9. #19

    По умолчанию

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

  10. #20

Страница 2 из 16 ПерваяПервая 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

Ваши права

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