daten über PN senden und empfangen

Servernexus

Level-1
Beiträge
260
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Servus,
und das nächste Problem. Ich soll Daten zu einem Leitrechner senden und von diesem Empfangen. Als Daten sollen vornehmlich Integer aus Datenbausteinen der SPU übergeben werden. Kann ich von der Schnittstelle meiner 315-2DP/PN direkt Daten über Ethernet austauschen? Wenn ja, weis jemand Beispiele oder Beschreibungen dafür?
Danke
 
Servus,
und das nächste Problem. Ich soll Daten zu einem Leitrechner senden und von diesem Empfangen.

Ja man kann über die PN schnittstelle direkt daten austauschen. Auf der CPU selber ist dazu keine Projektierung nötig. Der Leitrechner muss einfach den S7 Treiber anbieten. Die Daten werden also aktiv vom Rechner abgeholt und in die CPU geschrieben.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du kannst auch eine Send/Receive-Verbindung zum Leitrechner aufbauen. Hätte den Vorteil dass nur was gesendet wird wenn´s Not tut.

Ich bevorzuge Ereignisgesteuertes Senden gegenüber dem zyklischen Pollen von allen möglichen Variablen.

Aber auf welche Kommunikation du dich einschießen willst hängt maßgeblich von deinem Kommunikationsparter - also dem Leitrechner - ab. Frag mal den Erfinder des selben wie er es handhaben möchte.
 
Erstmal Danke,
icg habe im Forum auch nen Link gefunden der mir sehr weiter geholfen hat.
Ich habe jetzt die entsprechenden Bausteine in mein Programm integriert.
Muß ich nun, ich habe 5 Datenbausteine zu übertragen, jeden zuerst in einen DB schaufeln oder kann ich den Aufruf zum Senden öfters aufrufen und wie viele Bytes kann ich insgesamt übertragen?
Wie sieht das ganze aus, wenn die Telegramme unterschiedliche Längen haben können?
Auf der Leitrechnerseite wird der Partner schon wissen, was er zu tun hat.
 
Ich mach das normal so:
In den FAQ ist da ein beispiel wie man das Adressregister bearbeitet. Aber so wie unten ist schonmal funktionell.

Code:
      L     P##Send           //Temp. Variable vom Typ Any
      LAR1  

      L     W#16#1002                 // Typ Byte
      T     W [AR1,P#0.0]

      L     #AnzBytes                   // Anzahl der Bytes
      T     W [AR1,P#2.0]

      L     #QuellDB                    // Quell-DB-Nummer
      T     W [AR1,P#4.0]

      L     #AbByte                     // Byteadresse 
      SLD   3
      OD    DW#16#84000000
      T     D [AR1,P#6.0]


      CALL  "AG_SEND"
       ACT   :=#Start
       ID    :=1
       LADDR :=W#16#160
       SEND  :=#Send
       LEN   :=#AnzBytes
       DONE  :=#Done
       ERROR :=#Error
       STATUS:=#Status

Ich lade dann im Programm zum Start ein Telegrammindex z.B. 1
Wenn Telegrammindex 1 dann lade ich in AnzByte/AbByte/QuellDB die entsprechenden werte und starte mit #Start das Telegramm.
Sobald Done oder Error auf 1 Wechselt incrementiere ich Telegrammindex um 1 und lade entsprechend Telegramm 2 das Adressregister und starte wieder das Telegramm mit den neuen Werten.

Bei Error habe ich ne Verzögerung drin.

Du kannst natürlich auch den Status anstatt Done und Error auswerten und entsprechend verfahren.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich lade dann im Programm zum Start ein Telegrammindex z.B. 1
Wenn Telegrammindex 1 dann lade ich in AnzByte/AbByte/QuellDB die entsprechenden werte und starte mit #Start das Telegramm.
Sobald Done oder Error auf 1 Wechselt incrementiere ich Telegrammindex um 1 und lade entsprechend Telegramm 2 das Adressregister und starte wieder das Telegramm mit den neuen Werten.


mfG René[/QUOTE]

Gibts da auch nen AWL code? Bin in AWL leider noch nicht sehr fit!
Oder finde ich sowas im Forum?
Danke
 
Funktioniert das Ganze auch mit den geschützten Komunikationsbausteinen FB63- 66 von Siemens?
O Gott: Fragen über Fragen!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich mach das normal so:
In den FAQ ist da ein beispiel wie man das Adressregister bearbeitet. Aber so wie unten ist schonmal funktionell.

Code:
      L     P##Send           //Temp. Variable vom Typ Any
      LAR1  
 
      L     W#16#1002                 // Typ Byte
      T     W [AR1,P#0.0]
 
     mfG René[/QUOTE]
Was beduetet die Zahl bei //Typ Byte?
Ich hoffe ich gehe nicht auf die Nerven, die kommen mir schön langsam abhanden.
 
Ok schön langsam kappier ich die Geschichte, nur mit dem Telegrammindex habe ich Probleme, wie ich das in AWL ins Programm einbringe.
 
Ich muß 5 Datenbausteine nach einander an den Leitrechner übergeben.

Bei meinem Beispiel siehst du ja wie der DB ausgewählt wird.

Also kopierst du den ersten DB (natürlich nicht den DB sondern die Adresse des jenigen DB) ins Adressregister wie besprochen.
Setzt das ACT Bit.
Wenn Done kommt setzt du das Act bit zurück und kopierst den nächsten DB ins adressregister (natürlich nicht den DB sondern die Adresse des jenigen DB)

Das heisst für jedes Telegramm baust du das Adressregister wie in meinem Post auf. Im Link von Thomas steht wie das geht.

du musst natürlich sorgen das jeweils nur ein Adressregisteraufbau pro Telegramm ausgeführt wird. Der rest wird übersprungen. Das machst du am besten mit einem wort das du incrementierst und je nach dessen inhalt überspringst du das Adressregisterzusammenstellen oder führst es aus. und mit jedem ausführen des sendeauftrag zählst du den incrementierten Wert hoch. so das der nächste Adressaufbau ausgeführt wird.

mfG René
 
Bei meinem Beispiel siehst du ja wie der DB ausgewählt wird.

Also kopierst du den ersten DB (natürlich nicht den DB sondern die Adresse des jenigen DB) ins Adressregister wie besprochen.
Setzt das ACT Bit.
Wenn Done kommt setzt du das Act bit zurück und kopierst den nächsten DB ins adressregister (natürlich nicht den DB sondern die Adresse des jenigen DB)

Das heisst für jedes Telegramm baust du das Adressregister wie in meinem Post auf. Im Link von Thomas steht wie das geht.

du musst natürlich sorgen das jeweils nur ein Adressregisteraufbau pro Telegramm ausgeführt wird. Der rest wird übersprungen. Das machst du am besten mit einem wort das du incrementierst und je nach dessen inhalt überspringst du das Adressregisterzusammenstellen oder führst es aus. und mit jedem ausführen des sendeauftrag zählst du den incrementierten Wert hoch. so das der nächste Adressaufbau ausgeführt wird.

mfG René

Erstmal Danke, ich werds versuchen. AWL macht mich verrückt. Ich stoße da in Welten vor mit denen ich noch nie was zu tun hatte. Und was meinst Du mit ACT Bit? Ist das im FB 63 T_SEND der REQ Eingang?
 
L #AbByte // Byteadresse
SLD 3
OD DW#16#84000000
T D [AR1,P#6.0]



[/CODE]


Nur noch 1 Frage dann habt Ihr Ruhe vor mir. Weshalb brauche ich die Abfrage OD DW#xxxxxxxxxxx und wie kann ich mir vernünftig anzeigen lassen was denn nun in Send wirklich drinnen steht. Helft einem Unwissenden noch ein letztes mal.
Alles weitere muß ich dann in der Testphase rausbekommen wenn ich eine echte CPU bekomme. Momentan habe ich nur die Simulation von Step 7.
Allen Danke
 
Nur noch 1 Frage dann habt Ihr Ruhe vor mir. Weshalb brauche ich die Abfrage OD DW#xxxxxxxxxxx und wie kann ich mir vernünftig anzeigen lassen was denn nun in Send wirklich drinnen steht.[/QUOTE]

Das ist der Speicherbereich. 84 steht für Datenbaustein.
Wenn du z.B. in einen Instanzdb reinschreiben willst (Böse ;)) Müsste da 85 drin stehen

Du könntest die Anfangsbyte adresse auch getrennt in einem Wort schreiben und den Speicherbereich in einem Wort.

Oder du veroderst alles und schreibst es in ein Doppelwort wie hier.

mfG René
 
Zurück
Oben