PEW; PAW indirekt Adressieren

casius

Well-known member
Beiträge
52
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
:?:
Hallo Männer von Flanke,
ich habe da ein kleines Problem und weis nicht wie ich es lösen soll.
Aber erst mal von Anfang an.
Ich möchte einen Standartbaustein (FB) schreiben der mir das Leben mit einem FU leichter macht. Der FU liefert drei Zustandswörter und benötigt drei Steuerwörter. Die Adressen könnten also z.B. PEW256; PEW258; PEW260; PAW256; PAW258; PAW260 lauten.
In der Deklaration vom FB möchte ich aber nur die Basisadresse eingeben also z.B. 256. Den Rest soll sich der FB dann selber zusammenreimen.
Die ganze Sache muss so möglich sein, ich habe so etwas schon mal bei anderen Bausteinen gesehen. Die Basisadresse wird dabei als INT hinterlegt, wie das dann aber weiter geht weiß ich nicht, der Baustein war geschützt.
Also, weiß jemand wie es weitergeht?
 

volker

Supermoderator
Teammitglied
Beiträge
5.468
Punkte Reaktionen
935
ich habe mir da letztens einen standartbaustein für einen mm430 geschrieben
parametriert auf typ ppo1, also 2 pzd, 4 pkw. es reicht die anfangsadresse zu wissen. die übertragung von/an den fu erfolgt über sfc 14/15. dort gibt man nur die anfangsadresse an und die länge in bytes.

die von mir geschriebenen standartbausteine für den mm4xx findest du auf meiner hp (sind allerdings auch geschützt).

was für einen fu hast du?

einen auszug aus dem baustein kann ich erst morgen posten da ich hier z.Z. kein s7 zur hand habe
 

Martin Glarner

Well-known member
Beiträge
239
Punkte Reaktionen
25
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo casius
Die Aufgabe lässt sich gut mit Registerindirekter Adressierung lösen.


Code:
      L     #Basisadresse               //z.B. INT-Wert 256
      SLD   3
      LAR1                              //Akku1 mit Byteadresse in AR1 laden (P#256.0)

      L     PEW [AR1,P#0.0]             //PEW256
      L     PEW [AR1,P#2.0]             //PEW258
      L     PEW [AR1,P#4.0]             //PEW260

      T     PAW [AR1,P#0.0]             //PAW256
      T     PAW [AR1,P#2.0]             //PAW258
      T     PAW [AR1,P#4.0]             //PAW260
 

volker

Supermoderator
Teammitglied
Beiträge
5.468
Punkte Reaktionen
935
volker schrieb:
einen auszug aus dem baustein kann ich erst morgen posten da ich hier z.Z. kein s7 zur hand habe

Code:
baustein pzd:
dekl:
in:PZD_Addr	INT		PZD Anfangsadresse in Dez
temp:PZD_Addr_temp	WORD		PZD Anfangsadresse in Hex	

      L     #PZD_Addr
      T     #PZD_Addr_temp

//MM4 PZD lesen/schreiben
//Zustandswort lesen
      CALL  SFC   14
       LADDR  :=#PZD_Addr_temp
       RET_VAL:=#Ret_Val_SFC14
       RECORD :=P#DBX 22.0 BYTE 4

//Steuerwort schreiben
      CALL  SFC   15
       LADDR  :=#PZD_Addr_temp
       RECORD :=P#DBX 8.0 BYTE 4
       RET_VAL:=#Ret_Val_SFC15
//-------------------------------------------------------
baustein pkw:
dekl:
in: PKW_Addr	INT		PKW Anfangsadresse in Dez
temp:PKW_Addr_temp	WORD		PKW Anfangsadresse in Hex	

	
      L     #PKW_Addr
      T     #PKW_Addr_temp


//MM4 PKW lesen / schreiben
//lesen
      CALL  SFC   14
       LADDR  :=#PKW_Addr_temp
       RET_VAL:=#Ret_Val_SFC14
       RECORD :=P#DBX 12.0 BYTE 8


//schreiben
      CALL  SFC   15
       LADDR  :=#PKW_Addr_temp
       RECORD :=P#DBX 0.0 BYTE 8
       RET_VAL:=#Ret_Val_SFC15

ich hoffe das hilft dir weiter
 
OP
C

casius

Well-known member
Beiträge
52
Punkte Reaktionen
0
:D
Danke für eure Hilfe, ohne euch währe ich noch lange nicht auf den Trichter gekommen, dass man das Integer einfach nur verschieben muss damit es ein Pointer wird.
Die Idee mit den SFC’s ist auch nicht schlecht, ich habe mich aber dagegen entschieden damit der Baustein möglichst ohne weitere Bausteine auskommt, trotzdem noch mal danke.
 

magus111

Well-known member
Beiträge
123
Punkte Reaktionen
2
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo Forum

ich weiß der Post ist ALT aber das ist mein Problem und wurde hir auch schon gelößt.
Das problem was ich damit habe ist das ich das so nicht eingeben kann weil ich nicht weiß wie :(
step 7 sagt mir
den teil in rot

L PEW [AR1,P#0.0] //PEW256
L PEW [AR1,P#2.0] //PEW258
L PEW [AR1,P#4.0] //PEW260

T PAW [AR1,P#0.0] //PAW256
T PAW [AR1,P#2.0] //PAW258
T PAW [AR1,P#4.0] //PAW260



mit der Meldung Sytaxfehler bei Buchstabe ''&'' nach '' ''

was muss ich da machen.

möchte einen FU auslesen mit 5.5 und das währe mein Lösungsansatz

Danke für die Hilfe
 
Oben