I have 72 bytes I’m routing from a profinet device to the AXL2152. I’m wondering if there is a cleaner way to do this than the following:
These bytes represent 3 sets of 6 DINTs (3 * 6 * 4=72 bytes). I want to be able to write some loop like this:
// Arrays to hold input byte mappings
VAR CONSTANT
START_INDEX_REAL_DATA1 : INT := 4;
START_INDEX_REAL_DATA2 : INT := 28;
START_INDEX_REAL_DATA3 : INT := 52;
BYTES_PER_REAL : INT := 4;
NUM_REAL_DATA_POINTS : INT := 6;
END_VAR
VAR
kuka_input_bytes : ARRAY[4..75] OF BYTE; // assuming these are populated elsewhere
some_real_data1 : ARRAY[1..NUM_REAL_DATA_POINTS] OF REAL;
some_real_data2 : ARRAY[1..NUM_REAL_DATA_POINTS] OF REAL;
some_real_data3 : ARRAY[1..NUM_REAL_DATA_POINTS] OF REAL;
END_VAR
// Helper function to map the input bytes to REAL variables
FOR i := 1 TO NUM_REAL_DATA_POINTS DO
some_real_data1[i] := bytes_to_real(kuka_input_bytes[(i - 1) * BYTES_PER_REAL + START_INDEX_REAL_DATA1],
kuka_input_bytes[(i - 1) * BYTES_PER_REAL + START_INDEX_REAL_DATA1 + 1],
kuka_input_bytes[(i - 1) * BYTES_PER_REAL + START_INDEX_REAL_DATA1 + 2],
kuka_input_bytes[(i - 1) * BYTES_PER_REAL + START_INDEX_REAL_DATA1 + 3]);
some_real_data2[i] := bytes_to_real(kuka_input_bytes[(i - 1) * BYTES_PER_REAL + START_INDEX_REAL_DATA2],
kuka_input_bytes[(i - 1) * BYTES_PER_REAL + START_INDEX_REAL_DATA2 + 1],
kuka_input_bytes[(i - 1) * BYTES_PER_REAL + START_INDEX_REAL_DATA2 + 2],
kuka_input_bytes[(i - 1) * BYTES_PER_REAL + START_INDEX_REAL_DATA2 + 3]);
some_real_data3[i] := bytes_to_real(kuka_input_bytes[(i - 1) * BYTES_PER_REAL + START_INDEX_REAL_DATA3],
kuka_input_bytes[(i - 1) * BYTES_PER_REAL + START_INDEX_REAL_DATA3 + 1],
kuka_input_bytes[(i - 1) * BYTES_PER_REAL + START_INDEX_REAL_DATA3 + 2],
kuka_input_bytes[(i - 1) * BYTES_PER_REAL + START_INDEX_REAL_DATA3 + 3]);
END_FOR;
where bytes_to_real is some function I already have that OR's all the bytes.
This feels cleaner than what I currently do:
some_real_data1[1] := bytes_to_real(kuka_input_byte_4, kuka_input_byte_5, kuka_input_byte_6, kuka_input_byte_7);
some_real_data1[2] := bytes_to_real(kuka_input_byte_8, kuka_input_byte_9, kuka_input_byte_10, kuka_input_byte_11);
some_real_data1[3] := bytes_to_real(kuka_input_byte_12, kuka_input_byte_13, kuka_input_byte_14, kuka_input_byte_15);
some_real_data1[4] := bytes_to_real(kuka_input_byte_16, kuka_input_byte_17, kuka_input_byte_18, kuka_input_byte_19);
some_real_data1[5] := bytes_to_real(kuka_input_byte_20, kuka_input_byte_21, kuka_input_byte_22, kuka_input_byte_23);
some_real_data1[6] := bytes_to_real(kuka_input_byte_24, kuka_input_byte_25, kuka_input_byte_26, kuka_input_byte_27);
some_real_data2[1] := bytes_to_real(kuka_input_byte_28, kuka_input_byte_29, kuka_input_byte_30, kuka_input_byte_31);
some_real_data2[2] := bytes_to_real(kuka_input_byte_32, kuka_input_byte_33, kuka_input_byte_34, kuka_input_byte_35);
some_real_data2[3] := bytes_to_real(kuka_input_byte_36, kuka_input_byte_37, kuka_input_byte_38, kuka_input_byte_39);
some_real_data2[4] := bytes_to_real(kuka_input_byte_40, kuka_input_byte_41, kuka_input_byte_42, kuka_input_byte_43);
some_real_data2[5] := bytes_to_real(kuka_input_byte_44, kuka_input_byte_45, kuka_input_byte_46, kuka_input_byte_47);
some_real_data2[6] := bytes_to_real(kuka_input_byte_48, kuka_input_byte_49, kuka_input_byte_50, kuka_input_byte_51);
some_real_data3[1] := bytes_to_real(kuka_input_byte_52, kuka_input_byte_53, kuka_input_byte_54, kuka_input_byte_55);
some_real_data3[2] := bytes_to_real(kuka_input_byte_56, kuka_input_byte_57, kuka_input_byte_58, kuka_input_byte_59);
some_real_data3[3] := bytes_to_real(kuka_input_byte_60, kuka_input_byte_61, kuka_input_byte_62, kuka_input_byte_63);
some_real_data3[4] := bytes_to_real(kuka_input_byte_64, kuka_input_byte_65, kuka_input_byte_66, kuka_input_byte_67);
some_real_data3[5] := bytes_to_real(kuka_input_byte_68, kuka_input_byte_69, kuka_input_byte_70, kuka_input_byte_71);
some_real_data3[6] := bytes_to_real(kuka_input_byte_72, kuka_input_byte_73, kuka_input_byte_74, kuka_input_byte_75);
TLDR: How do I route 72 input bytes to a single array instead of declaring 72 discrete variables.

I dunno if your kuka device offers this as well.