Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Logo8 - skalowanie wartości powyżej 32767

10 Lip 2019 19:45 186 7
  • Poziom 11  
    Witam.

    Komunikuję się za pomocą LOGO8 za pomocą protokołu S7 ze sterownikiem s7-1200 który odczytuje sygnał 4-20mA z czujnika prędkości silnika. Ja z kolei w logo otrzymuję wartość z s7 z zakresu w formacie 0-65535 co odpowiada 20-80% prędkości. Nie mam dostępu do s7 a chcę to jakoś przeskalować to 0-65535 na te 20-80% w logo. Do komunikacji z s7 używam analogowego wejścia sieciowego przez profinet. Problem w tym że jak wartość jest powyżej 32767 to sygnał ze wzmacniacza analogowego jest już ujemny a dla 65535 jest -1.
    Czy jest jakiś sposób by z tych 65535 otrzymać w logo wartości 20-80?
    Dzięki za pomoc.
    Paweł

    Logo8 - skalowanie wartości powyżej 32767
  • Poziom 17  
    a nie da się potraktować wartości jak uint?

    Jeżeli nie, to przeskalować dzieląc wartość na część dodatnią i ujemną.

    Dla zakresu 0..32767 wynik wprost.
    Dla zakresu ujemnego dodajemy stałą 32768 i wynik razy dwa albo jeden shift w lewo.

    Edit: można też zrobić pojedynczy shift w prawo (dzielenie na pół) i dalej przeskalować liczbę z zakresu 0..32767

    Skala problemu jest dla mnie kompletnie niezrozumiała. Logo ostatni raz miałem w rękach 23 lata temu.
  • Poziom 11  
    gag70 napisał:
    a nie da się potraktować wartości jak uint?

    Jeżeli nie, to przeskalować dzieląc wartość na część dodatnią i ujemną.

    Dla zakresu 0..32767 wynik wprost.
    Dla zakresu ujemnego dodajemy stałą 32768 i wynik razy dwa albo jeden shift w lewo.

    Edit: można też zrobić pojedynczy shift w prawo (dzielenie na pół) i dalej przeskalować liczbę z zakresu 0..32767

    Skala problemu jest dla mnie kompletnie niezrozumiała. Logo ostatni raz miałem w rękach 23 lata temu.


    Jakim bloczkiem dodać stałą 32768?
    Właśnie nie znajduję opcji potraktowania jako UINT. Zakres wartości jaką można wprowadzić w operacjach arytmetycznych to +32767 i -32768.
    To chyba nie było logo. Nie widzę tu operacji shift a dzielenie liczby ujemnej przez 2 nadal daje liczbę ujemną.
  • Poziom 17  
    Szesnastobitowa liczba bez znaku oraz ze znakiem w kodzie uzupełnień do dwóch, będzie przyjmowała następujące wartości:
    uint 0 = int 0 = 0x0000 = 0b0000 0000 0000 0000
    uint 32767 = int 32767 = 0x7fff = 0b0111 1111 1111 1111
    uint 32768 = int -32768 = 0x8000 = 0b1000 0000 0000 0000
    uint 65535 = int -1 = 0xffff = 0b1111 1111 1111 1111

    Trzeba stworzyć dwa warunki i żeby nie było dalszych pytań "jak", zmieścić się w liczbie ze znakiem (0-32767 zamiast 0-65535):

    JEŻELI liczba >= 0 I liczba <= 32767 TO wynik = liczba / 2
    JEŻELI liczba >= -32768 I liczba <= -1 TO wynik = liczba / 2 + 16383 + 1/2

    Ponieważ nie możemy dodać 1/2 więc to ostatnie działanie należy opuścić, godząc się na błąd z opuszczenia wynikający.
    "wynik" będzie zmienną szesnastobitową ze znakiem, której wartość zawiera się w zakresie 0-32767.
    Na przeskalowanie do 20..80 na pewno znajdzie się odpowiedni "bloczek", więc nie będę pisał jak to zrobić na piechotę.

    Tak wygląda teoria pozwalająca obejść mechanizmy "userfriendly", stworzone po to żeby się nie trzeba było uczyć tejże teorii.
    Podejrzewam, że w Logo istnieją metody konwersji pozwalające zamienić int ze znakiem na uint, ale kolega ich nie zna, a ja nie zamierzam uczyć się Logo, bo to droga zabawka z ograniczoną stosowalnością.
  • Specjalista Automatyk
    paw1976 napisał:
    odczytuje sygnał 4-20mA z czujnika prędkości silnika. Ja z kolei w logo otrzymuję wartość z s7 z zakresu w formacie 0-65535

    Na obrazku widać, że użyłeś bloczka Wzmacniacz Analogowy. Próbowałeś po prostu w nim ustawić, że masz podłączony czujnik 4-20mA?
  • Poziom 11  
    kato76 napisał:
    paw1976 napisał:
    odczytuje sygnał 4-20mA z czujnika prędkości silnika. Ja z kolei w logo otrzymuję wartość z s7 z zakresu w formacie 0-65535

    Na obrazku widać, że użyłeś bloczka Wzmacniacz Analogowy. Próbowałeś po prostu w nim ustawić, że masz podłączony czujnik 4-20mA?


    Tak. Nic nie zmienia.

    Paweł
  • Specjalista Automatyk
    Tak myślałem. To tak "na prędko": na wyjściu bloczka B008 masz wartość w zakresie 0 - 6554 (wartość po podziale przez 10). Przeskaluj sobie dalej na "procenty", których potrzebujesz. Rozwiązanie może niezbyt eleganckie, ale LOGO ma swoje ograniczenia.
    Logo8 - skalowanie wartości powyżej 32767 Logo8 - skalowanie wartości powyżej 32767
  • Poziom 24  
    W helpie masz że wyjście wzmacniacza analogowego to: Value range for AQ: -32768 to +32767.

    Pomysł kolegi wyżej może się sprawdzić!