Здравствуйте.
Правильнее было бы проверять код ответа, а затем, в зависимости от кода, работать с результатом. Измените код скрипта "GetReturn" на такой:
begin
if Response.Code <> 200 then
begin
AddMessage(Now, mkWarning,
'Code = ' + IntToStr(Response.Code) + ', ' +
'Tag = ' + IntToStr(Response.Tag) + ', ' +
'Error = ' + Response.Text,FALSE, FALSE);
Exit;
end;
case Response.Tag of
77:
begin
AddMessage(Now, mkMessage, 'Tag = 77, Text = ' + Response.Text, FALSE, FALSE);
Table5.GetCell(1, 0).Text := Response['SystemPoll']['PowerVoltage'].AsStr + ' v';
Table5.GetCell(1, 1).Text := Response['SystemPoll']['Temperature'].AsStr + ' °С';
end;
78:
begin
AddMessage(Now, mkMessage, 'Tag = 78, Text = ' + Response.Text, FALSE, FALSE);
Table5.GetCell(1, 2).Text := Response['ControlPoll']['Signal']['dBm'].AsStr + ' dBm';
Table5.GetCell(1, 3).Text := Response['ControlPoll']['Signal']['Percent'].AsStr + ' %';
Table5.GetCell(1, 4).Text := '-'+Response['ControlPoll']['Balance'].AsStr + ' р.';
end;
else
AddMessage(Now, mkWarning, 'Unknown tag! Tag = ' + IntToStr(Response.Tag), FALSE, FALSE);
end;
Text4.Text := DateTimeToStr(now);
end.
Сохраните и перезапустите проект. После этого что-то изменилось, или данные разных запросов всё равно путаются? Если путаются, то вышлите скрин.
еще 5 вернулись с ошибкой Time Out.
Ошибка "Time Out" возникает если сервер скады не получил ответ от HTTP-сервера в течение 5 секунд. Это время можно изменить через SetTimeouts (https://simple-scada.com/help/script/tmhttp-settimeouts.html), например:
aHTTP.SetTimeouts(8000, 10000); // 8 сек. на подключение, 10 сек. на чтение
Это максимальная ширина окна "подсказки", весь текст описания не вмещается.
Да, возможно в будущем добавим ширину. Если написать "AddMessage" и открыть скобку, то полный список параметров и их типов отобразится в нижнем правом углу редактора. Аналогично его можно отобразить установив курсор после открывающейся скобки и нажать "Ctrl + Shift + Пробел". Также описание процедуры есть в руководстве (https://simple-scada.com/help/script/addmessage.html).
Теперь всё ясно. В данном случае единственным надежным решением является изменение процедуры "GetDataCCU" следующим образом:
procedure GetDataCCU;
var
aHTTP: TM_HTTP;
aQuery: string;
basic: string;
begin
basic:=Base64Encode('admin@000000000000000:password'); //SKV_18
aHTTP:= RequestHTTP; // создаем экземпляр запроса
aHTTP.SetSSL; // включить SSL
aHTTP.setheader('Content-Type','application/json');
aHTTP.SetHeader('Authorization', 'Basic '+basic);
aquery:='https://192.168.0.201:8443/data.cgx?cmd={"DataType":"SystemPoll"}';
aHTTP.Get(aQuery, 77); // вызываем GET с запросом aQuery и отмечаем его тегом = 77
aHTTP:= RequestHTTP; // создаем экземпляр запроса
aHTTP.SetSSL; // включить SSL
aHTTP.setheader('Content-Type','application/json');
aHTTP.SetHeader('Authorization', 'Basic '+basic);
aquery:='https://192.168.0.201:8443/data.cgx?cmd={"DataType":"ControlPoll"}';
aHTTP.Get(aQuery, 78); // вызываем GET с запросом aQuery и отмечаем его тегом = 78
end;
Такой вариант должен работать правильно. Попробуем что-нибудь придумать, чтобы и начальный вариант не допускал путаницы.