Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Siemens 300, kopiowanie wartosci z db do db

Pharaun_PLC 17 Jul 2015 07:57 2691 10
SterControl
  • #1
    Pharaun_PLC
    Level 8  
    Dzień Dobry

    Opis zadania: Mamy 30 db z informacjami + 1 db do pracy ciągłej
    informacje o db:
    -mają zmienne w różnych formatach
    -struktury wszystkich db są takie same
    -zmienne miedzy poszczegolnymi db roznia sie tylko wartosciami jakie przechowują

    Potrzebuje do pracy ciągłej(nie jednorazowo) moc w danym momencie wybierac (jedno z tych 30 db) i kopiowac z niego wartosci do db, na którym bede pracowac.
    Potrzebuje rozwiązac problem możliwie jak najelegantszym sposobem(tj. bez 30 moveblk i case'ow tylko jakąs krótka funkcja lub kodem)

    Próba rozwiązania:
    Wybieranie 1z30 db rozwiązałem poprzez zastosowanie zmiennej typu int do której wpisuje liczbe (bedąca nr db) a następnie stosując kod
    T #zmienna
    OPN DB [#zmienna]

    Problem:
    Jednakże teraz niewiem jak kopiowac wartosci przy takim wybieraniu db do drugiego db. Move blk i adresowanie absolutne przy tak stosowanym wybieraniu odpada, wiec jak zrobic to inaczej? Pomocy
  • SterControl
  • #2
    Markos80

    Automation specialist
    Poczytaj na temat ANY pointer. Jest to struktura, w której możesz poskładać dowolny adres, a później ten adres użyć jako parametr funkcji BLKMOV.

    We wbudowanej pomocy pod hasłem ANY, znajdziesz przykład FC10 (Using the Parameter Type ANY). Myślę, że dokładnie taki, którego potrzebujesz.
  • SterControl
  • #3
    Pharaun_PLC
    Level 8  
    Dziekuje za odpowiedz,
    Próbowalem juz uzywac tej drogi jednak mam problem z zadresowaniem tego pointera.
    Tworze zmienna do ktorej wrzucam nr db ktory aktualnie potrzebuje, a nastepnie proboje utworzyc adres. Jednak niewiem jak to zrobic poniewaz deklarujac wejscie do moveblk sypie mi errorem gdy wrzucam tą zmienną(zamiast db number)
  • Helpful post
    #4
    Markos80

    Automation specialist
    Zrobiłeś wg przykładu z pomocy?
    BLKMOV przyjmuje parametr typu ANY, a nie tylko numer bazy. Numer bazy podajesz jako jedno z pól struktury.
  • #5
    Pharaun_PLC
    Level 8  
    Nie dodałem ze uzywam oprogramowania Tia portal v12, tam tego przykladu nie znalazlem. Dziekuje za screen
  • #6
    andy1955
    Automation specialist
    Przeczytaj Temat
    oraz przyjrzyj się mojej funkcji "register".
    Ta funkcja wykorzystuje SFC BLCMOV , adresuje ANY pośrednio.
    Do funkcji stawia się Integer jako numer źródłowego i docelowego DB oraz ilość bajtów do kopiowania.
  • #7
    Pharaun_PLC
    Level 8  
    Dziękuje za odpowiedzi, przy uzyciu blockmov kopiuje jak należy.

    Ale teraz pytanie, jest możliwosc zrobienia tego zadania bez uzycia blcmov? Czy zamiana DB na zmienne w FC typu struct coś da w tym przypadku?
  • #8
    jamjampoland
    Level 14  
    Wszystko zależy jakiego typu procesora używasz. W 1200/1500 możesz kopiować struktury znajdujące się w tablicach na podstawie indeksu. dla s7-300 Użycie zmiennej ANY to chyba najbardziej "elegancki" sposób. Modyfikując tą zmienną masz nieograniczone możliwości przy zmianie obszaru zapisu/odczytu:

    Siemens 300, kopiowanie wartosci z db do db
  • #9
    pietkad
    Level 12  
    Panowie, a nie da się tego wykonać na rejestrach adresowych z wykorzystaniem pętli Loop?

    A, różne typy danych w db...
  • #10
    jamjampoland
    Level 14  
    Nawet jeżeli użyjesz pętle będziesz musiał przesuwać się w DB za pomocą wskaźnika żeby dotrzeć do elementu który chcesz. Załączam Ci mały manual na temat parametru ANY.
  • #11
    pietkad
    Level 12  
    Jasne, że za pomocą wskaźnika.. A jeszcze lepiej za pomocą pętli for w scl.

    Dodano po 9 [sekundy]:

    Jasne, że za pomocą wskaźnika.. A jeszcze lepiej za pomocą pętli for w scl.