Тема / Topic: Проблема со сборкой STRING из аргументов программы
Hip67
Forum Member / Участник форума
Участник № / Member № 4427
отправлено / posted
Здравствуйте.
Проект переводит время из контроллера из формата BCD в строку, чтобы потом записать в MS SQL. FBD программой я разбиваю BCD числа на string аргументы: year_e, month_e, ... sec_e. Следующей программой на ST я складываю из этих аргументов строку следующим образом: datetime_end_CMNT:=day_e+'-'+month_e+'-'+year_e+' '+hour_e+':'+min_e+':'+sec_e;
В комментарии канала datetime_end ожидаю увидеть строку типа "6-10-15 12:11:59", но по факту получаю строку "6-10-15 12:11:11", т.е. значение sec_e в конце строки дублирует значение min_e. Путем экспериментов выявил, что проблема именно в значении sec_e.
Пробовал привязать аргумент программы FBD sec_e к входному значению HEX канала, а реальное значение этого канала привязать к аргументу sec_e в программе ST. В результате вижу, что значение канала HEX принимает правильное значение 59, но в datetime_end все равно получаю "6-10-15 12:11:11".
отправлено / posted
Введите промежуточную локальную переменную VAR_STRING с типом данных STRING. Модифицируйте ST-программу: VAR_STRING:=day_e+'-'+month_e+'-'+year_e+' '+hour_e+':'+min_e; datetime_end_CMNT:=VAR_STRING':'+sec_e;
Другой вариант. Полученные из FBD-программы данные передайте в соответствующие атрибуты канала класса TIME. Этот канал сам преобразует эти данные в переменную формата Date&Time. Привяжите эту переменную к аргументу типа Date&Time CALL.SQL и передавайте время в БД штатным образом.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Hip67
Forum Member / Участник форума
Участник № / Member № 4427
отправлено / posted
Попробовал вариант с промежуточной переменной - не работает. Результат тот же самый.
Hip67
Forum Member / Участник форума
Участник № / Member № 4427
отправлено / posted
Попробовал вариант с каналом TIME. Так даже проще, дату сервер принимает и записывает без проблем. Обработку строк удалю из готового проекта. Спасибо.
Сообщения / Posts 46 | Из / From: Russia
| IP / IP: IP адрес / IP address |
ProKa
Junior Member / Новичок
Участник № / Member № 6538
отправлено / posted
Здравствуйте, пытаюсь в подсказку к ГЭ вывести значение типа STRING, сгенерированное в программе (тип аргумента string, in/out). Привязку осуществляю напрямую к аргументу программы. В подсказку выводятся только 4 знака. Правильно ли я понимаю, что для передачи большего количеству знаков необходимо использовать канал CALL.string? Вопрос снят, спасибо.
Сообщения / Posts 15 | Из / From: Российская Федерация
| IP / IP: IP адрес / IP address |
отправлено / posted
Не обязательно. Можно передавать через текстовый атрибут какого-либо канала, например, через КОММЕНТАРИЙ.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |
ProKa
Junior Member / Новичок
Участник № / Member № 6538
отправлено / posted
Получилось. НО! в комментарий передается не больше 40 знаков? Можно увеличить размер сообщения хотя бы до 64?
Сообщения / Posts 15 | Из / From: Российская Федерация
| IP / IP: IP адрес / IP address |
отправлено / posted
Можно, если использовать в качество промежуточных аргументы канала CALL.STRING.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |