Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

CODESYS ST - tablica argumentem funkcji

Damian7546 16 Lut 2018 12:19 435 5
  • #1 16 Lut 2018 12:19
    Damian7546
    Poziom 21  

    Witam,

    W jaki sposób w CODESYS (w ST)do argumentu funkcji przekazać tablicę, a raczej jej adres pierwszego elementu.
    Tz chodzi mi tylko o to co mam zadeklarować w zmiennych wejściowych funkcji jeśli mam zamiar przekazywać jej tablicę

    Np mam tablicę:
    zm1 : ARRAY[0..13] OF BYTE;

    Więc na wejście funkcji będę podawał ADR(zm1) ...

    0 5
  • #2 16 Lut 2018 13:53
    kornik280
    Poziom 18  

    Jest chyba typ POINTER TO ARRAY[1..13] OF BYTE I taki typ musisz zadeklarować

    0
  • #3 17 Lut 2018 15:48
    Damian7546
    Poziom 21  

    To właśnie próbuje napisać funkcję która przyjmuj ilosc elemetow tablicy i tablice jak poniżej:
    LCDsend(SIZEOF(tab12), ADR(tab12) );

    Zmienne wejściowe funkcji to:
    VAR_INPUT
    len : BYTE;
    tab : POINTER TO ARRAY[0..len] OF BYTE;
    END_VAR

    I już na początku mam błąd:

    C0161: Border 'len' of array is no constant value

    0
  • #4 27 Lut 2018 20:52
    przemwach
    Poziom 12  

    Nie podałeś rozmiaru tablicy przy deklaracji wskaźnika, zadeklarowłeś zmienna "len" ale nie podałeś wielkości. Wielkość tablicy możesz wpisać jak przy deklaracji.

    0
  • #5 28 Lut 2018 09:32
    Damian7546
    Poziom 21  

    A wskaźnika tego to nie traktuję jako adres pierwszego elementu tablicy ?

    0
  • #6 28 Lut 2018 09:49
    przemwach
    Poziom 12  

    Tak wskaźnik wskazuje na pierwszy element tablicy, problem leży w deklaracji. Podajesz wskaźnik na tablicę, ale nie podajesz wielkości tablicy (jest tam zmienna z nie przypisaną wartością). Podczas kompilacji kompilator ma nie poprawną wartość wielkości tablicy (coś jak: [0..0]). Przypisz na sztywno wielkość tablicy i będzie dobrze lub przypisz wartość wielkości do zmiennej "len" przy jej deklaracji
    ("len :BYTE:= 13;").

    0