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

Jak skopiować czas do rejestru MW w S7-300 przy spełnieniu warunku?

Accent 30 Lip 2007 12:12 5850 17
  • #1 4128366
    Accent
    Poziom 14  
    Posty: 167
    Ocena: 39
    Witam grupowiczów
    Jak można przeniesc czas z S7-300 do jakiegos rejestru MW na przyklad. Potrzebuje napisac taki program ktory spawza pewna wartosc i jesli jest ona wieksza niz jakas inna to kopiuje ja np do mw0 a do mw2 kopiuje czas. ???
  • Pomocny post
    #2 4128422
    przemwach
    Poziom 15  
    Posty: 69
    Pomógł: 16
    Ocena: 16
    O jaki czas Ci chodzi z zegara RTC czy z któregoś z Liczników/Timerów?
    Użyjesz funkcji porównania, w wyniku porównania otrzymasz wartości TRUE, ta funkcja uruchomi funkcję mov, copy (coś w tym rodzaju dokładnie odpowiem Ci jutro gdy sprawdzę) i przeniesie daną komórkę do innej.
    Z tego co pamiętam w PLC Modicon Telemeqanique funkcja ta by wyglądała:
    wynik porównania => blok funkcjyjny a w nim np. %MW0=%MW1
    To cała funkcja przenoszenia jednej komórki do innej.
  • #3 4128432
    Accent
    Poziom 14  
    Posty: 167
    Ocena: 39
    chodzi o czas RTC czyli o aktualny czas jaki jest w module pocesora.. jak napisac program to ja wiem, chodzi tylko o to jak pobrac ten czas...moze siedzi w jakms rejestrze systemowym....ale ktorym ??? jeszcze jest cos takiego jak SFC1 (read_clk) ale nie wiem czy tym sie da i jak to zprametryzowac...
  • #4 4128482
    przemwach
    Poziom 15  
    Posty: 69
    Pomógł: 16
    Ocena: 16
    Czas systemowy winien być w jednym z rejestrów systemowych, który jeszcze nie wiem. Sprawdzę i odpiszę, lecz dopiero jutro.

    P.S.
    A lista bitów systemowych, S7-300 powinna być gdzieś w HELP-ie.
  • #5 4128485
    Accent
    Poziom 14  
    Posty: 167
    Ocena: 39
    szukam, szukam, szukam......
  • #6 4128887
    przemwach
    Poziom 15  
    Posty: 69
    Pomógł: 16
    Ocena: 16
    Coś takiego znalazłem, myślę że się przyda.
    Strona 2
    Pozycje TIME, DATA, TIME_OF_DAY.
    Załączniki:
    • s7-memory.pdf (82.21 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #7 4129430
    Accent
    Poziom 14  
    Posty: 167
    Ocena: 39
    hmm to ja znalazlem w helpie.....nie pisze tam jak pobrac te dane czyli jak zrobic jakiegos MOVA z nimi ;( czyli np w STL pisze sobie
    L xxxxx (tutaj to cos)
    T MW20
  • Pomocny post
    #8 4129596
    andy1955
    Specjalista Automatyk
    Posty: 700
    Pomógł: 136
    Ocena: 50
    w OB 1 tyka sobie zegar od LD 12 - data + czas razem 8 bajtów.
    Wystarczy w OB 1 napisać:
    L LD 14 //
    T MD 10 //Dzień,godzina,minuta,sekunda.

    Następnie zaprogramować daną funkcję np.:

    L 8 // stała do porównania
    L MW 2 // zmienna do porównania
    ==I //porównanie
    SPBN skok //jeżeli zmienna różna od 8 --> to skok
    T MW 0 // jeżeli zmienna jest równa 8 to transfer wartości do MW0
    L MD 10 //załadowanie czasu
    T MD 6 // transfer do MD 6
    skok: NOP 0


    Format czasu w OB 1
    Byte 0 = rok LD 12
    Byte 1 = miesiąc LD 13
    Byte 2 = dzień LD 14
    Byte 3 = godzina LD 15
    Byte 4 = minuta LD 16
    Byte 5 = sekunda LD 17
    Byte 6 = ms LD 18
    Byte 7 -ms LD19
  • #9 4129743
    Accent
    Poziom 14  
    Posty: 167
    Ocena: 39
    tylko jak przeliczyc to na jakis zrozumialy czas. w symulatorze jast np w tym md 10 w formacie time 9d8h9m22s197ms, a w formacie decimal 806962197, mimo iz time czas w plc/set time of day jest poprawny czyli 19:45

    edit: w mb13 co prawda jest jakas wartosc ktora sie zmienia co sekunde...ale odlicza od 0 do 90 i i wtedy mb 102 zwieksza sie o 1

    edit2: ok juz widze... :) wartosci sa w hexach i wszystko pasuje

    skat ty wiedziales o tych LD ???? takich rzeczy nie ma w helpie :) ???
  • #10 4131009
    andy1955
    Specjalista Automatyk
    Posty: 700
    Pomógł: 136
    Ocena: 50
    zamiast merkera do zapamiętania czasu użyłbym jakiegoś DB w formacie TIME lub DATE_AND_TIME. Do tego licznik którego wartość podnoszona byłaby o 1 i transferowana również do DB. Wykorzystując wartość licznika do obliczania adresu w Db można protokołować całą serię pomiarów.
  • #11 4132091
    Accent
    Poziom 14  
    Posty: 167
    Ocena: 39
    jasne ze to bedzie w DB :) to juz mam napisane z adresowaniem posrednim i zapisuje do kolejnych wordow w DB kolejne pomiary.....problem mialem tylko z pobraniem czasu zeby wiedziec kiedy robiony byl dany pomiar....ale bardziej by mi si epodobalo jak by to zapisane bylo w formacie INT a nie HEX, juz mam prad w firmie wiec zaraz nad tym pomysle :)

    Edit: zrobione :) dzieki za pomoc!!
  • Pomocny post
    #12 4132829
    andy1955
    Specjalista Automatyk
    Posty: 700
    Pomógł: 136
    Ocena: 50
    Cytat:
    ...ale bardziej by mi si epodobalo jak by to zapisane bylo w formacie INT a nie HEX,

    Procesor zapisuje nie w HEX ale w dual 01100011100111011 :D :D
    A tak na poważnie: to zależy w jakim formacie obserujesz zmienną (np.czasową) zobacz screen. Ja obserwuję czas zapamiętany w MD30 w formacie TIME i wszystko jest w porządku.
    Chcesz bezpośrednio -online - obserwować (odczytać) czas ,zrób to za pomocą tabeli zmiennych. Tam masz możliwość ustawienia stosownego formatu.
  • #13 4132864
    Accent
    Poziom 14  
    Posty: 167
    Ocena: 39
    spoko dzieki :) ten temat juz zalatwiony :) wystarczy przeliczyc dany word z czasu za pomoca btd (bcd to dinteger) i juz rejestr moze byc jako INT i wyswietla poprawnie dany word czyli np o 12:40 jest w nim 1240.

    np
    L LW 13
    BTD
    OPN DB 2
    T DBW 2
    L LW 15
    BTD
    T DBW 4

    zapisuje mi miesiac, dzien, godzine i minuty w dbb2,3,4,5

    ale jak juz mam przyjemnisc rozmawiac ze specjalista to mam pytanie troche z innej bajki..

    chce sobie do db zapisywac np 10 pomiarow
    wiec robie sobie taka tabele w DB jak w zalaczniku (array [0..9]).
    Hmm teraz zastanawiam sie jak wyjasnic to co mam na mysli :)
    ....jesli bym chcial cos zapisac np do 24 to musze tego arraya zmienic na [0..10] czy da sie zrobic jakos tak aby ten DB sie sam rozszerzyl.
    albo jak bym chcial np zapisac cos do dbw 26 to musi on byc zadeklarowany w db czy mozna zrobic tak zeby sie sam tam pojawil ten zapis.
    hmmm moze zrozusmiesz co mam na mysli :)
    Załączniki:
    • Jak skopiować czas do rejestru MW w S7-300 przy spełnieniu warunku? 1.JPG (58.88 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #14 4136348
    andy1955
    Specjalista Automatyk
    Posty: 700
    Pomógł: 136
    Ocena: 50
    chciałbyś dynamicznie rozszerzać DB np. poprzez pośrednie adresowanie ARRAY. Niestety ,prostego rozwiązania nie znam.
    Możliwe by było:
    DB skopiować do temp_DB ---- SFC20 BLMOV
    DB zmazać ---- SFC23 DEL_DB
    nowy (rozszerzony) DB wygenerować ---- SFC22 CREAT_DB
    skopiować z Temp DB do DB ---- SFC20 BLMOV
    Temp DB löschen ---- SFC23 DEL_DB
    Należy przy tym pamiętać aby DB był podczas tych operacji zamknięty.

    Tylko - czy warte to tyle pracy ? nie lepiej jest zdefiniować od razu maxymalną długość DB (zależną od CPU) ?
  • #15 4136408
    Accent
    Poziom 14  
    Posty: 167
    Ocena: 39
    ok , dziekuje CI za pomoc i pozdrawiam.

    ...a masz moze jakis opis SFC i SFB jak uzywac i co robia ??
  • #16 4138011
    andy1955
    Specjalista Automatyk
    Posty: 700
    Pomógł: 136
    Ocena: 50
    w helpie (F1) są te funkcje dość} dobrze opisane. Mam jeszcze Handbuch-rozszerzony opis wszystkich SFC i SFB po niemiecku. Na pewno istnieją wersje w innych językach
    Załączniki:
    • SFC_dBand1.pdf (2.93 MB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #17 9274270
    bigmaster
    Poziom 15  
    Posty: 583
    Pomógł: 4
    Ocena: 91
    witam ja mam pytanie w 2 stronę jak z M przenieść wartość do timera.
    Chodzi o zadawanie czasu z terminala.
  • #18 9276932
    315-2DP
    Poziom 17  
    Posty: 425
    Pomógł: 33
    Ocena: 38
    bigmaster napisał:
    witam ja mam pytanie w 2 stronę jak z M przenieść wartość do timera.
    Chodzi o zadawanie czasu z terminala.


    Jaki maksymalny i minimalny czas będzie nastawiany? W STL to 4 linijki ;-)

    L MW0 - stąd jest pobierana zawartość czasu np. 10 w formacie INT
    ITB
    L W#16#2000 - dla podstawy 1 s jeśli dobrze pamiętam (proszę mnie poprawić jakby co bo piszę z pamięci, a nie mam na tym kompie STEP7, żeby do helpa zajrzeć)
    OW
    T MW2 - do tej komórki kopiujemy wartość w formacie S5TIME i mamy S5T#10S

    MW2 możemy wrzucać już do timera. Przejrzyj w helpie STEP7 opis formatu S5Time.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy sposobu kopiowania aktualnego czasu z zegara RTC procesora Siemens S7-300 do rejestru MW w programie PLC, pod warunkiem spełnienia określonego kryterium porównania wartości. Użytkownicy wskazują, że czas systemowy można odczytać z rejestrów systemowych LD (np. LD 12 do LD 19), gdzie przechowywane są poszczególne elementy daty i czasu (rok, miesiąc, dzień, godzina, minuta, sekunda, milisekundy). Przykładowy kod w STL pokazuje ładowanie i transfer danych z LD do MD oraz porównanie wartości w MW z wykorzystaniem instrukcji porównania i skoku warunkowego. Wskazano również funkcję SFC1 (READ_CLK) do odczytu zegara, choć bez szczegółowej parametryzacji. Poruszono kwestie formatów danych – czas jest zapisywany w formacie dualnym (binarnym), a do konwersji na format czytelny dla użytkownika proponowano użycie funkcji BTD (BCD to Integer). Dyskutowano także o zapisie pomiarów wraz z czasem do bloków danych (DB) z adresowaniem pośrednim oraz o ograniczeniach dynamicznego rozszerzania DB, które wymagałoby użycia funkcji systemowych SFC20, SFC22, SFC23. Wskazano, że w STEP7 dostępna jest dokumentacja funkcji SFC i SFB. Dodatkowo pojawiła się krótka wzmianka o zadawaniu czasu do timera z terminala, gdzie czas w formacie S5TIME można zapisać do MW i wykorzystać w timerze.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA