Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | личка на форуме - не подходит
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | PRO32 Connect
Вопрос: как вывести число LREAL? 64 бита
С преобразованием то все понятно. Вопрос был именно про double. Как получить и вывести без потерь. Нет такого функционала в СП3хх??
Панели нет под рукой, но думаю что можно сразу "напечатать" в текстовый дисплей
Где тестовый дисплейКод:double myDouble = 123.456789012345; sprintf((char*)&PSW[256], "%16.12f", myDouble);
Захват-11.png
Захват-13.png
ЗЫ.
По крайней мере компилируется без ошибок
Последний раз редактировалось petera; 21.10.2026 в 11:54.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
я хочу получить LREAL из ПЛК. То есть я в ПЛК формирую 4 регистра и пишу в, допустим PSW[600..603]. Далее, я произвожу обработку в скрипте и пишу это в PSW[604..610] (если формат будет f11.3). И уже в текстовом дисплее буду ссылаться на PSW604.
Всё верно?
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
наверное можно. Я только хочу сделать ещё union с double и word[4], чтобы в функции байты подвигать при необходимости. Пока до этой задачи не дошел. Если пойду по этому пути -выложу макрос. Но вопрос касается накопительного расхода из ТСРВ-043, там он лежит в int32(целая часть)+float(после запятой). Я ранее все это складывал в тип LREAL в ПЛК, и прямо этим типом по OPC UA передавал наверх. Здесь только Modbus - я пока прикуриваю) Нужно подумать что сделать в ПЛК, потом уже реализовывать в панели)
Проверил код в панели
IMG_20261022_112916.png
ЗЫ.
А теперь сравните мой код с кодом хваленого AI
Мой - печатает сразу в текстовый дисплей с адреса PSW256
а это код от AIКод:// Исходное число (пример) double myDouble = 123.456789012345; sprintf((char*)&PSW[256], "%16.12f", myDouble);
Он преобразует переменную типа double в строку и сохраняет её, начиная с регистра PSW320
И далее AI предлагает сделать тестовый дисплей с адреса PSW320Код:char str_buf[20]; // Исходное число (пример) double my_double = 12345.67890123; snprintf(str_buf, sizeof(str_buf), "%.6f", my_double); // Указатель на начальный регистр памяти панели (PSW320) WORD *psw_ptr = (WORD*)&PSW[320]; int i = 0; while (str_buf[i] != '\0' && i < (sizeof(str_buf) - 1)) { // Получаем текущий символ и следующий за ним BYTE low_b = (BYTE)str_buf[i]; BYTE high_b = (str_buf[i+1] != '\0') ? (BYTE)str_buf[i+1] : 0; *psw_ptr = (WORD)((high_b << 8) | low_b); if (str_buf[i+1] == '\0') { break; } psw_ptr++; // Переходим к следующему PSW регистру i += 2; // Сдвигаемся на 2 символа вперед } if (i % 2 == 0) { *psw_ptr = 0; }
Захват-33.png
Последний раз редактировалось petera; 22.10.2026 в 12:15.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg