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

Ergebnis 1 bis 6 von 6

Thema: DINT auf PAW

  1. #1
    Registriert seit
    05.10.2012
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, ich habe eine Funktion mit 2 IN Parametern vom typ WORD:
    AIO für den Analog Ausgangang und Wert für den Analogwert.
    Jetzt habe ich aber dummerweise häufig DINT Rechenergebnisse, die ich auf einen Analog Ausgang übertragen muss. D.h. ich muss DINT nach WORD konvertieren.
    Als C++ Programmierer dache ich einfach mal 16Bits nach links Shiften und zurück, aber der Ergebnistyp ist ja wieder ein DWORD. Einer meiner zahllosen Versuche war:
    L W#16#16
    L #dw
    SLD
    L W#16#16
    SRD
    T <Verflixt...Als Ergebnis kein WORD :"-|>



    Wie mache ich aus DINT bzw. DWORD ein WORD ? Ideal wäre, wenn DINT-Wert > FFFF ein FFFF an PAW übergeben wird.

    Die Funkion ist:
    L #AIO // Kanal Analog Ausgang 0..3
    L 2 // Adresse berechnen
    *I
    L 144
    +I
    SLD 3
    LAR1
    L #WERT
    T PAW [AR1,P#0.0]

    bitte helft einem armen c++ programmierer :"-)
    Zitieren Zitieren DINT auf PAW  

  2. #2
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Solange der Wert in deinem DINT die Wortgrenze grössenmässig nicht überschreitet kannst du es direkt auf ein PAW schreiben.

    Will heissen DINT 3400 ist auch INT 3400 und Wort 3400.

    Wenn die Wortgrenze überschritten wird musst du natürlich in der Software den Wert limitieren.

    z.B. U(
    L #doubleint
    L L#32767
    >D
    )
    SPBN end
    L L#32767
    T #doubleint
    end: NOP 0

    U(
    L #doubleint
    L L#-32767
    <D
    )
    SPBN end2
    L L#-32767
    T #doubleint
    end2: NOP 0

    L #doubleint
    T #singleint
    Geändert von vollmi (08.04.2013 um 16:12 Uhr)

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

    Standard

    Ich denke da ist ein grundsätzlicher Gedankenfehler.
    Der Analogausgang, 0-10 oder 4-20mA, oder was auch immer muss ja eine Skalierung haben.
    0-100000 Barbiepuppen entpricht 4-20mA zum Beispiel.

    Die Skalierung des Analogausganges ist (fast) immer 0-27648.
    D.h. der Wert 27648 gibt 20mA aus.

    Was beschreibt denn Dein DINT Wert? .... dem muss ja eine Skalierung zu Grunde liegen.
    Wenn das klar ist wird es einfach.

  4. #4
    hawiwo ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    05.10.2012
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von borromeus Beitrag anzeigen
    Ich denke da ist ein grundsätzlicher Gedankenfehler.Der Analogausgang, 0-10 oder 4-20mA, oder was auch immer muss ja eine Skalierung haben.0-100000 Barbiepuppen entpricht 4-20mA zum Beispiel.Die Skalierung des Analogausganges ist (fast) immer 0-27648.D.h. der Wert 27648 gibt 20mA aus.Was beschreibt denn Dein DINT Wert? .... dem muss ja eine Skalierung zu Grunde liegen.Wenn das klar ist wird es einfach.
    Ja das ist so wie du sagst 0-10V Skalierung 0-27648. Die Funktion die ich gepostet habe funktioniert ja auch.Ich muss aber vorab einige Berechungen anstellen (Gas Druck/Durchfluss/Temperatursensoren), die auch alle funktionieren, aber eben meist mit DINT Werten manchmal auch mit INT aber von INT nach DINT gibts ja auch Konvertierungsfunktionen I-DI z.B., aber DI-Iwas ja eigentlich auch keinen Sinn macht, gibts nicht. Ich habe aber nunmal diese Analogen Ausgänge (PAW 144,146 usw..) auf die ich kein 32Bit Typ schreiben kann.Deshalb verrechne ich meine Ergebnisse mit einem Teilfungsfaktor um sie in dem Bereich 0-27648 bzw. einem WORD abzubilden.Ich bräuchte einfach nur eine Funktion, die ein DINT als Parameter hat und den Wert auf das PAW schreibt bzw. FFFF wenn der Wert > FFFF.
    Geändert von hawiwo (08.04.2013 um 18:58 Uhr)

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

    Standard

    Schreib DINT auf das PAW, mit MAX-Begrenzung 27648, fertig!

  6. #6
    hawiwo ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    05.10.2012
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von borromeus Beitrag anzeigen
    Schreib DINT auf das PAW, mit MAX-Begrenzung 27648, fertig!
    OK Danke für die Antworten.

Ähnliche Themen

  1. Umrechnung DINT auf REAL
    Von Bummekrampe im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 26.07.2012, 12:49
  2. Profibus Zugriff auf PEW/PAW oder konsistent?
    Von Züttu im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 12.11.2010, 15:25
  3. Realwert auf PAW
    Von SPS_NEU im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 20.04.2009, 12:52
  4. 26 Bit vorzeichenrichtig auf DINT
    Von sps_horst im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 18.01.2008, 05:45
  5. Mit Any-Pointer auf PAW zugreifen?
    Von merlin im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 24.06.2007, 20:51

Lesezeichen

Berechtigungen

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