PDA

View Full Version : FC106 Problem mit WinBloc (Suche--> kein erfolg!)



dkeipp
30.03.2007, 19:22
Hallo!

Ich bin gerade dabei meine Weidmüller WinBloc Profibusmodule ans laufen zu grigen. Hab aber probleme mit den Analog Ausgängen. Mit dem FC106 kommt nur Käse raus :( . Offensichtlich passt das bitmuster nicht. gibts einen anderen Baustein der mit den Weidmüller Dingern "kann"?
Ich hab schon im Forum gesucht aber irgendwie nichts passendes gefunden!

Anbei hab ich noch ein Bild aus dem Manual (Was ist eigentlich "D" und "u" also bit 0 und 1?)

PS: ich will 0-10V ausgeben

Danke schonmal

PeterEF
30.03.2007, 20:58
So wie die Tabelle aussieht, wirst Du da von hand nacharbeiten müssen: scheinbar werden nur die 12 höherwertigen Bits für die Darstellung des Meßwertes verwendet, die vier niederwertigen haben andere Aufgaben. Welche genau, weiß ich auch nicht (sind schon etwas älter die Module, mit neueren kenne ich das so gar nicht?).

Also so skalieren, das 0..10 Volt auf 0..4095 gebracht werden, diesen Wert vier nach links schieben und dann ausgeben sollte funktionieren, wenn nicht mußt Du mal mit den Bits 0 und 1 spielen oder das Handbuch ganz durchlesen;)

dkeipp
31.03.2007, 15:19
Jo, ist ja gar net schwer... hab ich soweit kappiert!
Nur: Da ich blutiger anfänger bin bokomm ich den Integerwert nicht nach Links geschoben. Mit den Standartbausteinen kann ich ja nur Wörter bzw. Doppelwörter schieben also müsste ich den Integer nach Word wandeln und dann wiederr zurück! nur hab ich nichts passendes gefunden...

volker
31.03.2007, 15:55
wieso nach links?
in den rechten 4 bits stehen doch die diag-bits.
also 4 nach rechts.

L PEW 256
SRW 4
T MW 256

dkeipp
31.03.2007, 16:48
Gerade weil die Diag bits rechts sind will ich ja nach links schieben! (glaub mir es funktioniert!)

Allerdings funktioniert das nur weil ich (wahrscheinlich) ziemlich viel "gemoved" hab :)

Unten könnt ihr euch mal meine Lösung ansehn, aber bitte: Ich hab mir den Ganzen Step7 und SPS krempel selbst beigebracht, zereisst mich bitte nicht wenn man es auch einfacher hätte machen können, seit wenigstens ein bisschen stolz auf mich :cool:




FUNCTION "UNSCALE_winbloc" : VOID
TITLE =
VERSION : 0.1

VAR_INPUT
IN : REAL ;
High_Lim : REAL ;
Low_Lim : REAL ;
END_VAR
VAR_OUTPUT
OUT : INT ;
END_VAR
VAR_TEMP
Range : REAL ;
RVal : REAL ;
DIVal : DINT ;
WVal1 : WORD ;
Rangex : REAL ;
WVal2 : WORD ;
END_VAR
BEGIN
NETWORK
TITLE =
L #High_Lim;
L #Low_Lim;
-R ;
T #Range;
NOP 0;
NETWORK
TITLE =
L 4.095000e+003;
L #Range;
/R ;
T #Rangex;
NOP 0;
NETWORK
TITLE =
L #Rangex;
L #IN;
*R ;
T #RVal;
NOP 0;
NETWORK
TITLE =
L #RVal;
RND+ ;
T #DIVal;
NOP 0;
NETWORK
TITLE =
L #DIVal;
T #WVal1;
NOP 0;
NETWORK
TITLE =
L W#16#4;
L #WVal1;
SLW ;
T #WVal2;
NOP 0;
NETWORK
TITLE =
L #WVal2;
T #OUT;
NOP 0;
END_FUNCTION

volker
31.03.2007, 17:38
ohne das ich mir jetzt deinen code ansehen.

wenn die diagbits rechts stehen und die datenbits links daneben, dann muss man die diagbits rechts rausschieben um die datenbits rechtsbüdig im akku zu haben.
das ist nun einmal so. alles andere ist murks

dkeipp
31.03.2007, 18:01
ähhm ja. Du hast natürlich recht... aber doch nicht :D

Ich will ja die Ausgänge "unscalen" da aber in den ersten 4bit irgendwas übertragen wird nur kein wert, muss ich ja nach links schieben damit bit 4 bis 15 mit dem wert von bit 0 bis 11 beschrieben werden. die Diag bits erhalten dann 0 oder 1 jenachdem was mal im bit 0 stand.

Wenn ich nu analoge Eingänge verarbeiten will, muss ich nach rechts schieben sodass die diagbits wegfallen. Das hattest du gemeint oder?

Larry Laffer
01.04.2007, 18:55
Hallo,
du könntest natürlich auch die unteren 4 Bits einfach ausmaskieren und anschliesend durch 16 teilen. So bleibt dir dann auch das Vorzeichen erhalten.

L IN
L w#16#FFF0
UW
L 16
/I
T Zwischenwert

zum Beispiel ...

PeterEF
02.04.2007, 10:32
Hallo,
du könntest natürlich auch die unteren 4 Bits einfach ausmaskieren und anschliesend durch 16 teilen. So bleibt dir dann auch das Vorzeichen erhalten.

L IN
L w#16#FFF0
UW
L 16
/I
T Zwischenwert

zum Beispiel ...

Leider falsch.
Der Kollege möchte einen Wert für die AUSGABE skalieren. Darum muß er ihn vier Bit nach links schieben. Dafür stehen ihm folgende Möglichkeiten zur Verfügung:
-MULTIPLIKATION mit 16 (2 * 2 * 2 * 2 = 16)
-SLW 4 (mehr dazu in der AWL-Hilfe) - bei diesem Befehl spielt es auch keine Rolle, ob der Inhalt als Integer oder sonstwas interpretiert wird, nur das Bitmuster wird geschoben.