Поправочка -- PlcLogic/visu
Почему-то так, в CS 3.5 SP14, во всяком случае.
Поправочка -- PlcLogic/visu
Почему-то так, в CS 3.5 SP14, во всяком случае.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Добрый день.
Пытаюсь читать значения из рецептов функцией RecipeManCommands.GetRecipeValues из библиотеки Recipe_Managment.
Все получается ок но не получается прочитать данные если они хранятся в рецепте в виде WSTRING. Даже если в функцию передать массив WSTRING строк то все возвращаются крокозяблы
Вопросы:
- можно ли хранить в рецепте строки WSTRING?
- как прочитать корректно такие строки без загрузки в переменные программы всего рецепта?
Спасибо
Добрый день.
1. Можно
2. Предлагаю начать с этого:
https://youtu.be/A1WrZVJUWhY
Про GetRecipeValues примерно с 30:00 начинается.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Спасибо подробно и понятно. И отдельное спасибо за оперативный ответ
Кстати наблюдение которое удалось выяснить - через метод RecipeManCommands.GetRecipeValues удается прочитать WSTRING строку из рецепта не более 65 символов длинной. Если строка длинней то программа вываливается в исключение.
Видимо внутренние переменные метода объявлены как STRING(260).
И для преобразования длинных строк в функции RECIPE_STRING_TO_WSTRING из примера по видео пришлось явно задать длину входной и выходной переменной иначе они ограничивались 80 символами (это максимум 20 символов для преобразования в WSTRING)
Поисследую этого на досуге.Кстати наблюдение которое удалось выяснить - через метод RecipeManCommands.GetRecipeValues удается прочитать WSTRING строку из рецепта не более 65 символов длинной. Если строка длинней то программа вываливается в исключение.
Upd. - проверил в V3.5 SP17 Patch 3. В ней с помощью метода RecipeManCommands.GetRecipeValues в принципе не получается считать строку (STRING) длиннее 80 символов.
Да, вы поступили совершенно правильно.И для преобразования длинных строк в функции RECIPE_STRING_TO_WSTRING из примера по видео пришлось явно задать длину входной и выходной переменной иначе они ограничивались 80 символами (это максимум 20 символов для преобразования в WSTRING)
Последний раз редактировалось Евгений Кислов; 07.03.2023 в 06:59.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
> не получается считать строку (STRING) длиннее 80 символов
Ну так по умолчанию в CS строка без явного указания размера интерпретируется, как 80-символьная: If a size is not defined, then 80 characters are reserved by default
Там строка возвращается по указателю.
И есть поле iStringLength, которое задает пользователь (макс. длина строк в его буфере).
В принципе - в таких случаях обычно по указателю может вернуться строка с любым количеством символов - в т.ч. и более 80.
https://content.helpme-codesys.com/e...ipeValues.html
Показательный пример:
https://content.helpme-codesys.com/e.../StrFindA.html
У функции вход типа POINTER TO STRING(255), но реально она может вычислить размер строки длиной вплоть до 32767 символов - вы можете легко в этом убедиться.
Так что POINTER TO STRING не всегда означает, что под указатель можно подложить только STRING(80) и не более - иногда это совсем не так.
Последний раз редактировалось Евгений Кислов; 07.03.2023 в 15:21.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
А, ясно. Это я на сигнатуру не посмотрел -- думал, что строка по значению передаётся.