This is topic Странности с типом STRING in forum Языки программирования в TRACE MODE 6 / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.


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

Posted by AUGUST (Участник № / Member № 2699) on :
 
Вот программка для примера:

PROGRAM
VAR_OUTPUT ARG_000 : INT; END_VAR
VAR VAR_000 : STRING; END_VAR

VAR_000 = "ABCD";
if (VAR_000 == "ABCD") then
ARG_000 = 100;
end_if;

END_PROGRAM

Почему программа не попадает внутрь блока IF?
 
Posted by AUGUST (Участник № / Member № 2699) on :
 
В догонку:

В таком виде работает (операцию == поменял на >=):
VAR_000 = "ABCD";
if (VAR_000 >= "ABCD") then
ARG_000 = 100;
end_if;

И в таком:
VAR_000 = "AB";
if (VAR_000 >= "ABCD") then
ARG_000 = 100;
end_if;

И даже в таком:
VAR_000 = "";
if (VAR_000 >= "ABCD") then
ARG_000 = 100;
end_if;
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
##
Операторы сравнения строковых переменных работают некорректно.
Решения по этому вопросу будут приняты в следующем релизе.
 
Posted by Grigorovskih (Участник № / Member № 1915) on :
 
Здравствуйте Господа!

При использовании массива со строковыми элементами обнаружились неполадки уже на стадии работы в отладчике!
Нам необходимо было использовать массив строковых переменных, но даже уже только при его задании программа не запускалась, при пошаговой отладке доходили до момента формирования такого массива, после чего отладчик перескакивал в начало не сформировав массив и не выполнив следующие строки кода выполняемые ниже.
Скопировали пример с одномерными массивами из хелпа и он показал такой же сбой.

Проверьте пожалуйста в чём дело!
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Ошибка происходит при задании начальных значений. Это будет исправляться.
Если просто описать массив с пустыми ячейками, то все работает корректно.
 
Posted by Grigorovskih (Участник № / Member № 1915) on :
 
Не только на стадии задания начальных значений!
Если "просто описать массив" а потом его заполнять, то опять же проявляются ошибки.
В релизе 6.06 это исправлено?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Ошибок при заполнении ошибок у нас не было в релизе 6.05.1. Пришлите, пожалуйста, примерчик, когда появляются ошибки при записи данных в пустой массив.
 
Posted by Grigorovskih (Участник № / Member № 1915) on :
 
Отправил, смотрите...
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Аналогичный проект с массивом из 5 строк работает. Из 6 уже нет. Будем разбираться.
 
Posted by Grigorovskih (Участник № / Member № 1915) on :
 
Хорошо!
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
VAR CH: array [9] of USINT:=1,1,0,1,1,1,0,1,0,1,0; end_var
if CH_err then
for i=0 to 8 do
if CH[i] then GVAR_000[i]='c'; else GVAR_000[i]='d'; end_if;
end_for;
ARG_001 = GVAR_000[0]+GVAR_000[1]+GVAR_000[2]+GVAR_000[3]+GVAR_000[4]+GVAR_000[5]+GVAR_000[6]+GVAR_000[7]+GVAR_001[8];
end_if;
if CH_err then
for i=0 to 8 do
if CH[i] then GVAR_001[i]='a'; else GVAR_001[i]='b'; end_if;
end_for;
ARG_001 = GVAR_001[0]+GVAR_001[1]+GVAR_001[2]+GVAR_001[3]+GVAR_001[4]+GVAR_001[5]+GVAR_001[6]+GVAR_001[7]+GVAR_001[8];
end_if;

Вот такая программка работает. Возможно дело было в преобразовании типов.
 
Posted by drooha (Участник № / Member № 3306) on :
 
PROGRAM
VAR_OUTPUT ARG_000 : INT; END_VAR
VAR VAR_000 : STRING; END_VAR

VAR_000 = "ABCD";
if (VAR_000 == "ABCD") then
ARG_000 = 100;
end_if;

END_PROGRAM
В релизе 6.06 так и не работает, когда же исправите?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Сравнение строк не работает и скорее всего не будет работать.
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2