FU Daten auslesen und verarbeiten

Loadon

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

als vorabinformation

FU Danfoss FC300
S7 416

Folgendes Problem

Ich hole mir die Daten vom FU mit SFC 14 ab und sende mit SFC 15.
Ich möchte ein universelles Baustein programmieren welches je nach bedarf an FU Anzahl flexibel erweitert werden kann.

Ich benutze hirfür ein FC mit einem Globalem Array (Array soll das einzige anzupassende programm code sein in bezug auf FU anzahl)

Ich versuche mit inderekter Adressierung auf ein PED zuzugreifen. Syntax überprüfung bringt keine fehler. Im SPS simulator funzt es leider nicht.

folgender code FC9:

PHP:
 AUF   "FU  Danfoss"

// Lesen

CALL  "DPRD_DAT"                  
       LADDR  :=#FU_Adr_PE
       RET_VAL:=MW5000
       RECORD :=P#DBX 0.0 BYTE 8       

      L     #FU_Adr_PE
      LAR1  

      L     PED [ar1,p#8.0]               
      T     DBD   8                   


// Schreiben

 CALL  "DPWR_DAT"
       LADDR  :=#FU_Adr_PA
       RECORD :=P#DBX 30.0 BYTE 8
       RET_VAL:=MW5000

      L     #FU_Adr_PA
      LAR1  

      L     DBD [ar1,p#30.0]               
      T     PAD   1008                   

BE
Die logik zum hochrechner der DB Adressen und PED/PAD steht bereits. Einziges problem ist, dass ich über diese Art der Adressierung die PED nicht lesen kann.


Hat jemand eine idee? liegt es am Simulator? Habe leider keine echte SPS zur Verfügung.

Besten dank im voraus
 
Hallo,
der SFC14,15 benutzt einen ANY-Pointer zum Beschreiben des DB's.
Nach meiner Meinung mußt du mit dem Pointer den DB mit übergeben :
Code:
[FONT=Courier New][COLOR=#0000cc]CALL  [/COLOR][/FONT][FONT=Courier New][COLOR=#cc0000]"DPRD_DAT"                  
       [/COLOR][COLOR=#0000cc]LADDR  [/COLOR][COLOR=#006600]:=[/COLOR][/FONT][FONT=Courier New][COLOR=#ff9900]#FU_Adr_PE
       [/COLOR][COLOR=#0000cc]RET_VAL[/COLOR][COLOR=#006600]:=[/COLOR][/FONT][FONT=Courier New][COLOR=#0000cc]MW5000
       RECORD [/COLOR][COLOR=#006600]:=[/COLOR][COLOR=#0000cc]P[/COLOR][/FONT][COLOR=#ff9900][FONT=Courier New]#[SIZE=3][COLOR=red][B]DB100.[/B][/COLOR][/SIZE]DBX 0.0 BYTE 8       [/FONT]
[/COLOR]
Ich habe da jetzt mal DB100 eingesetzt, da ich nicht weiß, wo dein symbolischer "FU Danfoss" hinverweisst ...

Gruß
LL
 
...
dann habe ich dein Problem wohl noch nicht verstanden ... vielleicht versuchst du es noch einmal.

Im Übrigen ... Simulator ?
 
Da stellen sich viele Fragen.

Simulation von SFC14/15? Die Bausteine lesen/schreiben doch konsistent von/in einem DP-Slave. Wie simulierst du diesen?

Warum willst du danach nochmal auf die direkten Eingangsdoppelwörter zugreifen? Die Daten liegen doch dann im Datenbaustein schon bereit.

Willst du beliebig viele FUs anschließen und nur auf den PZD-Bereich zugreifen oder auch auf den PKW-Bereich?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da stellen sich viele Fragen.
Simulation von SFC14/15? Die Bausteine lesen/schreiben doch konsistent von/in einem DP-Slave. Wie simulierst du diesen?

Simulator starten und PED xyz mit werten füttern und dies dann auslesen.


Ich hab es nun ganz anders gelöst. Ich schreibe und lese direkt in den PEW adressen.

danke allen
 
PHP:
 AUF   "FU  Danfoss"

// Lesen

CALL  "DPRD_DAT"                  
       LADDR  :=#FU_Adr_PE
       RET_VAL:=MW5000
       RECORD :=P#DBX 0.0 BYTE 8       

      L     #FU_Adr_PE      // Das ist deine Startadresse in HEX von deinem FU
      SLD3                    //Das musst du dazu einfügen das es ein Pointer wird!!!!!
      LAR1  

      L     PED [ar1,p#8.0]               
      T     DBD   8                   


// Schreiben

 CALL  "DPWR_DAT"
       LADDR  :=#FU_Adr_PA
       RECORD :=P#DBX 30.0 BYTE 8
       RET_VAL:=MW5000

      L     #FU_Adr_PA
      LAR1  

      L     DBD [ar1,p#30.0]               
      T     PAD   1008                   

BE

Hallo!

Siehe mein Korrektur in deinem Programm.
Und schau mal in die FAQ da steht schon sehr viel über Pointer drinnen!

Aber sag mal warum wills du das PED lesen? Du lest ja sowieso alle Daten mit der SFC 14?
Und bei record gehört ein Anypointer ran!
siehe vorhergehende Beiträge

godi
 
Zuletzt bearbeitet:
ich hatte in einem der Danfoss Handbücher gelesen das genau diese beiden datenbereiche manuell geladen werden müssen. Ich kann es aber nicht wieder finden...

ich benutze ein Array um die Daten der FU's abzulegen. ich habe 30 FU's in der Anlage und es erschien mir als der einfachste weg den DB aufzubauen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich hatte in einem der Danfoss Handbücher gelesen das genau diese beiden datenbereiche manuell geladen werden müssen. Ich kann es aber nicht wieder finden...

ich benutze ein Array um die Daten der FU's abzulegen. ich habe 30 FU's in der Anlage und es erschien mir als der einfachste weg den DB aufzubauen.

Warum legst du dir nicht pro Motor einen UDT an?
In den UDT kannst du dir einen Kopfbereich machen wo Statische Daten drinnstehen wie die Basisadresse und dann einen Bereich mit Eingang und einen mit Ausgang. Den UDT rufst du dir 30 mal in einem DB auf und dann hast du deine ganzen Daten von den Fu's schön gegliedert gesammelt.
 
Zurück
Oben