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

Tablice zmiennych/struktury danych

AttA 27 Lip 2016 15:24 1524 3
  • #1 27 Lip 2016 15:24
    AttA
    Poziom 8  

    Witam. Pojawil sie kolejny problem, ktorego nie moge pojac. Co prawda udalo mi sie zrobic jakies proste programy w LAD, ale dalej nie rozumiem calej logiki "tablic". Problem jest nastepujacy:
    Jesli ktos jest w stanie prosze o wytlumaczenie calej etyki "tablic" w siemens PLC lub podeslanie jakichs materialow, gdzie jest to wytlumaczone lopatologicznie.

    Ogolnie rzecz biorac wiem co to jest i jak dziala, ale potrzebuje jakies praktyczne zastosowanie + praktycznie laczenie z elementami TIA portal.

    Nie wiem kompletnie jak zrobic tak by:
    1. Kazda wartosc (po cyklu) byla zapisywana do tablicy nr 1, i kazdej kolejnej az do 10 i potem mogloby leciec od poczatku (np. ilosc obrotow silnika w jednym cyklu/ilosc nacisniec czegos w jednym cyklu wpisuje sie do tablica[1], kolejny cykl do tablica[2] itd...
    2.Zapisywanie do tablicy aktualnej wartosci np co 5 min? Jest cos takiego mozliwe?
    3.Dodatkowo sa jeszcze te "listy/szyki" array lub osobne zmienne tablicowe o formacie np DInt, ktore kolejno tez mozna sobie ustawic w szyku jak to ma miejsce w "array"...

    PROSZE O POMOC w ogarnieciu tego zagadnienia.

    Pozdrawiam.

    0 3
  • SterControl
  • Pomocny post
    #2 29 Lip 2016 21:50
    piotrd76
    Poziom 17  

    AttA napisał:
    Nie wiem kompletnie jak zrobic tak by:
    1. Kazda wartosc (po cyklu) byla zapisywana do tablicy nr 1, i kazdej kolejnej az do 10 i potem mogloby leciec od poczatku (np. ilosc obrotow silnika w jednym cyklu/ilosc nacisniec czegos w jednym cyklu wpisuje sie do tablica[1], kolejny cykl do tablica[2] itd...

    Tu masz przykład jak coś takiego zrobić, dałem całe źródło bloku w SCL-u żeby było łatwiej zrozumieć:
    Code:
    FUNCTION_BLOCK "Tablica"
    
    { S7_Optimized_Access := 'TRUE' }
    VERSION : 0.1
       VAR_INPUT
          Motor_speed : Word;
       END_VAR

       VAR
          index_tablicy : Byte;
          Tablica : Array[1..10] of Word;
       END_VAR


    BEGIN
       IF #index_tablicy>10 OR #index_tablicy<1 THEN //sprawdzenie czy indeks jest  dozwolonym zakresie
           #index_tablicy:=1; //jesli nie, ustawiamy na 1 - pierwszy zapis lub kolejny cykl zapisow
       END_IF;
       #Tablica[#index_tablicy] := #Motor_speed; //wpisanie wartosci Motor_Speed w pozycje tablicy wskazana przez indeks
       #index_tablicy := #index_tablicy + 1; //zwiekszenie indeksu o 1 - nastepny zapis bedzie na kolejnej pozycji tablicy
       
    END_FUNCTION_BLOCK

    "Program" zapisuje wartość zmiennej MotorSpeed do kolejnych pozycji tablicy, gdy zapełni wszystkie zaczyna od nowa.
    Warunek IF sprawdza czy nie piszemy poza zakres tablicy. Kolejna linia to właśnie zapis zmiennej do pozycji tablicy.
    Cytat:
    2.Zapisywanie do tablicy aktualnej wartosci np co 5 min? Jest cos takiego mozliwe?

    Tak, wywołujesz powyższy blok co np. 5 min. Wywołanie możesz zrobić odliczając czas timerem, wykorzystując przerwanie albo systemowe sygnały zegarowe - jak w danym przypadku będzie najwygodniej.

    0
  • SterControl
  • #3 03 Sie 2016 13:33
    AttA
    Poziom 8  

    Dziekuje za odpowiedz. Podziekowania jak najbardziej sie naleza. Bynajmniej sam rozgryzlem w koncu zasade dzialania FieldWrite. Wszystko sie wyjasnilo jak zrozumialem jak dziala parametr indeks (ktory Ty i tak opisales, wiec gdybym nie wpadl na to wczesniej, czytajac Twoj post pewnie by mnie olsnilo) :).

    Temat mozna zamknac. Dziekuje jeszcze raz ;).

    0
  • #4 05 Sie 2016 23:44
    Pittt
    Poziom 30  

    Do tablic np w 1200 są gotowe instrukcje FieldWrite i FieldRead. podajesz tylko 3 parametry:
    pierwszy element tablicy docelowej, daną jaką chcesz umieścić w tablicy i pozycję na jakiej chcesz ją umieścić. Czyli wyliczasz sobie index jak uważasz i podstawiasz zmienną do wpisania.

    0