Пытаюсь из st-программы передать символьную строку в MySQL при помощи атрибута "Комментарий" числового канала.
В программе есть аргумент типа OUT, привязанный к 80 атрибуту числового канала. К этому же атрибуту привязан и аргумент канала Call.SQL. В программе присваиваю этому аргументу нужное значение, далее выполняется SQL-запрос, однако в БД передаётся пустая строка.
Замечу, что при принудительном задании 80 атрибута через панель МРВ строка корректно передаётся в БД. Что я делаю не так?
Posted by Booster (Участник № / Member № 6801) on :
Да, конечно выходной аргумент программы имеет тип String
Posted by Booster (Участник № / Member № 6801) on :
Сейчас проверил: при передаче в 80 атрибут текста через ГЭ "Текст" с экрана - всё работает, текст передаётся в БД. Почему задать 80 атрибут через ввод с экрана можно, а из программы - нельзя?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
В редакторе программ в режиме эмуляции Вы проверяли? Выходному аргументу программы присваивается ожидаемая строка?
Posted by Booster (Участник № / Member № 6801) on :
Создал отдельную программу, которая только присваивает текстовые значения 80 атрибутам разных каналов через выходные аргументы STRING. Результаты получились такие: пока количесвто выходных аргументов SRING не превышает 14, все значения корректно присваиваются этим аргументам. Как только выходных аргументов STRING становится больше 14, ни одному аргументу значение не присваивается. Попробуйте воспроизвести ситуацию.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Количество аргументов в программе ограничено: "Количество аргументов канала вызова программы ограничено; в случае 4-байтовых аргументов – 1024 (т.е. под все аргументы не может быть выделено памяти больше, чем 4k – см. Определение переменных и констант ). " (см."Выполнение программы в реальном времени"). В разделе "Определение переменных и констант" указано: "STRING (WCHAR*) – 256 символов в кодировке utf-8". Поэтому количество строковых аргументов в программе ограничено.
Posted by Booster (Участник № / Member № 6801) on :
Спасибо за пояснение. А как можно узнать суммарный объём памяти, который занимают аргументы программы? Кроме как сидеть вручную умножать.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Кроме аргументов типа STRING и LREAL все остальные аргументы программы занимают в памяти 4 байта. Т.о., при известном количестве аргументов оценить используемый объем памяти не составляет труда.