Изменить размер массива в ПЛК

Можно ли изменить размер массива в TwinCAT-PLC с помощью ADS, в данном случае pyads?

VAR CONSTANT
    min_a   : INT := 1;
    max_a   : INT := 234;
END_VAR
VAR
    array_1: ARRAY[min_a..max_a] OF INT;
END_VAR

А потом я хотел изменить значение констант с объявлениями, что работает, но никогда не меняет размер массива в plc.

Кто-нибудь может мне помочь?

Я впервые работаю с ПЛК и пишу код в структурированном тексте...


person Amy15Fee    schedule 28.01.2021    source источник
comment
Вы не можете изменить размер массива во время выполнения, так как он определяется во время компиляции. Поэтому вам всегда нужно резервировать память для наихудшего случая (размер массива). Однако вы можете передать массив в качестве параметра функциональному блоку или методу и заставить его работать с ним, не зная его размера, см. это объяснение: infosys.beckhoff.com/english.php?content=../content/1033/   -  person pboedker    schedule 29.01.2021


Ответы (1)


Вы можете выделить arrays определенного типа и размера с помощью метода __NEW(type, size), а затем освободить память с помощью метода __DELETE(pointer), как в приведенном ниже коде:

METHOD myCode
    VAR_INPUT
        myArray : POINTER TO INT;
    END_VAR

    myArray := __NEW(INT, 10); // Create array of type INT with size of 10 
    __DELETE(myArray); //Free the memory
    myArray := __NEW(INT, 20); // Allocate new memory now with the size of 20
    __DELETE(myArray); //Free the memory

END_METHOD
  • Будьте осторожны с этим, потому что вам нужно освободить память с помощью метода __DELETE(pointer)!
  • Обратите внимание, что вы не можете изменить размер массива, если вы объявляете их статически, как в своем ответе.
person Jakub Szlaur    schedule 05.02.2021