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.

Siemens S7-1200,blok obsługujący AI w programie Step 7 v10.5

piotr22234 21 Nov 2010 14:04 14509 27
Optex
  • #1
    piotr22234
    Level 10  
    Witam serdecznie,
    Mam problem z przypisaniem do wejścia analogowego(0-10V) w sterowniku S7-1200 odpowiedniego bloku funkcyjnego do jego odczytu i konwersji sygnału na wartość bitową.
    W programie Step7 v 10.5 nie znalazłem żadnego bloku odpowiedzialnego za to zadanie(np. w Step 7 lite jest taki blok FC100:Read analog value 460-1, ale z tego co mi wiadomo program ten obsługuje sterowniki S7-300),
    może ktoś wie jaki blok należy użyć i gdzie on się znajduje, czy może są dodatkowe biblioteki, obsługujące wejścia analogowe w sterowniku z rodziny S7-1200?
    Przydałyby się też jakieś materiały na temat programowania z obsługą wejść analogowych dla S7-1200.
    z góry dziękuje za pomoc.


    mój sterownik: CPU 1214C DC/DC/DC,
    analog inputs start adres: IW64, hardward identifier HW ID:9
  • Optex
  • #2
    Oscar_83
    Level 15  
    A co dokładnie chciałbyś zrobić z tym wejściem?
    Mozesz go w dowolnym momencie programie odczytac adresujac"PIW64"
    Mozesz uzyc funkcji NORM_X aby przeskalowac sobie wejscie analogowe do zmiennej typu real przedzialu 0.0<=OUT<=1.0
  • Optex
  • #3
    piotr22234
    Level 10  
    Dokładnie to mam zamiar podłączyć czujnik radarowy, który podobno ma wyjście w standardzie 0-10V,(pisze podobno, bo jeszcze nie dostałem tego czujnika, narazie będe symulował wejście z zasilacza) i ma zamiar mierzyć wysokość przedmiotów przesuwających się na taśmie transportowej.

    Sygnał który uzyskam chciałbym przeskalować na wartość bitową z rozdzielczością 12bit-ów, i potem dalej skalować na rzeczywistą wartość w cm, i tęże wartość wysyłać na panel operatorski w formie liczbowej dziesiętnej, oraz w postaci słupka obrazującego wysokość przedmiotu.

    Raczej będe się poruszał w zakresie do 30cm, zależy od tego jak będzie mi działał, czy nie będzie nie porządanych odbić albo zakłóceń, zobacze jak to będzie wyglądało w praktyce, i co za tym idzie nie wiem czy rozdzielczość 12bitowa będzie potrzebna, interesuje mnie dokładność na poziomie 0,5cm ale to jest zupełnie inny problem.

    W każdym razie dziękuje i spróbuje odczytać wartość IW64 przy zasilaniu z zasialcza. Pytanko: dlaczego PIW64? a nie po prostu IW64 co to oznacza?
    pozdrawiam serdecznie Piotr
  • #4
    Oscar_83
    Level 15  
    NAjprosciej mowiac PIW to odniesienie sie bezposrednio do wejscia analogowego omijajac 'process image table'.

    Spokojnie mozesz adresowac wejscie poprzez IW.
  • #5
    piotr22234
    Level 10  
    Acha, dobrze wiedzieć!
    Spróbuje zadresować IW64 i podłączyć źródło do pierwszego wejścia, potem spróbuje przeskalować, odezwe się jak już będzie działało albo jak będzie coś z czym sobie nie poradze.

    Bardzo dziękuje za fachową pomoc. pozdrawiam Piotr
  • #6
    maleer
    Level 12  
    Witam.

    Dołączę się do tematu. Otóż też chcę wykorzystać w takim samym sterowniku wejście analogowe 0-10V w które sterownik jest wyposażony. Nie wiem jak w Step7 zaprogramować wejście analogowe z przetwornika ciśnienia. Przez sterownik chcę zrobić alarm (po przekroczeniu pewnej wartości ma się załączyć sygnalizacja) i kasowanie alarmu.
  • #7
    Thomash3
    Level 13  
    piotr22234 wrote:

    Sygnał który uzyskam chciałbym przeskalować na wartość bitową z rozdzielczością 12bit-ów, i potem dalej skalować na rzeczywistą wartość w cm, i tęże wartość wysyłać na panel operatorski w formie liczbowej dziesiętnej, oraz w postaci słupka obrazującego wysokość przedmiotu.


    Pamiętaj jeszcze o jednej rzeczy: wejście analogowe wbudowane w sterownik ma rozdzielczość tylko 10 bitów, więc jeśli chcesz większą, musisz dołożyć moduł analogowy.

    maleer wrote:

    Dołączę się do tematu. Otóż też chcę wykorzystać w takim samym sterowniku wejście analogowe 0-10V w które sterownik jest wyposażony. Nie wiem jak w Step7 zaprogramować wejście analogowe z przetwornika ciśnienia. Przez sterownik chcę zrobić alarm (po przekroczeniu pewnej wartości ma się załączyć sygnalizacja) i kasowanie alarmu.


    Sugeruję wykorzystanie bloku "CMP >", gdzie porównujesz wartość wejścia analogowego lub przeskalowaną już wartość z konkretną liczbą lub zmienną. Na wyjściu bloku dajesz bit, który później wykorzystujesz do stworzenia alarmu.

    Pozdrawiam
    Thomash3
  • #8
    piotr22234
    Level 10  
    Rzeczywiście, sterownik którego używam, ma wejścia analogowe 10bitowe, tymniemniej ta rozdzielczość w zupełności wystarcza, przeskalowanie mniejwięcej 70 cm z dokładnością poniżej 0,1cm i tak jest dokładniejsze niż dokładność samego czujnika ultradźwiękowego.

    pozdrawiam
  • #9
    maleer
    Level 12  
    A mam jeszcze takie pytanie odnośnie wejścia analogowego w S7-1200. W momencie kiedy podaję sygnał na wejście IW64 z zasilacza o określonych napięciach od 3 do 9 VDC i odwołaniu się do tego wejścia w programie, można podejrzeć jaka wartość jest na wejściu. Ku mojemu zdziwieniu nijak się to ma do tego co ja podaję na wejściu a co mi się wyświetla na ekranie, a wyświetla mi się coś takiego 16#28DC przy podaniu np. 3V. Na dodatek trzy ostatnie znaki ciągle ulegają zmianie przy stałym napięciu wejściowym.
    Powiedzcie mi czy jest to normalne czy mam coś źle podłączone??
  • #10
    piotr22234
    Level 10  
    Witam,
    Jeśli wyświetla ci się 16#28DC to znaczy że jesteś gdzieś na 1/3 zakresu pomiarowego, ponieważ zakres dla tego sterownika jest od 0 - 27648 z rozdzielczością 10bitów. 16#28DC to jest to samo co 10460, według moich obliczeń odpowiada to napięciu ok 3,78V.
  • #11
    maleer
    Level 12  
    Hmmmm... a powiedz mi jak to wyliczyłeś?? Jest na to jakiś wzór??


    Doradź mi też jaką najlepiej kupić książkę o programowaniu sterowników PLC żeby było w niej jak najwięcej informacji napisanych przystępnym językiem.
  • #12
    piotr22234
    Level 10  
    obliczyłem to w sposób następujący:
    16#28DC to jest liczba zapisana w formacie szesnastkowym albo heksadecymalnym, nie będę się rozpisywał jak się to liczbę konwertuje do systemu dziesiętnego, najprościej użyć kalkulatora który jest w każdym windows-sie, tak jest opcja konwersji na różne systemy, w tym szesnastkowy.

    kolejnym krokiem jest następujące założenie:
    0V na wejściu analogowym odpowiada wartości dziesiętnej równej 0
    10V na wejściu analogowym odpowiada wartości dziesiętnej równej 27648
    przedział od 0V do 10V zmienia się wprostproporcjonalnie czyli liniowo od wartosci 0 do 27648,

    dla przykładu:
    jeśli na wejście podasz napięcie x a zmienna odpowiadająca za to wejście np. IW64 - odczytasz tę wartośc z watch table(można tam wybrać typ wyświetlanej wartosci UDecimal czyli wartość dziesiętną bez znaku) wartość ta wynosi przykładowo 8573 to do obliczenia napięcia postępujesz wg następującego wzoru:

    x=(wartość wyświetlana/wartość maksymalna)*zakres(10V)
    x=(8573/27648)*10V= 3,10V

    z książek to narazie nie ma nic ciekawego ale polecam podręcznik do S7-1200
    http://www.plcs.net.pl/index.php/view-details...353-podrecznik-programowania-s7-1200-_pl.html
    pozdro
  • #13
    Rindiglas
    Level 10  
    Thomash3 wrote:

    Sugeruję wykorzystanie bloku "CMP >", gdzie porównujesz wartość wejścia analogowego lub przeskalowaną już wartość z konkretną liczbą lub zmienną. Na wyjściu bloku dajesz bit, który później wykorzystujesz do stworzenia alarmu.


    Można oczywiście zrobić również bezpośrednio alarm reagujący na wielkość danej analogowej z poziomu obsługi alarmów w HMI (mamy Discrete Alarm oraz Analog Alarm, ale sam musisz wybrać który sposób jest dla ciebie wygodniejszy :]
  • #14
    machoney
    Level 15  
    ja u siebie zastosowałem blok "SCALE_CURRENT_INPUT" który z wejścia 0-20mA odpowiadającego 0-27648 robi wejście 4-20mA w zakresie 0-27648 z obsługą przerwanej linii. Jeżeli prąd spadnie poniżej zadanej wartości (np 3mA) wystawia nam sygnał BREAK.
    Po tym bloku mam NORM_X (zmienia zakres 0-27648 na 0.0 do 1.0)
    Następnie blok SCALE_X (zmienia zakres 0.0 do 1.0 na podany min do max)

    U mnie to ładnie działa :) Teraz uczę się wyzwalać alarmy w HMI. pzd
  • #15
    mgiro
    Level 22  
    Witam,

    A mógłby ktoś wstawic prosty projekt wykorzystania wejścia analogowego w sterowniku CPU1212C [AC/DC/Rly]. Aby wartośc napięcia [0-10V] była przypisywana zmiennej typu word. Próbuję to zrobic od jakiegoś czasu i nadal nie działa. W internecie też nie znalazłem takiego przykładu.
  • #16
    maleer
    Level 12  
    Witajcie koledzy.

    Mam problem a za bardzo nie wiem jak go rozwiązać. Otóż jak wyskalować sygnał analogowy aby:
    0V lub 4 mA odpowiadało pełnemu zbiornikowi (100%)
    a 10V lub 20 mA pustemu zbiornikowi (0%)

    Próbowałem w bloku ScaleX zamienić żeby na min było 100% a max 0% to tak nie działa bo wartośc value musi byc min<równe VALUE <równe max.

    Pozdrawiam i dziękuje za odpowiedź.
  • #17
    mgiro
    Level 22  
    Musisz użyć dwóch bloków ScaleX i tam jest jeszcze jeden (nie pamietam nazwy). Wówczas będzie działać. Tak robiliśmy na kursie.
  • #18
    senda1970
    Level 1  
    maleer wrote:
    Witajcie koledzy.

    Mam problem a za bardzo nie wiem jak go rozwiązać. Otóż jak wyskalować sygnał analogowy aby:
    0V lub 4 mA odpowiadało pełnemu zbiornikowi (100%)
    a 10V lub 20 mA pustemu zbiornikowi (0%)

    Próbowałem w bloku ScaleX zamienić żeby na min było 100% a max 0% to tak nie działa bo wartośc value musi byc min<równe VALUE <równe max.

    Pozdrawiam i dziękuje za odpowiedź.


    Można sygnał z wejścia wprowadzić na "NEG" następnie na "NORM_X" gdzie MIN= -27648 , MAX=0 i dopiero na "SCALE_X" z MIN=0, MAX=100
  • #19
    Block4r
    Level 10  
    Chciałbym się podpiąć jeszcze pod ten temat. Otóż mam sterownik S7-1200 DC/DC/DC i odczytywać na nim z czujnika LM35D temperatrue. Czujnik LM35D ma trzy nóżki, z jednej pobiera 6-30V supply voltage, jedna jest Vout i jedna GND. Gdy podpinam czujnik pod zasilanie gnd, i do Vout podpinam miernik który mi pokazuje 250mV (25stopni). Zaznaczę tutaj jeszcze że czujnik pokazuje 10mV/Stopien Celcjusza a jego zakres to 0-100stopni. Nastepne podpinam czujnik pod wejscie analogowe i nagle po zmierzeniu napięcia pomiedzy Vout które jest wpięte do AI i gnd wychodzi mi okolo 2,5~~ volta... W programie mam jeden blok norm_X w którym jest 'int to real' wart min. 0 , wart max 32672 (typowe dla int) a na value mam IW64 (wejscie analogowe) , następnie mam bloczek scale_x na którym mam real to real, wart min mam 0 a wart max 100 a na value mam podpięte wyjście z wcześniejszego bloczku.

    Po włączeniu programu na "okularkach" - podglądzie, IW64 mam 19234~~ a na wyjściu z bloczka scale - 102. I coś jest nie tak i nie potrafie dojść co. Być może ktoś miał podobny problem, lub wie jak to rozwiązać. Pozdrawiam
  • #20
    Los_sandalos
    Level 27  
    Wrzuć zrzut z ekranu bloczków norm x i scale x przy podglądzie (te okularki).
  • #22
    Los_sandalos
    Level 27  
    Siemens S7-1200,blok obsługujący AI w programie Step 7 v10.5

    Kolego chyba masz coś źle podłączone (masy) - jeśli miałbyś 25 stopni to czujnik powinien dać 0,25V czyli 0,25/10*27648=691 Na zrzucie masz taki przykład. Skalowanie zrobiłem nie od 0 do 100 tylko do 10000 co daje Ci rozdzielczość 0,1 stopnia, miejsca dziesiętne wiadomo dodaje się na panelu czy gdzie tam używasz zmiennej.

    Sprawdź elektronikę.
  • #23
    Dzonzi
    Level 12  
    No dobra, ale czemu akurat 27648 a nie ponad 32000? Niepotrzebnie zmniejszona rozdzielność? Wnioskuję, że jest jakiś poważny powód, skoro wymyślili to tak, ludzie dużo mądrzejsi od nas.
  • #24
    Markos80

    Automation specialist
    Aleś Pan odkopał :), a wystarczy do dokumentacji zaglądnąć.

    Siemens S7-1200,blok obsługujący AI w programie Step 7 v10.5
  • #25
    Dzonzi
    Level 12  
    i dobre jest to przepełnienie? Chodzi tylko o to, żeby wykrywało błędne działanie pętli prądowej albo źródła napięcia?
  • #26
    Thomash3
    Level 13  
    Z 32000 na 27648 wcale się nie zmniejsza rozdzielczość, to już jest za przetwornikiem A/C. Rozdzielczość przetwornika na CPU jest 10 bitów, czyli 1024 stopnie, na modułach rozszerzeń standardowych jest 8192 stopni. Zatem obniżenie do 27648 nic nie zmienia w kwestii dokładności, tylko jest właśnie do diagnostyki przepełnienia.
  • #27
    robo1973
    Level 15  
    Witam !!
    Jak jest rozdzielczość wejść PIW0 , PIW1 , 2,3 w CPU 313C ?
    Dla PIW0 zmienienia mi się 0-27648 ale
    dla PIW 1 mam 4096 dla 0V ? 2 do 12 = 4096 dlaczego dla 0 V podaje 4096 ?
    pozdrawiam !!
  • #28
    Markos80

    Automation specialist
    PIW0 to Word i zajmuje dwa bajty PIB0 i PIB1.
    Z tego wynika, że kanały z karty powinieneś numerować co 2, czyli PIW0, PIW2, PIW4, itd.