This is topic О строках и не только in forum Языки программирования в TRACE MODE 6 / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.
Нарыл я тут сразу несколько непоняток связанных со строками:
1. Создаем FBD программу с двумя аргументами типа STRING, один из них (s1) типа IN, второй (s2) - OUT. Пытаемся копировать s1 в s2 блоком move. После запуска в профайлере видим, что канал получает признак недостоверности и, соответственно, висит и не пересчитывается.
Абсолютно аналогичные результаты получаются если вместо FBD блока move использовать самописную ST-функцию, в теле которой делать переприсваивание строк. Более того, в процессе ковыряния выяснено, что для того, чтобы подвесить канал, достаточно из FBD вызвать функцию с одним входным аргументом: FUNCTION_BLOCK ff VAR_INPUT si : STRING; END_VAR var s : STRING; end_var s = si; END_FUNCTION_BLOCK
2. В табличном редакторе аргументов невозможно корректно ввести строковую константу - без кавычек ввод не воспринимается, а если вводить с кавычками - то последние тоже попадают внутрь строки, что есть совсем нехорошо.
3. Предыдущий пункт касается также редактора SQL запросов, что приводит к неудобствам при проверке запросов.
4. Вот нужно мне в базу ложить дату/время. Естественно, SQL драйвер не желает, да и не имеет право желать получения даты в виде каких-то там секунд не поймешь с какой даты, а честно ждет строку, только вот кто ее ему даст? И приходится создавать лишний канал типа TIME для конвертации времени в строку, что не только не есть хорошо, но и может иметь неприятности, а именно:
а) в некой программе мы вычислили несколько параметров, в том числе и типа дата/время, которые нужно положить в базу, и активировали SQL канал посылкой в него номера запроса; б) каналом TIME преобразовали время в строку; в) каналом SQL положили все данные в базу.
Вроде все нормально, только вот где гарантия, что пересчет каналов будет идти именно в таком порядке, а не в порядке а) в) б) и в запрос попадет неактуальное значение timestamp'а?
5. (в дополнение к п.4) А как, собственно, можно ввести строковую константу типа DATE_AND_TIME в редактор аргументов SQL запроса?
Заранее благодарю за разъяснения/исправления/дополнения.
Дмитрий
Posted by AdAstrA Technical Support Ukraine (Участник № / Member № 2198) on :
1. FBD-блоки не работают со строчными типами данных. 2. Проверил в табличном редакторе аргументов программ – кавычки в строку не попадают.
4. Предусмотреть все возможные типы данных во всех существующих базах данных не представляется возможным. Механизм пересчета базы каналов описан в разделе справки Каналы и системные переменные \ Пересчет базы каналов. К тому же, можно достаточно легко написать свой алгоритм управления пересчетом каналов.
5. Значение аргумента типа DATE_AND_TIME задается в формате dt#yyyy-mm-dd-hh:mm:ss (год, месяц, день, час, минута, секунда).
Posted by Dmitry.niimm (Участник № / Member № 3380) on :
Спасибо за ответ, все понятно, за частичным исключением п.2: _двойные_ кавычки не попадают, а вот от одинарных открывающая попадает, а закрывающая - нет.
Но это касается редактора аргументов, а в редакторе SQL запросов кавычки не убираются совсем, и при тестировании запроса приходится кавычки из текста запроса убирать, а потом, для работы монитора, вставлять обратно.
В целом, проблемы небольшие и решаемые, но все же доработать не помешало бы.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Это происходит только в редакторе при отладке, в реальном времени все нормально. Поправим.
Posted by drooha (Участник № / Member № 3306) on :
Хотелось бы узнать есть ли в языке Техно ST какая нибудь функция для перевода числа в строку и наоборот??
Заранее благадарю.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Специальных функций преобразования таких данных друг в друга нет. Число конвертируется в свое строковое отображение. Строка конвертируется в число, если она представляет собой строковое отображение числа.