124 Byte von DB an Ausgang Schreiben

chickmc

Level-1
Beiträge
18
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ich habe das ganze netz schon zu meinem Problem durchsucht aber keine passende Lösung gefunden bzw. verstanden.

Folgender Quellcode funktioniert bei mir aber gibt es keine einfacherere lösung?


Code:
 [FONT=Verdana]
      U     "m_daten"
      SPBNB _01a
      L     "DB_Borries".Texttelegramm.x_pos[1]       (DB80.DBB104)
      [/FONT][FONT=Verdana]T     PAB  260[/FONT][FONT=Verdana]
      [/FONT][FONT=Verdana]L     "DB_Borries".Texttelegramm.x_pos[2]       [/FONT][FONT=Verdana](DB80.DBB105)[/FONT]
[FONT=Verdana]       [/FONT][FONT=Verdana]T     PAB  261       
      [/FONT][FONT=Verdana]L     "DB_Borries".Texttelegramm.x_pos[3]       
      T     PAB  262
      L     "DB_Borries".Texttelegramm.x_pos[4]
      T     PAB  263
      L     "DB_Borries".Texttelegramm.y_pos[1]
      T     PAB  264
      L     "DB_Borries".Texttelegramm.y_pos[2]
      T     PAB  265
      L     "DB_Borries".Texttelegramm.y_pos[3]
      T     PAB  266
      L     "DB_Borries".Texttelegramm.y_pos[4]
      T     PAB  267
      L     "DB_Borries".Texttelegramm.abs_rel_koord[1]
      T     PAB  268
      L     "DB_Borries".Texttelegramm.abs_rel_koord[2]
      T     PAB  269
      L     "DB_Borries".Texttelegramm.mark_richtung[1]
      T     PAB  270
      L     "DB_Borries".Texttelegramm.mark_richtung[2]
      T     PAB  271
      L     "DB_Borries".Texttelegramm.Schrift_breite[1]
      T     PAB  272
      L     "DB_Borries".Texttelegramm.Schrift_breite[2]
      T     PAB  273
      L     "DB_Borries".Texttelegramm.Schrift_breite[3]
      T     PAB  274
      L     "DB_Borries".Texttelegramm.Schrift_breite[4]
      T     PAB  275
      L     "DB_Borries".Texttelegramm.Schrift_hoehe[1]
      T     PAB  276
      L     "DB_Borries".Texttelegramm.Schrift_hoehe[2]
      T     PAB  277
      L     "DB_Borries".Texttelegramm.Schrift_hoehe[3]
      T     PAB  278
      L     "DB_Borries".Texttelegramm.Schrift_hoehe[4]
      T     PAB  279
      L     "DB_Borries".Texttelegramm.schriftwinkel[1]
      T     PAB  280
      L     "DB_Borries".Texttelegramm.schriftwinkel[2]
      T     PAB  281
      L     "DB_Borries".Texttelegramm.schriftwinkel[3]
      T     PAB  282
      L     "DB_Borries".Texttelegramm.schriftwinkel[4]
      T     PAB  283
      L     "DB_Borries".Texttelegramm.text[1]
      T     PAB  284
      L     "DB_Borries".Texttelegramm.text[2]
      T     PAB  285
      L     "DB_Borries".Texttelegramm.text[3]
      T     PAB  286
      L     "DB_Borries".Texttelegramm.text[4]
      T     PAB  287
      L     "DB_Borries".Texttelegramm.text[5]
      T     PAB  288
      L     "DB_Borries".Texttelegramm.text[6]
      T     PAB  289
      L     "DB_Borries".Texttelegramm.text[7]
      T     PAB  290
      L     "DB_Borries".Texttelegramm.text[8]
      T     PAB  291
      L     "DB_Borries".Texttelegramm.text[9]
      T     PAB  292
      .
      .
      .
      L     "DB_Borries".Texttelegramm.text[80]
      T     PAB  293
_01a: NOP   0
[/FONT]

Die Ausgänge gehen zu einem Borries Markiercontroller. In der Hardwareconfig hat er 128 Byte Eingänge 32 Byte Eingänge (SPS 128 A /32 E) jeweils startend bei 256. Diese liegen außerhalb des PA.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ja der SFC20 ist hier angebracht:

CALL SFC 20
SRCBLK :=P#DB400.DBX0.0 BYTE 124 // hier dein DB eintragen
RET_VAL:=#Dummy
DSTBLK :=P#A 260.0 BYTE 124
NOP 0

So müsste es gehen.

Gruß
@Move
 
so sollte es auch gehen


Code:
// Adressregister sichern
      TAR1  #savear1
      TAR2  #savear2
 
Auf DB 80                              //DB öffnen
      L     104                         // Startadresse  DBB
      SLD 3   
      LAR1     
 
      L     260                         // Startadresse  PEB
      SLD   3
      LAR2  
 
      U m_daten
      FP Mxx
      SPBN next
 
      L     124                  // Schleife vorbelegen(Anzahl der Durchläufe)
next: T     #count              
      L     DBB [AR1,P#0.0]             
      T     PAB [AR2,P#0.0]             
 
      +AR1  P#1.0
      +AR2  P#1.0
 
      L     #count
      LOOP  next
// Adressregister rückschreiben
      LAR1  #savear1
      LAR2  #savear2
next: NOP 0
 
Zuletzt bearbeitet:
Danke für die schnell antwort.

Das mit dem Blkmov habe ich auch schon versucht aber die daten kommen nicht am Markiercontroller an.

Zur version in AWL
Was Soll ich mit "FP Mxx" machen?

und was ist #count für ein variablentyp?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
// Adressregister sichern
      TAR1  #savear1
      TAR2  #savear2
 
Auf DB 80                              //DB öffnen
      L     104                         // Startadresse  DBB
      SLD 3   
      LAR1     
 
      L     260                         // Startadresse  PEB
      SLD   3
      LAR2  
 
      U m_daten
      FP Mxx                         // Freier Merker z.B. 100.0
      SPBN [COLOR=Red]ENDE[/COLOR]
 
      L     124                  // Schleife vorbelegen(Anzahl der Durchläufe)
next: T     #count              
      L     DBB [AR1,P#0.0]             
      T     PAB [AR2,P#0.0]             
 
      +AR1  P#1.0
      +AR2  P#1.0
 
      L     #count
      LOOP  next
// Adressregister rückschreiben
      LAR1  #savear1
      LAR2  #savear2
[COLOR=Red]ENDE[/COLOR]: NOP 0
da muss ein freier merker rein zur Pulsbildung z.B. M100.0 oder M11.0

Der SFC20 geht nicht ,da dieser nich auf Ausgänge ausserhalb des PA schreibt.
 
Zuletzt bearbeitet:
Hallo,
du solltest den Vorschlag von Gerhard weiterverfolgen. Der SFC20 kann NICHT von der Perepherie lesen und auch nicht dahin schreiben. Prozessabbild hilft hier sehr wahrscheinlich nicht, da ich annehme, dass es sich um einen PB- oder PN-Slave handelt an den die Daten übergeben werden sollen.

In Gerhards Vorschlag ist Count in INT und alle nicht weiter spezifizierten Variablen (wie z.B. Mxxx) sollten von dir korrekt beschaltet werden - z.B. mit M100.0.
Der Merker M_Daten starten in dem Fall die Übertragung und der Mxx sdorgt dafür, dass du pro Trigger nur einmal Daten überträgst ...

Gruß
LL

Edit:
Jabba war da dann wohl "etwas" schneller ... :)
 
Kanner nicht, nur wenn die Sachen im prozessabbild liegen.

Mit der SFC 20 "BLKMOV" (block move) kopieren Sie den Inhalt eines Speicherbereiches (= Quellbereich) in einen anderen Speicherbereich (= Zielbereich).

Zulässige Quellbereiche sind:

· Teile von Datenbausteinen

· Merker

· Prozeßabbild der Eingänge

· Prozeßabbild der Ausgänge

Der Quellparameter kann auch in einem nicht ablaufrelevanten Datenbaustein im Ladespeicher liegen (DB, der mit dem Schlüsselwort UNLINKED compiliert wurde)!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Move:
über die Sinnfälligkeit dieser Maßnahme läßt sich in diesem (oder einem ähnlichen) Zusammenhang aber streiten ...
Du ermöglichst so eine höhere Basis-Zykluszeit des SPS-Programms zu Gunsten eines Programmiertricks, der nur alle paar tausend Zyklen mal greift ... :confused::rolleyes::confused::rolleyes:

Gruß
LL
 
Zurück
Oben