# Merkerbereich kopieren



## DiGo1969 (23 Oktober 2009)

Hallo,
ich möchte den kompletten Merkerbereich in Siemens SCL von M0.0 bis M256.7 nach M40000.0 bis M40256.7 kopieren. Wie kann ich den Merkeraufruf indirekt machen um eine Schleife zu programmieren, damit ich mir nicht die Finger wund schreiben muss?

Dirk


----------



## vierlagig (23 Oktober 2009)

SFC20

ist bezweifle aber, dass der merkerbereich 40000 - 40256 verfügbar ist


----------



## DiGo1969 (23 Oktober 2009)

*ja gibt es*

den hohen Merkerbereich gibt es.

Und zwar setzte ich eine sogenannte X7 CPU von INAT ein. Auf dieser CPU kann man ein S5 und ein S7 Programm gleichzeitig laufen lassen. Um nun von der S7-Seite auf die Merker der S5 zugreifen zu können muss ich einen Offset von 40000 eingeben.
Bevor die Frage kommt wozu ich da mit S5 und S7 was machen will: Diese CPU ist als Zwischenschritt bei der Ablösung einer S5 nach S7. Bei dieser CPU kann ich Schritt für Schritt einen PB, FB... nach dem anderen dürch FC, FB... ersetzten. Sollte dann das ganze Programm auf der S7-Seite laufen tausche ich die S5 durch eine S7 aus und erspare mir die Zeit einer IBN, denn ich arbeite direkt an der laufenden Anlage.

Dirk


----------



## Gebs (23 Oktober 2009)

Hallo Dirk,

Du bist Dir schon im klaren, dass Du damit alle Merker im S5-Teil überschreibst?

Grüße
Gebs


----------



## DiGo1969 (23 Oktober 2009)

darum geht es zwar nicht, aber ich glaube dass das so funktionieren müsste:

OB1:
- kopieren der Merker S7 nach S5
- CALL S5-Programm
- kopieren der Merker S5 nach S7
- CALL S7-Programm


Dirk


----------



## Gebs (23 Oktober 2009)

Ja, das sollte so funktionieren, aber d.h. Du musst beim Ersetzen des S5-Codes sehr genau die Aufrufstruktur beachten.
Und wie machst Du das mit der Kommunikation? Vom S7-Teil aus kannst Du die S5-CP's nämlich nicht ansprechen!

Grüße
Gebs

[edit]
P.S.: Wie hast Du das denn mit den Zählern, Timern und den DB's vor?
[/edit]


----------



## DiGo1969 (23 Oktober 2009)

Kommunikation ist kein Problem, denn die läuft schon direkt aus der CPU. Da gibt eine TCPIP-Schnittstelle, über die ich mit Siemens H1 ran komme.

Über die Timer, Zähler... mach ich mir keine Gedanken, denn die arbeiten ja auf jeder Seite für sich.

Über die DB's habe ich mir noch keine Gedanken gemacht. Vielleicht genau so wie mit den Merkern. Glücklicher weise kann in SCL dies sehr einfach indirekt und in schleifen gemacht werden.

Dirk


----------



## bike (23 Oktober 2009)

DiGo1969 schrieb:


> Bevor die Frage kommt wozu ich da mit S5 und S7 was machen will: Diese CPU ist als Zwischenschritt bei der Ablösung einer S5 nach S7. Bei dieser CPU kann ich Schritt für Schritt einen PB, FB... nach dem anderen dürch FC, FB... ersetzten.
> Dirk


Das ist echt mutig.
Zwei SPS die sich ein Programm teilen.
Auf eine solche Idee bin ich in 30 Jahren PLC noch nicht gekommen.
Gib bitte Bescheid, ob es geklappt hat und mit welchen Problemen du da gekämpfst hast.


bike


----------



## Gebs (23 Oktober 2009)

@Dirk:
Bei den DB's wirds ein wenig problematisch, wenn Du auf die Zykluszeit 
achten muss.

@bike:
Ich habe schon ein paar Steuerungen mit der X5/X7-CPU umgerüstet. Wenn 
man sich der Unterschiede von S5 und S7 bewusst ist (Flankenmerker bei Timern
und Zählern etc.), ist es kein Problem. Die unterschiedliche Adressierung handelt die CPU.
Alles in allem hab' ich mit dem Teil überwiegend gute Erfahrungen gemacht.
Es gab' hier und da mal Problemchen aber die konnten wir dann zusammen mit
dem Entwickler (total super, er war sogar vor Ort) lösen.

Grüße
Gebs


----------



## bike (23 Oktober 2009)

Gut, wenn das so einfach funktioniert.
Dass INAT ihr Geschäft kennen weiss ich aus eigener Erfahrung, als wir deren kompinierte TCP/IP und H1 Karte eingesetzt haben. Da waren auch Geburtsfehler zunächst, wurden aber alle behoben.

Also wenn ich ein Retrofit machen darf/muss, dann verwende ich eine PLC.
Ganz erschliesst mir die Verwendung von den kompinierten PLC nicht ganz.
Das kann aber auch meiner Sichtweise auf diese Steuerungen liegen.


bike


----------



## Blockmove (23 Oktober 2009)

Wie sind deine Erfahrung bezüglich der Kompatibilität der Inat CPU zu S5 und zu S7?
Irgendwelche Probleme festgestellt?
Ich würde sie evtl. auch gerne mal bei einem der nächsten Retrofit-Projekte einsetzen.
Klappt es mit Profibus oder Profinet ohne Ärger?

Besten Dank!

Gruß
  Dieter


----------



## Thomas_v2.1 (23 Oktober 2009)

Ich frage mich gerade wie das bei einem Umbau mit der X5/X7 CPU läuft.

Wird später wenn das Programm fehlerfrei läuft die Hardware auch noch umgebaut? Also die CPU ist nur zur Inbetriebnahme?

Oder bleibt diese X5/X7 CPU im Rack sitzen. Dann hat man aber die ganzen alten S5-Karten drin -> keine Ersatzteile.
Mir erschließt sich nicht so direkt der Sinn des Ganzen. Gleiches gilt auch für die Profibus-Anschaltungen für S5-Racks. Da hat man auch noch die alte S5-Hardware.


----------



## sailor (23 Oktober 2009)

*Operation am offenen Herz*

Zum Thema S5 -> S7 hab ich folgendes schon gemacht: In WINCC eine AS511-Verbindung zur S5 und eine Ethernet-Verbindung zur S7.   In Abhängigkeit eines Bits (E, DBX,...) schreibt und liest die jeweilige CPU die Peripherie der anderen CPU oder bearbeitet das eigene Programm. WINCC tauscht über ein global Script die DB aus, in denen die Prozessabbilder stehen.  Diese Abfrage natürlich an erster Stelle des OB1. Natürlich müssen falls vorhanden Interrupts/Alarme z.B. OB85 beachtet werden und auch in Abhängigkeit des Bits (z.B.  U Bit - >BEB) bearbeitet werden. Hab da wirklich beachtliche Zeiten erreicht.
Extrem schnelle Sachen gehen nicht,klar.
Gruß
Sailor


----------



## Gebs (26 Oktober 2009)

@Dieter:


> Wie sind deine Erfahrung bezüglich der Kompatibilität der Inat CPU zu S5 und zu S7?
> Irgendwelche Probleme festgestellt?


Bezüglich der S7 habe ich bisher keine Probleme gehabt. Bei der S5 gabs es mal 
ein Problem mit der Kommunikation zu einem CP. Aber der Entwickler war sofort
bei mir vor Ort und hat das Problem gelöst und mir eine neue Firmware geschrieben.


> Klappt es mit Profibus oder Profinet ohne Ärger?


Profibus lief reibungslos. Mit Profinet hab' ich hier keine Erfahrung.

@Thomas:


> ch frage mich gerade wie das bei einem Umbau mit der X5/X7 CPU läuft.
> 
> Wird später wenn das Programm fehlerfrei läuft die Hardware auch noch umgebaut? Also die CPU ist nur zur Inbetriebnahme?
> 
> ...


Ich hab es bisher so gemacht:
1. Tausch der S5-CPU gegen eine INAT-CPU, läuft mit S5-Code
2. Nach und nach wird der S5-Code gegen S7-Code getauscht.
3. Ersetzen des S5-Zentralgerätes durch eine S7 mit IM 463-2
4. Ersetzen der S5-Peripherie (meist mit Adaptern um Verdrahtungsfehler zu vermeiden)

Grüße
Gebs


----------



## DiGo1969 (27 Oktober 2009)

Hi Leute,
da ja nun alle anderen Sachen geklärt und diskutiert wurden noch mal zurück zu meinem eigentlichen Problem: Merberbereich kopieren ist das möglich oder muss ich mir meine Finger wund schreiben?

Dirk


----------



## vierlagig (27 Oktober 2009)

die richtung war im ursprungpost noch nicht verständlich, deswegen SFC20 ... damit kannst du in der S7-welt große datenmengen sauber umkopieren ...

in S5 wirste wohl zur schleife greifen müssen und dazu noch indirekt adressieren ...


----------



## Gebs (27 Oktober 2009)

vierlagig schrieb:


> in S5 wirste wohl zur schleife greifen müssen und dazu noch indirekt adressieren ...



Nicht unbedingt. Wenns Zum Beispiel ne 948er CPU ist dann gehts mit TNW 255 in einem Rutsch.

Aber nicht so wie Dirk es bräuchte, denn bei der X5/X7 kann man nur von dem S7-Code auf die S5 zugreifen. 

Grüße
Gebs


----------



## DiGo1969 (27 Oktober 2009)

Hi,
wie die Richtung ist nicht verständlich???
Ich möchte in der S7 jedes Bit, Byte, Word oder ... in einem Befehl kopieren ohne mir die Finger wund zu schreiben. Im einfachsten Fall kann das so aussehen:

L MD 0
T MD 40000

L MD 4
T MD 40004

L MD 8
T MD 40008
usw.

oder in SCL

MD0:= MD40000;
MD4:= MD40004;
MD8:= MD40008;
usw.


Eine Möglichkeit in SCL wäre mir lieber...

Dirk


----------



## Gebs (27 Oktober 2009)

Hallo Dirk,

wie schon gesagt: SFC 20


```
CALL  "BLKMOV"
       SRCBLK :=P#M 0.0 BYTE 256
       RET_VAL:=#RetVal
       DSTBLK :=P#M 40000.0 BYTE 256
```
Grüße
Gebs


----------



## vierlagig (27 Oktober 2009)

Gebs schrieb:


> Hallo Dirk,
> 
> wie schon gesagt: SFC 20



die lösung aus beitrag nummer 2 
und wenn die X7 das nun nicht kann?
dann machste da ne schleife mit indirekter adressierung



```
*

      TAR1  #dAR1temp
      TAR2  #dAR2temp

      LAR1  P#0.0
      LAR2  P#40000.0

      L     64
next: T     #iLoopCount

      L     MD [AR1,P#0.0]
      T     MD [AR2,P#0.0]

      +AR1  P#4.0
      +AR2  P#4.0

      L     #iLoopCount
      LOOP  next

      LAR1  #dAR1temp
      LAR2  #dAR2temp
```

übrigens, wenn ich es nur mit AR1 versuche nimmt er die 40000 bei der transferanweisung nicht, ersetzt sie durch P#7232.0 ... hat das irgendwas zu bedeuten


----------



## Gebs (27 Oktober 2009)

vierlagig schrieb:


> und wenn die X7 das nun nicht kann?



Hab' leider gerade keine INAT hier. (Sind beide an einen Kunden ausgeliehen. 
Nächsten Fr. krieg ich sie zurück, dann kann ich's mal ausprobieren.)
Aber ich meine mich zu erinnern, dass es geht.

Grüße
Gebs


----------



## vierlagig (27 Oktober 2009)

aber er wollte ja SCL ... sorry


```
*

    FOR iLoopCounter := 0 TO 256 BY 4 DO
        MD[40000+iLoopCounter] := MD[iLoopCounter];
    END_FOR    ;
```


----------



## vierlagig (27 Oktober 2009)

so schön das auch ist, aber den AWL-code dazu kann man sich echt nicht geben:


```
*

      SET   
      SAVE  
      =     L      2.1
      L     0
      T     #iLoopCounter
A7d0: L     #iLoopCounter
      L     256
      <=I   
      SPBN  A7d1
      L     #iLoopCounter
      ITD   
      L     L#40000
      +D    
      T     LD     4
      L     L#0
      +D    
      L     L#8
      *D    
      L     #iLoopCounter
      ITD   
      TAK   
      T     LD     4
      TAK   
      L     L#0
      +D    
      L     L#8
      *D    
      LAR1  
      L     MD [AR1,P#0.0]
      LAR1  LD     4
      T     MD [AR1,P#0.0]
      L     #iLoopCounter
      L     4
      +I    
      T     #iLoopCounter
      SPA   A7d0
A7d1: CLR   
      U     L      2.1
      SAVE  
      BE
```


----------



## Perfektionist (27 Oktober 2009)

nachdem ich mal hier nachgelesen habe:
http://www.inat.de/index.php?215&backPID=215&tt_products=208
da frage ich mich, ob es da nicht zweierlei Möglichkeiten gibt, das Programm in der X5/X7 ablaufen zu lassen.

Vorgehensweise eins: die X5/X7 emuliert zwei CPUs. Querzugriff von der S7-Seite aus über den Adressoffset möglich.

Vorgehensweise zwei: S5/S7-Mischbetrieb: die CPU kann sowohl den S5-Code wie auch den S7-Code. S5-Code kann sukzessive durch S7-Code ersetzt werden. Einen getrennten Datenspeicherbereich für beide Code-Arten gibt es nicht.

Ohne das System zu kennen und auch nur eine einzige Seite Handbuch gelesen zu haben, würde ich gerne mal in Frage stellen, ob zwingend ein getrennter Merkerbereich für S5 und S7 seitens des INAT-Systems vorgegeben ist


----------



## Gebs (27 Oktober 2009)

vierlagig schrieb:


> übrigens, wenn ich es nur mit AR1 versuche nimmt er die 40000 bei der transferanweisung nicht, ersetzt sie durch P#7232.0 ... hat das irgendwas zu bedeuten



Bei der Addition zu einem Adressregister 
( [AR1, P#x.y] ist ja nicht viel anders als +AR1 P#x.y)
steht Dir nur ein Wort zur Verfügung. 3 Bits dieses Wortes sind für die Bitadresse 
und 1 Bit fürs Vorzeichen reserviert. Macht 12 Bits für die Byteadresse (4095).
Beim [AR1, P#x.y] steht Dir ein Bit mehr zur Verfügung weils hier kein Vorzeichen gibt.
Macht 8191 für die Byteadresse.

Grüße
Gebs


----------



## Gebs (27 Oktober 2009)

Perfektionist schrieb:


> Ohne das System zu kennen und auch nur eine einzige Seite Handbuch gelesen zu haben, würde ich gerne mal in Frage stellen, ob zwingend ein getrennter Merkerbereich für S5 und S7 seitens des INAT-Systems vorgegeben ist


Es gab mal eine Firmwareversion, bei der die Bereiche für Merker, Timer und Zähler nicht getrennt waren.

Grüße
Gebs


----------

