Мне кажется, вариант RV9WFJ с функцией (или просто фрагментом кода, конвертирующим номер столбца в обращение к нужному полю структуры) - самый простой и понятный.
Код:
PROGRAM PLC_PRG
VAR
aprGas_Air_Table: ARRAY [0..255] OF point_real;
usiSelectedRow: USINT := 10; // номер выбранной строки
usiSelectedColumn: USINT(0..1); // номер выбранного столбца
rSelectedValue: REAL; // значение в выбранной ячейке
END_VAR
CASE usiSelectedColumn OF
0:
rSelectedValue := aprGas_Air_Table[usiSelectedRow].X;
1:
rSelectedValue := aprGas_Air_Table[usiSelectedRow].Y;
END_CASE
Если обязательно хочется использовать указатели - то можно. Но если структура изменится, то код придется переделывать (и учитывать выравнивание данных в структуре).
Код:
PROGRAM PLC_PRG
VAR
aprGas_Air_Table: ARRAY [0..255] OF point_real;
usiSelectedRow: USINT := 10; // номер выбранной строки
usiSelectedColumn: USINT(0..1); // номер выбранного столбца
rSelectedValue: REAL; // значение в выбранной ячейке
prSelectedValue: POINTER TO REAL;
END_VAR
prSelectedValue := ADR(aprGas_Air_Table[usiSelectedRow] );
rSelectedValue := prSelectedValue[usiSelectedColumn];
// индексный доступ к указателю
// см. здесь: https://help.codesys.com/webapp/_cds_datatype_pointer;product=codesys;version=3.5.13.0
Если наличие структуры не принципиально - то можно перейти к двухмерному массиву:
Код:
aprGas_Air_Table: ARRAY [0..255] OF ARRAY [0..1] OF REAL;
Соответственно, можно будет просто обращаться к его элементам с помощью usiSelectedRow и usiSelectedColumn в качестве индексов.