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

Jak pobrać bit ze zmiennej poprzez pointer? Problem ze sterownikiem S7315.

magnez 10 Jan 2020 12:51 402 7
SterControl
  • #1
    magnez
    Level 10  
    Witam.
    Piszę, bo mam problem z adresacją (jak w temacie).
    Potrzebuję pobrać datę z PLC i rozłożyć ją na rok, miesiąc, dzień, itd.
    Używam do tego SFC1 i tu wszystko wydaje się być w porządku.
    Natomiast problem zaczyna się gdy chcę pobrać bit ze zmiennej poprzez pointer.
    Sterownik po prosu przechodzi mi w STOP.

    Poniżej podaję kilka linijek kodu:

    CALL "READ_CLK"
    RET_VAL#ret
    CDT:=#Czas

    LAR1 P##Czas

    L B[AR1,P#0.0]

    Ta ostatnia linia zawiesza sterownik.
    Dalszych linii nie podawałem, aby nie zaciemniać kodu.
    Przykład wziąłem z netu jakich jest wiele i ludzie piszą, że to działa.
    Nawet na stronie Siemensa.
    Natomiast u mnie nie.
    Nie wiem w czym jest problem.
    Czy jakiś błąd sterownika?
    Dodam, że próbowałem tego bezpośrednio w OB1 jak i innych FC.
    Sterownik to s7315.

    Ma ktoś jakiś pomysł?
  • SterControl
  • #2
    Markos80

    Automation specialist
    Początek wygląda poprawnie. Pokaż resztę kodu, a przede wszystkim informację z bufora diagnostycznego o tym co spowodowało przejście w stop.
    Zamiast adresowania możesz spróbować bezpośredniego dostępu do obszaru Temp poprzez L (jeśli zmienna Czas w zakresie Temp ma adres początkowy 0, to LB0 będzie pierwszym bajtem) lub w SCL'u poprzez rzutowanie AT (another type) na strukturę.
  • SterControl
  • #3
    magnez
    Level 10  
    Napiszę cały kod.

    CALL "READ_CLK"
    RET_VAL#ret
    CDT:=#Czas

    LAR1 P##Czas

    L B[AR1,P#0.0]
    BTI
    T #ROK

    L B[AR1,P#1.0]
    BTI
    T #MIESIAC

    L B[AR1,P#2.0]
    BTI
    T #DZIEN

    L B[AR1,P#3.0]
    BTI
    T #GODZ
    L B[AR1,P#4.0]
    BTI
    T #MIN

    L B[AR1,P#5.0]
    BTI
    T #SEK

    To wszystko.
    Nic innego w sterowniku nie ma.
    Jest to nowo kupiony sterownik przez firmę ale nie jestem pewny czy nie był używany.

    Teraz nie mogę pokazać bufora diagn, bo PLC mam w pracy.
  • #4
    magnez
    Level 10  
    Bufor diagnostyczny CPU wygląda jak poniżej:

    Jak pobrać bit ze zmiennej poprzez pointer? Problem ze sterownikiem S7315.

    Tutaj jest kod powodujący pojawienie się SF w sterowniku.

    Jak pobrać bit ze zmiennej poprzez pointer? Problem ze sterownikiem S7315.

    Dodam iż wartość każdego pobranego bitu z #Date wynosiła 10.

    Poniżej przesyłam dwa kody z adresacją bezpośrednią. Obydwa działają.
    Dodam iż celowo zostawiłem dwie dodatkowe linijki aby sprawdzić czy one nie powodują błędów.

    Jak pobrać bit ze zmiennej poprzez pointer? Problem ze sterownikiem S7315.

    Jak pobrać bit ze zmiennej poprzez pointer? Problem ze sterownikiem S7315.

    Może ktoś wpadnie na to gdzie może być problem.
    Jest to dla mnie o tyle istotne, że muszę dokładnie sprawdzić CPU nim go wstawię na półkę i będę trzymał jako zamiennik w razie awarii. Bo gdy ta nastąpi to bardzo decydującym czynnikiem będzie czas, którego nie będę miał.
  • #5
    Markos80

    Automation specialist
    Jakie masz CPU i wersję firmware oraz Step'a? (sterownik chyba jakiś stary)
    Wygląda, jakby nie potrafił załadować obszaru 86, czyli tymczasowych zmiennych lokalnych, ale wskaźnik jest prawidłowy.
    Nie mam akurat 300 pod ręką, ale PLCSim wygląda tak:
    Jak pobrać bit ze zmiennej poprzez pointer? Problem ze sterownikiem S7315.
  • #6
    magnez
    Level 10  
    Witam ponownie.
    Istotnie CPU jest leciwe 6ES7-315-1AF02-0AB0
    Już nie jest produkowane.
    Ale nie było wyjścia, bo w firmie są 3 identyczne CPU.
    Step7 jest w wersji 5.3 + SP3
    Nie wiem jaka jest wersja Firmwareu, nie wyświetla mi się ona w trybie Online w danych związanych ze sterownikiem.
  • #7
    Markos80

    Automation specialist
    Rozumiem, że nie chcesz kupować nowszego, więc zostaw program z bezpośrednim odczytem obszaru L.
    Według mnie kod ze wskaźnikiem jest poprawny, a błąd w wykonaniu jest spowodowany przez CPU. Może aktualizacja firmware by pomogła, ale z tego co widzę to wersja nie jest jeszcze nawet numerowana, więc dość stara.
    Ewentualnie zadaj pytanie na forum Siemens.
  • #8
    magnez
    Level 10  
    Dziękuję za poświęcony czas i uwagę.
    Przychylę się do twoich wskazówek i nie będę dalej drążył tematu. Mam tylko nadzieję, że to nie wpłynie na poprawną pracę CPU. Z tego co widzę to w programie, który mam w pracy nie ma wykorzystywanej takiej adresacji.
    Temat można zamknąć.