Step 7 PEB in DB schreiben

Timmek

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Forumgemeinde,

Ich beabsichtige 38 Char-Variablen aus einem Busteilnehmer in einen DB zu schreiben.
Nach meinen bisherigen Suchergebnissen bin ich zu dem Entschluss gekommen das es so in die Richtung SFC14 oder SFC20 gehen wird. Allerdings habe ich so meine Schwierigkeiten die Daten die aus dem Slave kommen zu verarbeiten. Ich nutze ein MA204I Gateway der Marke Leuze mit einem Handscanner. Die CPU ist eine 315 - 2DP.

Also ich kann mir über eine Variablen-Tabelle auch sauber die Werte der Char Variablen anzeigen lasssen, indem ich PEB0 bis PEB37 in die Tabelle eintrage. Der Knackpunkt ist, das mir jeglicher Ansatz fehlt wie ich diese Werte jetzt in der CPU weiterverarbeite.

Schon mal Danke im vorraus,

mfg Timmek
 
SFC14 geht nur, wenn Du eine Konsistenz von 3 oder >4 Byte eingestellt hast.

Du könntest jedes Byte kopieren:
Code:
L PEBx
T DB204.DBB0
L PEBx+1
T DB204.DBB1
...
L PEBx+37
T DB204.DBB37
eventuell kannst Du für die L/T auch Doppelwortzugriffe benutzen.
Wenn die E-Adressen des Slave im Prozessabbild liegen, dann solltest Du besser nicht auf die PEB.. zugreifen, sondern nur auf die EB.. dann funktioniert auch Doppelwortzugriff L ED.. / T DB204.DBD..

SFC20 kann nicht von Peripherie kopieren, sondern nur vom Prozessabbild. Doch anscheinend liegen Deine Adressen schon im Prozessabbild.
Code:
      CALL  "BLKMOV"
       SRCBLK :=P#E 0.0 BYTE 38
       RET_VAL:=#tempInt
       DSTBLK :=P#DB204.DBX 0.0 BYTE 38

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
OK, entschuldige bitte wenn ich ein wenig "dumme" Fragen stelle.

Den Quelltext den du mir hier vorschlägst ist AWL richtig?
Wenn das so ist und ich jedes Byte mit einem einzelnen Befehl übertrage dann würde es doch auch sicher Sinn machen einen seperaten FB zu schreiben oder?

Dazu kommt mir dann auch schon die nächste Frage in den Sinn:

Inwiefern ist es möglich schleifen in AWL zu schreiben oder würde SCL da dann schon mehr sinn machen?
 
Das geht schon, ist aber nicht ganz einfach. Belies dich mal zum Thema indirekte Adressierung und dem Datentyp ANY.

Ich würde auch sagen, dass deine Bytes schon im Prozessabbild sind. Also: BLOCKMOVE, wie vorgeschlagen, finde ich am besten.
 
Ja, das ist AWL.
Falls Du Schleifen programmieren willst, dann schau in der AWL-Hilfe unter indirekte Adressierung und die Hilfe zum LOOP-Befehl. Die Adressberechnung ist aber für Anfänger sehr verwirrend.

Wenn Du SCL hast, dann macht es tatsächlich mehr Sinn für Schleifen SCL zu verwenden:
Code:
FOR i := 0 TO 37 DO
  DB204.DB[i] := EB[i] ; //EB0..EB37 nach DB204.DBB0..DBB37 kopieren
END_FOR;

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Harald, jetzt weiß ich endlich was AWL ist.

Deine Geduld ist mehr als bewundernswert.
Ohne Hirn wird gefragt und du verstehst es und kannst helfen.
Respekt, ich ziehe meinen Hut bzw Mütze vor dir.


bike
 
Zurück
Oben