Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Negative Zahl richtig auslesen (AGLink)

  1. #1
    Registriert seit
    28.01.2010
    Beiträge
    76
    Danke
    5
    Erhielt 3 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    ich lese mittels AGLink einige DW einer S7-300 aus. So lange die Zahlen positiv sind, ist ja auch alles OK. Bei der Negativen kommt am PC verständlicherweise Müll raus. Gibt´s im .NET Framework dafür schon ne fertige Funktion um die Zahl wieder zu "Richten" oder muss ich mir das selbst basteln?!

    Gruß Mike
    Zitieren Zitieren Negative Zahl richtig auslesen (AGLink)  

  2. #2
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Kenne das Produkt nicht, kann es sein, dass Du eine Extension anhängen musst?
    Bei Applicom zB muss man schreiben DB100.DBD10 F damit das als Gleitkommazahl interpretiert wird.

  3. #3
    Registriert seit
    28.01.2010
    Beiträge
    76
    Danke
    5
    Erhielt 3 Danke für 1 Beitrag

    Standard

    nein, ich gebe hier beim Abruf der Daten schon das Format an.
    Also W für ein Word. Bei einem DoppelWord habe ich die Möglichkeit Value und fValue anzugeben und dann wird auch gleich umgerechnet. Beim Word bringt mir die Abfrage mit der Angabe Value leider gleich schon einen Fehler, da dies nur W zulässt.

  4. #4
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    kannst du mal ne einfache abfrage posten, kann es mir grad nicht so ganz vorstellen.
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. #5
    Registriert seit
    28.01.2010
    Beiträge
    76
    Danke
    5
    Erhielt 3 Danke für 1 Beitrag

    Standard

    Die Beispiel-Abfrage aus dem AGLink API Guide:

    Dim rwfield(0) As AGL4.DATA_RW40
    rwfield(0) = new AGL4.DATA_RW40()
    rwfield(0).BitNr = 0
    rwfield(0).DBNr = 100
    rwfield(0).Offset = 28
    'Bei ReadMix,WriteMix, OptReadMix oder OptWriteMix wird für "OpAnz" der Wert "1" erwartet
    rwfield(0).OpAnz = 1
    rwfield(0).OpArea = AGL4.AREA_DATA
    rwfield(0).OpType = AGL4.TYP_WORD
    rwfield(0).Result = 0
    ReDim rwfield(0).W(rwfield(0).OpAnz)
    rwfield(0).W(0) = 0

    'Für einen erfolgreichen Aufruf, muss eine Verbindung bis zum AG aufgebaut sein.

    Dim result As Int32 = agl.ReadMix(rwfield, rwfield.Length)



    Hiermit frage ich DB100.DBW28 ab. In diesem Datenword steht laut VAT -5, AGLink liefert mir jedoch 65531.
    Soweit ist das ja auch richtig, ich suche jetzt nur nach einer einfachen Möglichkeit die 65531 (im PC!) in -5 um zurechnen.
    Geändert von MikeJ (23.11.2010 um 11:51 Uhr)

  6. #6
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    der return-value von agl.ReadMix() ist Int32? dann sollte er doch auch richtig dargestellt werden.

    probiere mal

    Code:
    *
    Convert.ToInt32(agl.ReadMix(rwfield, rwfield.Length));
    Convert.ToInt32 wertet den input als zweierkomplement aus
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo,
    leider ist es mir bisher noch nicht gelungen (trotz entsprechender Absichten) mich da intensiver einzuarbeiten - aber die folgende Zeile stört mich ein bißchen :
    Zitat Zitat von MikeJ Beitrag anzeigen
    rwfield(0).OpType = AGL4.TYP_WORD
    Versuch doch mal dort als OPType ein AGL4.TYP_INT (wenn es das gibt, was ich mir gut vorstellen kann) vorzugeben. Das sollte nah meiner Vorstellung das korrekte Ergebinis bringen ...

    Gruß
    Larry

  8. #8
    Registriert seit
    28.01.2010
    Beiträge
    76
    Danke
    5
    Erhielt 3 Danke für 1 Beitrag

    Standard

    Hallo zusammen,

    sorry, ich hatte die exakte Rückmeldung der Funktion vergessen - sie wird Asynchron aufgerufen und der Rückgabewert beim Abruf eines Word´s ist UShort (also Vorzeichenlose 16Bit Ganzzahl).
    Demnach 0 bis +65535 am PC, jedoch -32767 bis +32767 an der SPS.

    Der Wert -5 an der SPS ergibt dann +65531 am PC
    - die Konvertierung in INT32 ergibt +65531
    - die Konvertierung in INT16 löst eine Ausnahme aus

    Beim OPType kann ich für ein Word nur AGL4.TYP_WORD auswählen.

  9. #9
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 420 Danke für 337 Beiträge

    Standard

    Du kannst den Int wertin ein Byte Array Konvertieren und zurückwandeln...

    byte[] bytes = BitConverter.GetBytes(value);
    int16 wrt = BitConverter.ToInt16(bytes , 0);

    Ich denke das müsste klappen, da BitConverter.GetBytes bei einem UInt16 und Int16 die gleichen Bytes ergeben müsste. Danach wird das ganze mit BitConverter.ToInt16 als int16 interpretiert!

    Aber Ich bin mir fast sicher, das AGLink das irgenwie auch direkt könnte! (Aber dazu kenne Ich die Lib zu wenig!)
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  10. #10
    Registriert seit
    28.01.2010
    Beiträge
    76
    Danke
    5
    Erhielt 3 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Super - Vielen Dank!
    Das Funktioniert einwandfrei!

    Viele Grüße
    Mike

Ähnliche Themen

  1. negative Zahl in positive verwandeln
    Von CDrews im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 27.01.2011, 21:33
  2. Wort aus SPS mit AGLink auslesen
    Von Sandra im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 12.03.2010, 14:05
  3. AGlink zum Auslesen von 3 SPSn der TCP/IP
    Von Bjoern21 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 02.09.2008, 00:29
  4. Zahl aus Bildfenstertitel auslesen
    Von Bender25 im Forum HMI
    Antworten: 14
    Letzter Beitrag: 04.02.2008, 14:34
  5. Negative Zahl in ProTool
    Von Ganz im Forum HMI
    Antworten: 4
    Letzter Beitrag: 25.08.2006, 18:36

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •