DINT auf PAW

hawiwo

Level-1
Beiträge
4
Reaktionspunkte
0
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 :"-)
 
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
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
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.
 
Zuletzt bearbeitet:
Zurück
Oben