Добрый день!
В ходе экспериментов наткнулся на ситуацию.
1. Формируем запрос в БД и вешаем на кнопку универсальный скрипт.
2. Таблица заполняется данными.
3. Создан скрипт по изменению значения переменных (2 генератора, один на ОРС сервере, второй секундный скрипт), где повторяется шаг 21 для разных таблиц:
case TU4430M01_001_State_v.Value of
0 :
begin
if TU4430M01_001_StartLoad_v.Value = 1 then
begin
TU4430M01_001_State_v.Value := 1;
TU4430M01_001_StartLoad_v.Value := 0;
TU4430M01_0011RCS000_wProfileCmd_Set.Value := $0FFF;
end;
end;
//************************************* ЗАГРУЗКА ГЕОМЕТРИИ **********************************************
1 :
begin
if (TU4430M01_0011RCS000_wProfileCmd_Set.Value = $0FFF) AND (TU4430M01_0011RCS000_wProfileCmd_Get.Value = $0FFF) then
begin
TU4430M01_001_State_v.Value := 21;
TU4430M01_0011RCS000_wProfileCmd_Set.Value := 0;
end;
end;
21 :
begin
// --- проверка на совпадение количества строк в выбранной таблице, если выбрана другая таблица обнуление счетчика ---
if tblGeometryWays.RowCount <> RowCountGeoOld then
begin
TU4430M01_001_State_v.Value := 0;
TU4430M01_0011RCS000_wProfileCmd_Set.Value := $FFFF;
Exit;
end;
// ---
if TU4430M01_0011RCS000_wProfileCmd_Get.Value = (tblGeometryWays.RowCount - 1) then
begin
TU4430M01_0011RCS000_wProfileCmd_Set.Value := $1FFF;
TU4430M01_001_State_v.Value := 22;
end
else
begin
// присвоение значений из таблицы переменным Set
if TU4430M01_0011RCS000_wProfileCmd_Get.Value = TU4430M01_0011RCS000_wProfileCmd_Set.Value then
begin
1строка -> TU4430M01_0011RCS001_iProfile_Set.Value := 10*StrToFloat(UTF8ToString(tblGeometryWays.Columns(1).Cells(TU4430M01_0011RCS000_wProfileCmd_Set.Value+1).Text)); // скорость
TU4430M01_0011RCS002_iProfile_Set.Value := 10*StrToFloat(UTF8ToString(tblGeometryWays.Columns(2).Cells(TU4430M01_0011RCS000_wProfileCmd_Set.Value+1).Text)); // ускорение
TU4430M01_0011RCS003_iProfile_Set.Value := 10*StrToFloat(UTF8ToString(tblGeometryWays.Columns(4).Cells(TU4430M01_0011RCS000_wProfileCmd_Set.Value+1).Text)); //замедление
TU4430M01_0011RCS004_iProfile_Set.Value := 10*StrToFloat(UTF8ToString(tblGeometryWays.Columns(5).Cells(TU4430M01_0011RCS000_wProfileCmd_Set.Value+1).Text)); //рывок
if (TU4430M01_0011RCS001_iProfile_Get.Value = TU4430M01_0011RCS001_iProfile_Set.Value)
and (TU4430M01_0011RCS002_iProfile_Get.Value = TU4430M01_0011RCS002_iProfile_Set.Value)
and (TU4430M01_0011RCS003_iProfile_Get.Value = TU4430M01_0011RCS003_iProfile_Set.Value)
and (TU4430M01_0011RCS004_iProfile_Get.Value = TU4430M01_0011RCS004_iProfile_Set.Value) then
begin
TU4430M01_0011RCS000_wProfileCmd_Set.Value:= TU4430M01_0011RCS000_wProfileCmd_Set.Value + 1;
end;
end;
end;
end;
...
Первая строка вызывает достаточно часто на сервере ошибку следующего содержания:
"Ошибка в скрипте "LoadData" в строке 101. Access violation at address 0113A04A in module 'Server.exe'. Read of address 00000034"
.
Если перед ней и после нее поставить
AddMessage(Now, mkMessage, 'до' + TU4430M01_0011RCS001_iProfile_Set.Value, True, False);
и
AddMessage(Now, mkMessage, 'после' + TU4430M01_0011RCS001_iProfile_Set.Value, True, False);
то если на сервере подряд мы наблюдаем выше описанную ошибку 3 раза, то на клиенте мы видим сообщения
до 200
до 200
до 200
до 200
после 300
...
Создается такое впечатление, что мы не можем какое то время получить данные, что и вызывает эту ошибку.
Возможно то, что у нас 2 генератора меняются. Но скрипт по изменению для этого и предназначен.
В общем может дадите направление?