logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Funkcja FC i parametr BLOCK_DB w S7-1500

robert_mal 07 Cze 2017 07:33 1446 6
  • #1 16516606
    robert_mal
    Poziom 10  
    Posty: 87
    Ocena: 1
    Witam . Posiadam program na sterownik s7-300 i przerabiam go na 1500. Funkcje w 300 posiadają parametry wejściowe BLOCK_DB. Funkcja wywoływana jest np 7 razy każda z innym blokiem danych. W jaki sposób zrobić to na sterowniku 1500 . Wiem że parametr funkcji BLOCK_DB dostępny jest tylko w 300 ale jak inaczej zrobić to w 1500. Wiem że jest wskaźnik Variant ale jakby ktoś mógł pokazać krótki przykład jak to zrobić. Dziękuję za pomoc
  • #2 16516651
    pawslaw
    Specjalista Automatyk
    Posty: 223
    Pomógł: 35
    Ocena: 11
    W deklaracji parametrów zmienna ma typ "DB_ANY".
    Przy wywołaniu musisz poprawić z samego nr DB na nazwę DB.
    Paweł
  • #3 16516770
    robert_mal
    Poziom 10  
    Posty: 87
    Ocena: 1
    Parametr wejściowy funkcji to jest - DB_Vision-zmienna BLOCK_DB-TYP -Rozumiem że tutaj dać DB_ANY

    A co w takim razie z kodem poniżej ?
    wywołanie tej funkcji to -_Vision_db_1 to jest blok danych
    drugie wywołanie to np _Vision_db_2


    Potem w kodzie funkcji mam napisane w scl

    #In.Prüf_LM := #DB_Vision.DX(114,3); co tu zmienić?
  • #4 16522176
    Markos80

    Specjalista Automatyk
    Posty: 1860
    Pomógł: 474
    Ocena: 214
    Czy te bazy podawane jako parametry mają taką samą strukturę?
    Możesz stworzyć UDT odpowiadające tej strukturze. Wtedy baza będzie tym UDT i można go podać jako parametr.
    Konto firmowe:
    PUMPA
    Widok 7, Łuczyce, 32-010 | Tel.: 502XXXXXX (Pokaż) | Strona WWW: www.pumpa.pl
  • #5 16522277
    robert_mal
    Poziom 10  
    Posty: 87
    Ocena: 1
    Bloki danych są takie same. Ja chce do jednej napisanej funkcji wykorzystywanej np 7 razy podawać różne wartości tzn z różnych bloków danych .Czyli na wejście funkcji podaje z jakiego bloków danych ma pracować funkcja. Funkcja np zmienia mi wartości w blokach danych.

    Znalazłem coś takiego jak peek czy poke i działa to . na wejście funkcji podaję cyfrę odpowiadając danemu bloku w z którego wywołanie ma korzystać

    Czy jest jakieś lepsze rozwiązanie ? Co ze wskaźnikami ? W jaki sposób odczytać jaki ma numer blok danych ? gdybym np na wejście funkcji podawał symbolicznie blok danych np _Vision_db[201] i funkcja by odczytywała jaki to numer db ale jak to zrobić . Chodzi mi w tym problemie o najlepsze wzorce bo na s-300 to jest prosto jest typ danych BLOCK_DB jako parametr wejściowy funkcji i koniec tematu wie jaki jest aktualny numer db a w s-1200 czy 1500 tego nie ma czyli coś musi być lepszego do zastosowania ale nie wiem co ?
  • #6 16522319
    Markos80

    Specjalista Automatyk
    Posty: 1860
    Pomógł: 474
    Ocena: 214
    Możesz użyć Peek i Poke. Przepisać podany numer na jakąś bazę tymczasową, w funkcji zrobić na niej operacje i przepisać z powrotem.
    Nie pisałem o tym, bo wg mnie zrobienie UDT i podanie go na wejście InOut funkcji będzie bardziej przejrzyste i na symbolach.
    Konto firmowe:
    PUMPA
    Widok 7, Łuczyce, 32-010 | Tel.: 502XXXXXX (Pokaż) | Strona WWW: www.pumpa.pl
  • #7 16522366
    robert_mal
    Poziom 10  
    Posty: 87
    Ocena: 1
    Czyli krótko mówiąc Twozre jakieś tam db na bazie struktury z typem danych UDT i we funkcji w parametrze inout tworze zmienna z moim własny typem danych ? Co z pamięcią ? nie zwiększa się zbytnio ?

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik przerabia program z kontrolera S7-300 na S7-1500 i napotyka problem z parametrem BLOCK_DB, który nie jest dostępny w nowym modelu. W odpowiedziach zasugerowano użycie typu "DB_ANY" w deklaracji parametrów oraz stworzenie UDT (User Defined Type) odpowiadającego strukturze bloków danych. Użytkownik może wykorzystać funkcje Peek i Poke do operacji na danych, a także przekazywać bloki danych jako parametry InOut. Istnieje również możliwość symbolicznego odczytu numeru bloku danych, co może uprościć kod. Wskazano, że użycie UDT może być bardziej przejrzyste, a obawy o zwiększenie pamięci są uzasadnione, ale nie powinny być przesadzone.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA