Мне кажется, вариант 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
Соответственно, можно будет просто обращаться к его элементам с помощью usiSelectedRow и usiSelectedColumn в качестве индексов.Код:aprGas_Air_Table: ARRAY [0..255] OF ARRAY [0..1] OF REAL;


Ответить с цитированием
