This is topic Проблема со сборкой STRING из аргументов программы in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/001453.html

Posted by Hip67 (Участник № / Member № 4427) on :
 
Здравствуйте.

Проект переводит время из контроллера из формата 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 by AdAstra Technical Support (Участник № / Member № 4) on :
 
Введите промежуточную локальную переменную 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 и передавайте время в БД штатным образом.
 
Posted by Hip67 (Участник № / Member № 4427) on :
 
Попробовал вариант с промежуточной переменной - не работает. Результат тот же самый.

Над вторым вариантом попробую. Отпишусь.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Второй вариант лучше.

Но вот такая конструкция сработала.

PROGRAM
VAR_INPUT D : USINT; END_VAR
VAR_INPUT M : USINT; END_VAR
VAR_INPUT Y : USINT; END_VAR
VAR_INPUT H : USINT; END_VAR
VAR_INPUT Min : USINT; END_VAR
VAR_INPUT Sec : USINT; END_VAR
VAR_INOUT String_out : STRING; END_VAR
VAR VAR_string : STRING; END_VAR



VAR_string := D + '-'+ M + '-'+ Y + ' ';

VAR_string := VAR_string + H + ':' + Min + ':';

String_out := VAR_string + sec;

END_PROGRAM
 
Posted by Hip67 (Участник № / Member № 4427) on :
 
Попробовал вариант с каналом TIME. Так даже проще, дату сервер принимает и записывает без проблем. Обработку строк удалю из готового проекта.
Спасибо.
 
Posted by ProKa (Участник № / Member № 6538) on :
 
Здравствуйте, пытаюсь в подсказку к ГЭ вывести значение типа STRING, сгенерированное в программе (тип аргумента string, in/out). Привязку осуществляю напрямую к аргументу программы. В подсказку выводятся только 4 знака. Правильно ли я понимаю, что для передачи большего количеству знаков необходимо использовать канал CALL.string?
Вопрос снят, спасибо.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Не обязательно.
Можно передавать через текстовый атрибут какого-либо канала, например, через КОММЕНТАРИЙ.
 
Posted by ProKa (Участник № / Member № 6538) on :
 
Получилось. НО! в комментарий передается не больше 40 знаков? Можно увеличить размер сообщения хотя бы до 64?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Можно, если использовать в качество промежуточных аргументы канала CALL.STRING.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2