Elektroda.pl
Elektroda.pl
X

Search our partners

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

Archiwizacja danych w S7-300

marekele 11 Mar 2011 21:40 2436 12
SterControl
  • #1
    marekele
    Level 9  
    Witam
    Mam mały problem. Muszę wykonać program który to będzie mierzył czas przejścia produktu przez strumień czujnika oraz przesłanie tych danych do DB. Chodzi o zliczenie np. 100 kolejnych czasów i zapisanie ich w DB. Wiem że do zapisywania takich danych należy posłużyć się pointnerami ale nie mam doświadczenia w adresowaniu pośrednim. A tak przy okazji czy mógłby jakiś fachowiec prosto wytłumaczyć mi o co chodzi z tymi wskaźnikami. Z góry dziękuję za pomoc.
  • SterControl
  • #2
    315-2DP
    Level 17  
    Zrobiłem coś podobnego ostatnio. W sumie to chodziło raczej o zliczanie i rejestrację zaników napięcia w rozdzielni NN,ale da się to wykorzystać też w twoim przypadku. Dane te są później wyświetlane w SCADA. Bardzo fajnie mi to działa. Da się to zrobić, ale to raczej zadanie dla kogoś kto dość dobrze programuje w STL, bo w drabince to po prostu masakra.

    Zacznij od przejrzenia opisu instrukcji LAR1, LAR2, TAR1, TAR2, AR1+, AR2+.
    Przydatne też będą SFC0 albo 1 (odczyt czasu systemowego), SFC20 (kopiowanie danych).
  • #3
    andy1955
    Automation specialist
    Jest kilka typów programowania posredniego.
    Zacznij od najprostszego.
    U M1.0 //wyzwolenie zapisu za pomoca flanki
    FP M1.1
    = M1.2
    U M1.2
    SPBN zapi
    //tworzenie adresu
    L MD100 // liczba adresowa np.0
    SLD 3 //przesuniecie w lewo o 3 miejsca
    T MD200 // adres

    AUF DB1 //otworzenie DB1
    L "jakas zmienna" // zaladowannie zmiennej (pomiaru)
    T DBD [MD200] //zapamietanie pomiaru w DB1.DBD0

    L 4
    L MD100
    +D // nastepna liczba adresowa = 4 (8,12,16,20.......)
    zapi: NOP 0
  • SterControl
  • #4
    Klakier74
    Level 15  
    Wykorzystaj tablicę. A potem funkcję LIFO lub FIFO zleży na czy Ci zależy.
    3-4 networki i elegancko działa.

    Założyć tablicę a potem funkcje:

    FC84 - dodawanie do tablicy
    FC85 - FIFO
    FC87 - LIFO
  • #5
    marekele
    Level 9  
    Dzięki bardzo Panowie za pomoc :) Zabrałem się za to programowanie pośrednie i zaczyna mi coś tam działać :) Jak natknę się na kolejne trudności to napiszę :) Pozdrawiam
  • #6
    siudek2
    Level 16  
    Witam.
    Przyłącze się do tematu. Mam pytanie , czy jest możliwość zwiększania i zmniejszania ilości zapisywanych danych w bloku DB. Jak widać na poniższym przykładzie do bloku DB 11 zostanie wpisanych po kolei 5 DWORD-ów.
    Mam w tablicy (DB11) zadeklarowanych 200 DWORD-ów chciałbym zapisywać różną ich ilość, zależną ode mnie.
    Np. w panelu HMI wpisuję "zapisz mi 25 wyników do DB11" następnie zmieniam "zapisz mi 54 wyniki do DB11" czy jest to w ogóle możliwe.
    A I 0.0
    FP M 0.2
    JNB _002

    OPN DB 11
    L MD 24
    T DBB [DBD 20]
    L DBD 20
    L P#4.0
    +D
    T DBD 20

    _002: NOP 0

    Pozdrawiam.
  • #7
    jamjampoland
    Level 14  
    Przykład który podałeś zapisuje kolejny WORD po każdym impulsie pochodzącym wejścia I 0.0 - Czyli to wejście musi przyjść 5 razy aby zapisać 5 zmiennych w DB11. Nie rozumiem dokładnie twojego pytania. Chcesz ustawić limit zapisywanych danych na jakąś wartość? Bo teraz za każdym razem wartość zapisywana w DB pochodzi z tego samego źródła: MD 24. Jeżeli tak to wystarczy przed instrukcją JNB sprawdzić odpowiednio wartość wskaźnika i jeżeli wskazuje na 51 element w DB do nie wykonywać już instrukcji przypisania.
  • #8
    siudek2
    Level 16  
    Mam zadeklarowaną tablicę zmiennych np 200 DWORD. Chcę mieć wybór ilości zapisywanych "komórek".
    Tak w moim przykładzie zapisze się 5 kolejnych komórek pamięci bloku DB11. Po zapisaniu tych pięciu mam komendę która pozwala mi nadpisać już zapisane dane od początku

    A I 0.6
    JNB _00d
    L P#0.0
    T DB11.DBD 20
    _00d: NOP 0

    Teraz chcę rozszerzyć zakres zapisywania DWORD-ów do np 20 z bloku DB11.
  • #9
    jamjampoland
    Level 14  
    Nie wiem na jakim poziomie w Step7 jesteś.

    Quote:
    Po zapisaniu tych pięciu mam komendę która pozwala mi nadpisać już zapisane dane od początku


    A ta komenda nie robi przypadkiem wyzerowania wskaźnika?

    Quote:
    Chcę mieć wybór ilości zapisywanych "komórek"

    No to wywołuj komendę która pozwala Ci nadpisać już zapisane dane od początku dopiero jak wskaźnik będzie na elemencie, który jest o jeden większy niż parametr który mówi ile danym ma zostać zapisane.
  • #10
    siudek2
    Level 16  
    Dobra. Rozwiązanie miałem pod ręką.(Qwa) zmęczenie materiału. :shii:
  • #11
    siudek2
    Level 16  
    Witam.
    Mam problem, na podstawie tego kodu
    A I 0.0
    FP M 0.2
    JNB _002

    OPN DB 11
    L MD 24
    T DBB [DBD 20]
    L DBD 20
    L P#4.0
    +D
    T DBD 20

    _002: NOP 0
    wiadomo po każdorazowym zboczu rosnącym z I0.0 zapiszę dane do bloku DB11 po kolei aż do zapełnienia. Teraz tak: załóżmy że zapisaliśmy jakąś wartość w DB11.DBD12 i okazuje się że wartość ta jest błędna, pod przycisk np. na panelu podpinam sygnał RESET
    A (sygnał Reset)
    L P#0.0
    T DB11.DBD12
    komórka db11.dbd12 zostaje "wyzerowana" ale kolejne naciśnięcie I0.0 spowoduje że kolejna wartość zostanie zapisana do następnej komórki pamięci bloku DB11 czyli DB11.DBD16 i teraz pytanie jak zainicjować zapis do komórki, którą wcześniej wyzerowaliśmy, czyli jakby cofnąć się o jedną komórkę (wyzerowaną) i dalej zapisywać .
  • #12
    lelum0
    Level 16  
    dopisać do obsługi klawisza:
    L DBD20
    L P#4.0
    -D
    T DBD 20

    ?