FC106 Problem mit WinBloc (Suche--> kein erfolg!)

dkeipp

Level-1
Beiträge
59
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    55,7 KB · Aufrufe: 32
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;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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...
 
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
 
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:

Code:
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
ä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?
 
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 ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
Zurück
Oben