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

Odczytywanie bitów/bajtów z urządzeń po Profibusie

Schnapsik 23 Sie 2017 22:53 1596 12
  • #1 16659934
    Schnapsik
    Poziom 7  
    Posty: 31
    Witam
    Mam taki projekt jak na poniższym screenie z HWConfig.

    Odczytywanie bitów/bajtów z urządzeń po Profibusie

    Odczytywanie bitów/bajtów z urządzeń po Profibusie

    czyli wej/wyj Pilza są adresowane od 256 do 275 (20 bajtów)
    a z kolei wyspy z czujnikami 8DI/8DO mają adresy wejściowe/wyjściowe poniżej 256 np. Input adress=6, Output adress=10.

    Mam pytanie jak odczytywać, wysyłać bajty, słowa z urządzeń peryferyjnych takich jak Pilz, wyspy sygnałowe różnych producentów itp.

    1. Czy z Pilza mogę odczytać słowo w taki sposób ?
    L PIW256 czy może L IW256 ?
    Kiedy należy stosować PIW a kiedy IW ?


    2. Jak odczytywać stan czujników z wysp sygnałowych po Profibusie ?
    Adres wejść z wyspy wynosi 6, a wejścia w module DI32 od S7-300 też mają adres 6, więc pisząc
    L IB6 - odczytam bajt 6-ty z PLC, a jak odczytać bajt z wyspy o adresie 6 ?
    Czy prawidłowe będzie zatem dla wyspy
    L PIB 6 ?


    Z góry dziękuję za odpowiedź na te 2 podpunkty oraz wyjaśnienie kiedy stosować PIW a kiedy IW (do tej pory PIW, PQW zawsze stosowałem przy wejściach AI/AO)
  • #2 16660392
    Rafik4
    Poziom 31  
    Posty: 1108
    Pomógł: 214
    Ocena: 314
    Schnapsik napisał:
    2. Jak odczytywać stan czujników z wysp sygnałowych po Profibusie ?
    Adres wejść z wyspy wynosi 6, a wejścia w module DI32 od S7-300 też mają adres 6, więc pisząc
    L IB6 - odczytam bajt 6-ty z PLC, a jak odczytać bajt z wyspy o adresie 6 ?
    Czy prawidłowe będzie zatem dla wyspy
    L PIB 6 ?

    6 to adres w sieci, wejścia masz pod adresem ???(drugi obrazek pokazuje adres profibus 8, a wyjścia pod adresem Q10).
  • #3 16660436
    Schnapsik
    Poziom 7  
    Posty: 31
    właśnie tego nie rozumiem
    jak zatem wysterować wyjście 10.0 na wyspie o adresie Profibus nr 8 ??
    Jak będzie to zapisane np w STLu ?
  • #4 16660595
    zembol
    Poziom 25  
    Posty: 499
    Pomógł: 79
    Ocena: 56
    Witam,
    Generalnie to tak:
    1. Wszytko zależy od konfiguracji sterownika, w przypadku nowych 300 można zmienić dwa parametry (wlasciwoci cpu zakładka cycle/clock memory) (w starych 300 zawsze input/output area =128)
    - size of the proces image input area
    - size of the proces image output area
    i teraz jesli korzystasz z adresów wiekszych niz zdefiniowana w size of the proces image to urzywasz PI i PQ
    jeśli mniejszych to normalnie I i Q
    czyli jeśli size of the proces image input area = 256 to L IW200 i L PIW 300
    Odnośnie pytania drugiego standardowo size of the proces image input/output area = 128 wiec teoretycznie L IB6 niema znaczenia czy to moduł na racku czy rozproszone wejście) druga sprawa to ciekawe ze masz ten sam adres na module rackowym i na wyspie DI/DO po profibusie


    W przypadku tego Pnozamulti użył bym dedykowanych bloków do czytania i zapisywania do urządzeń po profibusie/profinecie czyli SFC 14 i 15 ( dokładnie opisane w manulau do stepa) użycie tych bloków zapewnia spójność odebranych i wysłanych danych
  • #5 16661024
    Schnapsik
    Poziom 7  
    Posty: 31
    dzięki za odpowiedź, dużo mi rozjaśniłeś.
    A propo Pilza bo potrzebuje w zasadzie z niego odczytać tylko 1 bit. Wiem że można zrobić L PIW256 i odczytam 2 bajty w ten sposób, a jak odczytać jeden bit ?
    Nie da się zrobić L PII 256.0, chciałem w ten sposób podejrzeć ten bit w tabeli VAT.
    Da się odczytać pojedyńczy bit po Profibusie ?

    Edit:
    Pilz wykorzystuje 20 bajtów wejściowych i 20 bajtów wyjściowych. Korzystając z biblioteki SFC14, chciałem odczytać 20 bajtów wejściowych z Pilza, ale nie wiem jak mam wskazać że chodzi mi o 20 bajtów z obszaru wejść.

    Napisałem w STLu tak :
    CALL "DPRD_DAT"
    LADDR :=W#16#100
    RET_VAL:=#error_sfc14
    RECORD :=P#DB14.DBX 0.0 BYTE 20

    ale nie wiem czy powinno być W#16#100 czy też PIW256 ??
    Następnie potrzebuję zczytać 20 bajtów wyjściowych Pilza i nie wiem czy mam wpisać PQW256 ?
  • #6 16661351
    zembol
    Poziom 25  
    Posty: 499
    Pomógł: 79
    Ocena: 56
    Witam,
    Jeśli chcesz załatwić bez pomocy sfc 14 to możesz zrobić np tak
    L PIW ( tutaj słowo zawierające bit na którym ci zależy)
    T MW 20
    a potem wysupłać z tego MW 20 bit który jest potrzebny
    Co do SFC 14 to LADDR powinien być podany jako hex czyli W#16#100
  • #7 16661380
    Schnapsik
    Poziom 7  
    Posty: 31
    jeżeli wyjścia z Pilza ustawię na adres np. 356, czyli 164 hex to mogę w ten sposób odczytać wyjścia korzystając z SFC14
    LADDR W#16#164 ??
  • #8 16661443
    zembol
    Poziom 25  
    Posty: 499
    Pomógł: 79
    Ocena: 56
    a czemu chcesz czytać wyjścia ?
    Czytasz z obszaru I za pomoca SFC 14
    Zapisujesz do obszaru Q za pomoca SFC 15
  • #9 16661509
    Schnapsik
    Poziom 7  
    Posty: 31
    Pilz wysyla do PLC zezwolenie na wykonanie paru rzeczy. W programie od Pilza jeśli logika bezpieczeństwa jest spełniona wystawiam stan logiczny TRUE na wirtulanym wyjściu (takie coś jak marker, flaga w PLC), który właśnie chcę odczytać z Pilza po Profibusie. Zobacz foto dokumentacji ramki od Pilza
    Odczytywanie bitów/bajtów z urządzeń po Profibusie
  • #10 16661584
    zembol
    Poziom 25  
    Posty: 499
    Pomógł: 79
    Ocena: 56
    Co do samego Pilza to program można podejrzeć (nie mając projketu i haseł i mając oczywiście oprogramowanie Pnozmulti Configuraor) używjąc w trybie online opcji dynamic view (albo jakoś tak :) ).
    Co do reszty to wlasnie sfc 14 czytasz ramke od pnoz (obszar wejść do sterownika ale to obszar wyjść w samym pilz )
    a sfc 15 wysyła ramkę do pnoza
  • #11 16661617
    Schnapsik
    Poziom 7  
    Posty: 31
    Zgadza się, logikę w Pilzu stworzyłem w Pnozmulti Configurator, klikasz online, potem dynamic view i widzisz na zielono które warunki bezpieczeństwa są spełnione itp itd. Wszystko tak jak mówisz, tylko nie wiem czy na pewno dobrze Cię rozumię, a więc chcę np. odczytać z Pilza pierwszy bajt wyjściowy (byte 0, a więc wyjścia wirtualne o0 do o7 wg nazewnictwa Pilza),
    zatem czy to będzie poprawne ??
    CALL SFC14
    LADDR :=W#16#100
    RET_VAL:=#error_sfc14
    RECORD :=P#DB14.DBX 0.0 BYTE 1
  • #12 16661643
    zembol
    Poziom 25  
    Posty: 499
    Pomógł: 79
    Ocena: 56
    Tak, a najlepszym sposobem będzie szybkie napisanie takiego programu i sprawdznie komunikacji z jednej strony dynamic view pnoza i oglądanie warunków online i podgladanie w stepie db z opcja data view
  • #13 17114711
    Jarik
    Specjalista Automatyk
    Posty: 271
    Pomógł: 38
    Ocena: 27
    Jeżeli potrzebujesz tylko wyjścia wirtualne to możesz odczytać podwójne słowo z PILZA. Będziesz miał zawarte wszystkie wyjścia wirtualne i na dodatek status lampek. Pierwsze 3 bajty to wirtualne wyjścia PILZA. Jeżeli okazałoby się że wypracujesz więcej niż 8 wyjść. Przez te wyjścia możesz przesłać chociażby stan grzybków czy osłon dfo wizualizacji. Zawsze łatwiej jest znaleźć który grzybek "sam" się wcisnął.

Podsumowanie tematu

✨ W dyskusji poruszono kwestie odczytywania danych z urządzeń peryferyjnych po Profibusie, w szczególności z modułów Pilz oraz wysp sygnałowych. Użytkownik zapytał o różnice między odczytem danych za pomocą PIW i IW oraz jak poprawnie odczytać stany czujników z wysp sygnałowych. Odpowiedzi wskazują, że wybór między PIW a IW zależy od konfiguracji sterownika i rozmiaru obszaru obrazu procesu. Użytkownicy sugerują użycie bloków SFC 14 i SFC 15 do komunikacji z urządzeniami Profibus. Dodatkowo, omówiono metody odczytu pojedynczych bitów oraz całych bajtów z Pilza, a także podano przykłady kodu w STLu. Wskazano, że można odczytać podwójne słowo z Pilza, co ułatwia monitorowanie stanu wyjść wirtualnych.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA