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

Step 7: Dlaczego zmienne MW0 aktywują wyjścia Q1.0-Q1.7?

MAJSTER XXL 26 Lis 2011 21:19 4933 18
  • #1 10186427
    MAJSTER XXL
    Poziom 29  
    Posty: 2064
    Pomógł: 164
    Ocena: 429
    Załączam krótki program z licznikiem. Nie za bardzo rozumiem dlaczego po wpisaniu z panela HMI zmiennej MW0 równej np. 1,2,4,8,16,32,128 załączają mi się fizycznie wyjścia kolejno Q1.0 do Q1.7.
    Druga sprawa to interpretacja liczb, mam ustawioną reprezentację decymalną na wejściu PV oraz na wyjściach CV a mimo to po "setowaniu" liczby 16 na wyjściu CV mam liczbę 32784.
    Step 7: Dlaczego zmienne MW0 aktywują wyjścia Q1.0-Q1.7?
    Załączniki:
    • OB1.pdf (13.01 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #2 10186787
    acid12
    Poziom 21  
    Posty: 388
    Pomógł: 41
    Ocena: 23
    networki od 2 do 18 wykorzystują poszczegolne bity markera MW0 do ustawiania wyjść, wiec normalne ze jak do niego cokolwiek wpiszesz to ustawiaja Ci się wyjścia
  • #3 10187507
    MAJSTER XXL
    Poziom 29  
    Posty: 2064
    Pomógł: 164
    Ocena: 429
    Zmieniłem marker z MW0 na MW10 z możliwym zakresem do wpisania z HMI od 0-999. Ale i tak się to gryzie, bo np. zadanie z panela liczby 455 powoduje przejście CPU w tryb STOP. Pytanie jak powinien wyglądać marker pod wejście PV licznika? I dlaczego na wyjściu setowana liczba jest inna od wejściowej? Nie jestem biegły w programowaniu, dlatego pytam.
    Załączniki:
    • OB1.pdf (14.83 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #4 10188083
    roks
    Specjalista Automatyk
    Posty: 524
    Pomógł: 77
    Ocena: 55
    Witam

    Najprawdopodobniej na wejście dajesz zmienną typu INTEGER a na wyjściu masz UNSIGNED INTEGER ( lub odwrotnie )

    pozdrowienia
  • #5 10188194
    acid12
    Poziom 21  
    Posty: 388
    Pomógł: 41
    Ocena: 23
    zobacz co masz w buforze diagnostycznym CPU po przejsciu w STOP
  • #6 10188441
    MAJSTER XXL
    Poziom 29  
    Posty: 2064
    Pomógł: 164
    Ocena: 429
    W buforze mam:

    Event 1 of 106: Event ID 16# 4562
    STOP caused by programming error (OB not loaded or not possible, or no FRB)
    Breakpoint in user program: Cyclic program (OB1)
    Priority class: 1
    OB number: 1
    Module address: 14
    Previous operating mode: RUN
    Requested operating mode: STOP (internal)
    Internal error, Incoming event
    02:46:19.309 PM 11/27/2011


    Event 2 of 106: Event ID 16# 2521
    BCD conversion error
    Affected register: accumulator 1
    Requested OB: Programming error OB (OB121)
    OB not found, or disabled, or cannot be started in the in the current operating mode
    Internal error, Incoming event
    02:46:19.306 PM 11/27/2011


    Powyżej trochę niedokładnie napisałem, miało być, że po kliknięciu na "Set" CPU przechodzi w Stop. Odnośnie typu danych zadawanych z HMI na wejście PV mam tryb "default" z poniższej możliwej tabeli. Jaki typ wybrać?
    Step 7: Dlaczego zmienne MW0 aktywują wyjścia Q1.0-Q1.7?
  • #7 10188539
    roks
    Specjalista Automatyk
    Posty: 524
    Pomógł: 77
    Ocena: 55
    Spróbuj w panelu wybrać UINT
  • #9 10188697
    MAJSTER XXL
    Poziom 29  
    Posty: 2064
    Pomógł: 164
    Ocena: 429
    Zmieniłem w panelu HMI typ danych dla MW10 na UInt, skasowałem wszystkie networki oprócz tego licznika.
    Na przykład:
    - wpisuję 0 i robię set i jest jak poniżej:
    Step 7: Dlaczego zmienne MW0 aktywują wyjścia Q1.0-Q1.7?
    - wpisuję 1 i robię set, załącza mi się wyjście Q0.0 i jest jak poniżej:
    Step 7: Dlaczego zmienne MW0 aktywują wyjścia Q1.0-Q1.7?
    - wpisuję od 10 wzwyż i robię set i jest Stop CPU.
    Jak zrobić, żeby móc wpisywać dane od 0-999?

    edit.
    Po zmianie typu danych na Int jest to samo.
    Co ciekawe, zadając set liczby 20 CPU pracuje dalej.
  • #10 10188831
    roks
    Specjalista Automatyk
    Posty: 524
    Pomógł: 77
    Ocena: 55
    Spróbuj w sterowniku przed wartością zadaną PV wpisać "#" lub "C#"

    później sprawdzę dokładnie
  • Pomocny post
    #12 10188919
    roks
    Specjalista Automatyk
    Posty: 524
    Pomógł: 77
    Ocena: 55
    Jaki masz panel ?
    Sprawdź czy format liczby w panelu nie jest hex.

    jeżeli jest to dla

    liczb : 255 , 16 nie będzie działać
    a dla : 18, 37 będzie

    pozdrowienia

    PS. sterownik zachowuje się tak jakby dostawał liczby hex ( szesnastkowe ) zamiast dziesiętnych
  • #13 10189302
    MAJSTER XXL
    Poziom 29  
    Posty: 2064
    Pomógł: 164
    Ocena: 429
    Panel jest firmy CTC Parker.
    Jedno jest pewne, wpisuję na panelu dowolna liczbę całkowitą od 0-999 i po kliknięciu OK w panelu liczba ta pojawia się na wejściu PV- tu jest dobrze. Typ danych dla MW10 w panelu mam obecnie na Int.
    Dla liczb:
    16 CPU działa, na wyjściu po secie jest postać 32784,
    18 CPU działa, na wyjściu po secie jest postać 32786,
    37 CPU działa, na wyjściu po secie jest postać 32805,
    255 CPU przechodzi w Stop

    Jak to zinterpretować?
    Aktualnie mam tylko jeden network:
    Załączniki:
    • OB1.pdf (6.06 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #14 10189464
    roks
    Specjalista Automatyk
    Posty: 524
    Pomógł: 77
    Ocena: 55
    Witam

    Sorki za to 37 faktycznie będzie działać .
    W takim razie mamy dwa problemy

    1. panel przesyła dane do sterownika w formacie szesnastkowym a sterownik wymaga w dziesiętnym .
    dziesiętnie 16 to w hex 10 działa
    dziesiętnie 18 to w hex 12 działa
    dziesiętnie 37 to w hex 25 działa
    dziesiętnie 255 to w hex FF nie działa - licznik dostaje niedozwolone znaki ( stąd błąd konwersji )
    Powyższe tłumaczy zatrzymywanie się sterownika
    2. wygląda na to że panel przesyła młodszy bajt z worda a starszy jest wypełniony ( starszy bajt = 255 + młodszy bajt z panela)
    Wyjście sterownika to uint

    to jeszcze sprawdzę , dam znać później

    pozdrowienia

    Jaki dokładnie typ panela

    Dodano po 58 [minuty]:

    Witam

    W zależności od dokładnego typu jednostki centralnej ( wersji ) i panela istnieje możliwość że panel nie ma drivera do sterownika . Sam protokół będzie działać ale mogą wystąpić problemy generalne np. z poprawnym adresowaniem.

    Sprawdź dokładne typy , firmware , wersje driverów itp

    pozdrowienia

    Dodano po 2 [godziny] 25 [minuty]:

    Witam

    Spróbuj jeszcze jednego :

    W sterowniku odczytaj na "czysto" ( bez licznika ) MW10 coś w stylu
    LD MW10
    ST MW16
    i wpisz np 18 potem 255 w panelu , zapisz co się pokaże w MW14, MW16 i MW18

    pozdrowienia
  • Pomocny post
    #15 10190516
    acid12
    Poziom 21  
    Posty: 388
    Pomógł: 41
    Ocena: 23
    poprawie jeszcze za kolegą roks, że w Siemensie zamiast komend LD, ST; używamy L oraz T, a jak kolega majster xxl używa graficznych trybów to należy użyć bloczku MOVE.
    Ewidentnie mamy tu problem z konwersją, ot co zgłasza CPU żądając bloku OB121.

    Dokładnie zrób takie testy jak kolega roks proponuje, bez licznika narazie, sprawdz jaką liczbę dostajesz od panelu, czy poprawny format, najlepiej ustaw w obu urzadzeniach typ na INT.
    Później wpisz na sztywno do markera liczbe np 10, 20, 100, 255 (nie z HMI tylko wprost z PLC) i wyslij na PV do licznika, czy błąd się powtórzy
  • #16 10190594
    MAJSTER XXL
    Poziom 29  
    Posty: 2064
    Pomógł: 164
    Ocena: 429
    Dodam, że całą komunikację między PC, CPU i HMI mam po ethernecie.
    Zrobiłem teraz tak, że wpisałem bez HMI na sztywno liczbę 255 na wejście PV i dałem set, efekt dobry- CPU działa.
    Step 7: Dlaczego zmienne MW0 aktywują wyjścia Q1.0-Q1.7?

    Później zobaczę dalsze rady

    edit.
    Zrobiłem funkcję move, góra jest dla zadanej 9 z panela, dół dla zadanej 10.
    W obu urządzeniach typ danych to INT.
    Step 7: Dlaczego zmienne MW0 aktywują wyjścia Q1.0-Q1.7?
  • Pomocny post
    #18 10195227
    ThoronDC
    Poziom 16  
    Posty: 112
    Pomógł: 17
    Ocena: 9
    Witam

    Do liczników musisz załadować wartość BCD nie int!
    W STL
    Kod: text
    Zaloguj się, aby zobaczyć kod


    W LAD użyj bloczku I_BCD
    i tyle.
  • #19 10197451
    MAJSTER XXL
    Poziom 29  
    Posty: 2064
    Pomógł: 164
    Ocena: 429
    Miałeś rację, wystarczył ten blok. Nie wiem dlaczego, ale ubzdurałem sobie, że potrzebuję konwerter Int na Decimal.
    Zrobiłem próbę z odczytem liczby z licznika na panelu HMI, potrzebny był konwerter w drugą stronę. Wszystko działa.

Podsumowanie tematu

✨ W dyskusji poruszono problem związany z aktywacją wyjść Q1.0-Q1.7 przez zmienną MW0 w programie PLC. Użytkownik zauważył, że wpisując różne wartości do MW0 z panelu HMI, wyjścia są aktywowane zgodnie z ustawionymi bitami. Po zmianie zmiennej na MW10 i próbie wprowadzenia wartości z zakresu 0-999, CPU przechodził w tryb STOP. Uczestnicy dyskusji zasugerowali, że problem może wynikać z niezgodności typów danych (INTEGER vs UNSIGNED INTEGER) oraz z konieczności użycia formatu BCD dla liczników. Ostatecznie, po zastosowaniu odpowiednich konwerterów, problem z konwersją danych został rozwiązany, a komunikacja między HMI a CPU poprawiła się.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA