Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

STEP7 STL - Porównywanie danych z DB

Zdzisiek133 11 Jul 2014 10:20 2814 4
SterControl
  • #1
    Zdzisiek133
    Level 2  
    Witam,
    zmagam się od jakiegoś czasu z porównaniem dwóch DB składających się z tablic typu Char. Chcę stworzyć funkcję, która w zależności od wprowadzonej zmiennej zacznie porównywanie 8 kolejnych wierszy w DB. Cały mój problem polega na sparametryzowaniu tego wiersza od którego ma zacząć. Znalazłem funkcję odwołującą się przez adresowanie do wiersza: DBB[AR1, P#0.0], w kolejnych krokach zmieniałbym tylko pointer P#0.0 - 8.0. Poniżej zamieszczam kod:
    Quote:
    OPN DB 401
    OPN DI 400

    L #wej
    LAR1

    L DBB[AR1, P#0.0]
    L DIB[AR1, P#0.0]
    ==I
    = M 6.0

    L DBB[AR1, P#1.0]
    L DIB[AR1, P#1.0]
    ==I
    = M6.1

    L DBB[AR1, P#2.0]
    L DIB[AR1, P#2.0]
    ==I
    = M6.2

    Problem polega na tym , że sterownik cały czas przechodzi w stop z errorem. Wprowadzoną zmienną próbuję w każdej postaci: INT,WORD,DWORD. Byłbym wdzięczny za każdą pomoc, ponieważ informacje na ten temat są ograniczone.. Dziękuję
  • SterControl
  • #2
    Markos80

    Automation specialist
    Nie możesz załadować żadnego z podanych przez Ciebie typów bezpośrednio do wskaźnika. Zrób tak (#wej jako INT):
    Code:
          L     P#0.0
    
          L     #wej
          SLD   3
          +D   
          LAR1 

    Zrobiłbym też pętle z parametrem ilości kolejnych bajtów do sprawdzenia. Zwiększanie rejestru AR1 o jeden bajt możesz zrobić tak:
    Code:
          +AR1 P#1.0 
    

    Zdzisiek133 wrote:
    informacje na ten temat są ograniczone
    Raczej sporo jest na ten temat. Włącznie z wbudowaną pomocą. Szukaj indirect addressing.
  • SterControl
  • #3
    pawslaw
    Automation specialist
    Witam,
    Może spróbować prościej:
    Code:

    OPN DB 401
    OPN DI 400

    //#wej zmienna typu DWORD


    L DBB[#wej]
    L DIB[#wej]
    ==I
    = M 6.0

    L #wej
    L L#1
    +D
    T #zmienna_tymczasowa //DWORD

    L DBB[#zmienna_tymczasowa]
    L DIB[#zmienna_tymczasowa]
    ==I
    = M6.1

    L #wej
    L L#2
    +D
    T #zmienna_tymczasowa //DWORD

    L DBB[#zmienna_tymczasowa]
    L DIB[#zmienna_tymczasowa]
    ==I
    = M6.2

    Pozdrawiam
    Paweł
  • #4
    Markos80

    Automation specialist
    Sprawdzałeś to w PLC? Wg mnie pójdzie w stop tak samo jak program z wiadomości #1.
    W nawiasie kwadratowym trzeba podać wskaźnik. Żeby z liczby zrobić wskaźnik trzeba ją przesunąć SLD o 3.
  • #5
    pawslaw
    Automation specialist
    Witam,
    Masz rację, dawno nie zaglądałem do Indirectów, wystarczy dodawać wartości o wielokrotności 8 od 0. Jednak bezpieczniej będzie pozostać na Pointerach.

    Pozdr
    Paweł