1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Локали в B&R

Ответить

Автор темы
madlih
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 28 сен 2020, 20:35
Имя: Алексей
Страна: Россия
город/регион: Воткинск

Локали в B&R

Сообщение madlih »

Добрый день, знатоки ПЛК семейства х20.
Есть такой вопрос : написал задачу писать лог файл в память контроллера в формате CSV.
Формирую строку для записи в файл через sprintf, который пишет десятичные дроби с десятичным разделителем ".".
Хочу сменить десятичный разделитель, почитал маны. Узнаю что функции семейства printf используют настройки текущей локали.
В хелпе AS 4.10 читаю про локали:
The <clocale> and <locale> libraries make it possible to handle cultural differences.
В списке поддерживающих функции нахожу setlocale, которая и меняет текущую локаль. Читаю из справки по функции из хелпа AS:
Описание
setlocale — это средство, определенное ANSI C для настройки среды выполнения для международной сортировки и форматирования информации; localeconv сообщает о настройках текущей локали.
Это минимальная реализация, поддерживающая только обязательные значения "POSIX" и "C" для локали; строки, представляющие другие локали, не учитываются, если не определено _MB_CAPABLE.
Если определено _MB_CAPABLE, строки локали POSIX разрешены, следуя форме language[_TERRITORY][.charset][@modifier]
Пробую

Код: Выделить всё

char* ptr = setlocale(LC_NUMERIC,"ru_RU.UTF-8"); 		// меняем локаль
sprintf(locname,"%s", setlocale(LC_NUMERIC, NULL));	 	// узнаем имя текущей локали
Функция возвращает ноль, что означает что локаль не сменилась. В строке locname значение "С".

_MB_CAPABLE не определен, как я понимаю он должен был быть определен при сборке библиотеки...

Кто нибудь имел опыт с локалями в B&R X20??
Ответить

Вернуться в «B&R Automation»