Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: 2 Mal S7-300 / DB-Daten über MPI austauschen

  1. #1
    Registriert seit
    01.01.2009
    Ort
    Niedersachsen
    Beiträge
    813
    Danke
    180
    Erhielt 79 Danke für 75 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich möchte den Bereich DB21.DBD0 bis DBD40 von der einen CPU in die andere CPU schreiben und den Bereich DB21.DBD0 bis DBD40 von der anderen CPU in die eine CPU lesen (ich weiß, ist nicht schön den selben DB für lesen und schreiben zu verwenden).

    Ich habe schon die Suchfunktion bemüht und bin auf FB14 und FB15 gestoßen; leider finde ich diese weder in der Hilfe, noch in der Bibliothek.

    Vieleicht kann mir jemand weiterhelfen, auf welche Art ich die Kommunikation über MPI aufbauen kann.
    Aus der Hilfe bin ich bisher nicht schlau geworden.
    Es wäre ideal, wenn der Datenaustausch Zyklisch möglich wäre.

    Hier die verwendete Hardware:

    Die eine CPU: 6ES7 313-1AD03-0AB0 / V1.1 (ohne Speicherkarte)

    Die andere CPU: 6ES7 313-1AD00-0AB0 (ohne Speicherkarte)

    MPI-Kabel ca. 1m

    Ich hoffe ihr könnt mir weiterhelfen.

    Gruß Jan
    Zitieren Zitieren 2 Mal S7-300 / DB-Daten über MPI austauschen  

  2. #2
    Registriert seit
    12.05.2004
    Beiträge
    111
    Danke
    4
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Hallo Jan,

    schau bei http://support.automation.siemens.com mit Suchwort "FB14" oder "FB15" nach. Da sind X Beispiele zu GET/PUT zu finden.
    Die Bausteine findest Du in der Standard Library bei Communication Blocks.

    Gruß
    Andi F
    Geändert von Andi F (19.07.2009 um 00:46 Uhr)

  3. #3
    Registriert seit
    08.08.2008
    Ort
    Köln
    Beiträge
    355
    Danke
    57
    Erhielt 88 Danke für 69 Beiträge

    Standard

    Stichwort: Globaldatenkommunikation
    Glaube allerdings das sich dabei beide CPUs im gleichen Projekt befinden müssen.

  4. #4
    Registriert seit
    04.02.2007
    Beiträge
    2.544
    Danke
    167
    Erhielt 731 Danke für 528 Beiträge

    Standard

    Was meinst Du mit Zyklisch ?

    In jedem SPS Zyklus eine Übertragung geht nicht, da die Bausteine zum senden immer eine positive Flanke am Eingang benötigen.

    Von Globaldaten würde ich in diesem Fall ganz abraten, da der Datenaustausch quasi willkürlich durch das System ausgeführt wird , und das sehr langsam.


    Beispiel mit SFC65 X_Send
    Beschreibung
    Mit der SFC 65 "X_SEND" senden Sie Daten an einen außerhalb der eigenen S7-Station liegenden Kommunikationspartner.
    Der Datenempfang beim Kommunikationspartner erfolgt über die SFC 66 "X_RCV".
    Der Sendevorgang erfolgt nach Aufruf der SFC mit REQ=1.
    Sie müssen darauf achten, daß der über den Parameter SD definierte Sendebereich (auf der sendenden CPU) kleiner oder gleich dem über den Parameter RD definierten Empfangsbereich (beim Kommunikationspartner) ist. Falls SD vom Datentyp BOOL ist, muß auch RD vom Datentyp BOOL sein.

    Parameter Dekla-
    ration Daten-
    typ Speicherbereich Beschreibung
    REQ INPUT BOOL E, A, M, D, L, Konst. Steuerparameter "request to activate", s. . Gemeinsame Parameter der SFCs der S7-Basiskommunikation
    CONT INPUT BOOL E, A, M, D, L, Konst. Steuerparameter "continue", s. Gemeinsame Parameter der SFCs der S7-Basiskommunikation
    DEST_ID INPUT WORD E, A, M, D, L, Konst. Adressierungsparameter "destination ID". Er enthält die MPI-Adresse des Kommunikationspartners. Diese haben Sie mit STEP 7 projektiert.
    REQ_ID INPUT DWORD E, A, M, D, L, Konst. Auftragskennung. Sie dient zur Identifizierung der Daten beim Kommunikationspartner.
    SD INPUT ANY E, A, M, D Referenz auf den Sendebereich. Folgende Datentypen sind erlaubt: BOOL, BYTE, CHAR, WORD, INT, DWORD, DINT, REAL, DATE, TOD, TIME, S5TIME, DATE_AND_TIME sowie Arrays der genannten Datentypen mit Ausnahme von BOOL.
    Die maximale Größe des Sendebereichs ist 76 Bytes.
    RET_VAL OUTPUT INT E, A, M, D, L Tritt während der Bearbeitung der Funktion ein Fehler auf, enthält der Rückgabewert den zugehörigen Fehlercode.
    BUSY OUTPUT BOOL E, A, M, D, L BUSY=1: Der Sendevorgang ist noch nicht abgeschlossen.BUSY=0: Der Sendevorgang ist abgeschlossen, bzw. es ist kein Sendevorgang aktiv.
    Größter Anfängerfehler in diesem fall ist die MPI Adresse.
    Durch das verbinden müßen die MPI-Adressen meistens angepasst werden, da diese nicht mehrfach vorkommen dürfen.

    Maschine 1
    CPU MPI=2
    Panel MPI=1
    Maschine 2
    CPU MPI=2->MPI=4
    Panel MPI=1->MPI3

    Beispiel alle 2S 4Byte senden
    Code:
         U     "2s"
          FP    M     38.4
          =     L      0.0
          BLD   103
          U     M     38.1
          =     L      0.1
          BLD   103
          CALL  "X_SEND"
           REQ    :=L0.0
           CONT   :=L0.1
           DEST_ID:=W#16#2
           REQ_ID :=MD50
           SD     :=P#DB16.DBX0.0 BYTE 4
           RET_VAL:=MW48
           BUSY   :=M38.2
          NOP   0
    „Wenn du ein Problem hast, versuche es zu lösen. Kannst du es nicht lösen, dann mache kein Problem daraus.“
    Siddhartha Gautama

  5. #5
    Jan ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.01.2009
    Ort
    Niedersachsen
    Beiträge
    813
    Danke
    180
    Erhielt 79 Danke für 75 Beiträge

    Standard

    @ Alle: Danke für die Antworten.

    @ Andi F
    Laut dem Link brauche ich wohl zwei CP; die habe ich aber nicht.
    Oder geht es auch irgendwie ohne CP?


    @ Lebenslang
    Was meinst du mit Globakdatenkommunikation; bzw. wie baue ich diese Art der Kommunikation auf?

    @ jabba
    Mit Zyklisch meine ich: Datenübertragung in jedem Zyklus.
    Etwas langsamer wäre ausreichend (10 Mal/s).
    Ich muß Werte von eine CPU zur anderen schieben, diese Werte sollen sich ca. 10 Mal/s ändern (Positionen von Schrittmotoren).

    Ich habe es mit SFC65 und SFC66 versucht.
    SFC65 gibt 7000 hex aus.
    Hilfe:
    7000 - SFC 65 "X_SEND", SFC 67 "X_GET",
    SFC 68 "X_PUT"; SFC 69 "X_ABORT", SFC 72 "I_GET", SFC 73 "I_PUT" und SFC 74 "I_ABORT": Aufruf mit REQ=0 (Aufruf ohne Bearbeitung), BUSY hat den Wert 0, es ist keine Datenübertragung aktiv.
    SFC 66 "X_RCV": EN_DT=0/1 und NDA=0

    Wo liegt der Fehler?

    Software: SIMATIC MANAGER V5.2
    CPU: 1AD03 / FC2 (Anhang)

    Ich hoffe ihr könnt mir noch ein paar Tips geben.

    Gruß Jan
    Angehängte Dateien Angehängte Dateien

  6. #6
    Registriert seit
    02.08.2007
    Ort
    BW im Ostalbkreis
    Beiträge
    249
    Danke
    32
    Erhielt 27 Danke für 25 Beiträge

    Standard

    Hi,

    ich hab nur mal kurz in dein Projekt geschaut, aber was mir als erstes aufgefallen ist:

    1. Wieso legst du eine 'Null' an den EN-Eingang deiner Baustein. Die werden dann überhaupt nicht bearbeitet?
    2. Würd ich das mit einer kleinen Schrittkette lösen...
    a) Daten senden
    b) Quittierung von der anderen SPS erwarten
    c) Daten empfangen
    d) Daten kontrollieren ob richtig empfangen
    hinzu kommt noch eine Lifebitauswertung
    3. Ist mir aufgefallen, dass du deine Bausteine über einen Taktmerker ansprichts. (jede Sekunde) Ich würde erst wieder einen Start draufgeben wenn das Busy-Bit des Bausteines wieder auf LOW ist.

    Gruß

    PhilippL

  7. #7
    Jan ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.01.2009
    Ort
    Niedersachsen
    Beiträge
    813
    Danke
    180
    Erhielt 79 Danke für 75 Beiträge

    Standard

    Danke PhilippL, dass du mal reingeschaut hast.

    1. Weil ich diese Bausteine für den Test nicht verwenden wollte, damit es keine Konflikte unter den verschiedenen Bausteinen gibt.

    2. Höre ich so zum ersten Mal (Daten senden mit Schrittkette).
    a) Wie?
    b) Wie soll das Quittieren gehen?
    c) Wie?
    d) Einfach gesendete Daten mit empfangenen Daten auf Gleichheit vergleichen?
    Livebit wäre kein Problem, wenn der Datenaustausch an sich erstmal funktioniert.
    3. Das werde ich mal ausprobieren (wäre ja zu "geil", wenn das mein Problem ist).

    Gruß

    Jan

  8. #8
    Registriert seit
    12.05.2004
    Beiträge
    111
    Danke
    4
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Zitat Zitat von Jan Beitrag anzeigen
    @ Andi F
    Laut dem Link brauche ich wohl zwei CP; die habe ich aber nicht.
    Oder geht es auch irgendwie ohne CP?
    Ja habe ich übersehen, mit diesen FBs werden in der Tat CPs benötigt.

    Gruß
    Andi F
    Geändert von Andi F (24.07.2009 um 18:04 Uhr)

  9. #9
    Registriert seit
    11.04.2006
    Ort
    Niedersachsen
    Beiträge
    134
    Danke
    76
    Erhielt 12 Danke für 9 Beiträge

    Standard

    Hallo!

    Am einfachsten ist es, die beiden CPU's über MPI zu verbinden, und dann mit Globaldaten zu arbeiten. Die sind aber auf 22 Byte begrenzt.
    Hier gibt es mehr Infos: http://support.automation.siemens.co...ard&viewreg=WW

  10. Folgender Benutzer sagt Danke zu Nico99 für den nützlichen Beitrag:

    Jan (26.07.2009)

  11. #10
    Registriert seit
    12.05.2004
    Beiträge
    111
    Danke
    4
    Erhielt 5 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Jan Beitrag anzeigen
    Danke PhilippL, dass du mal reingeschaut hast.

    1. Weil ich diese Bausteine für den Test nicht verwenden wollte, damit es keine Konflikte unter den verschiedenen Bausteinen gibt.

    2. Höre ich so zum ersten Mal (Daten senden mit Schrittkette).
    a) Wie?
    b) Wie soll das Quittieren gehen?
    c) Wie?
    d) Einfach gesendete Daten mit empfangenen Daten auf Gleichheit vergleichen?
    Livebit wäre kein Problem, wenn der Datenaustausch an sich erstmal funktioniert.
    3. Das werde ich mal ausprobieren (wäre ja zu "geil", wenn das mein Problem ist).

    Gruß

    Jan
    Hallo Jan,
    ist es wirklich Dein Ziel 10 mal pro Sekunde bidirektional Daten zu übertragen, also alle 100 Millisekunden? Wenn ja, dann bitte beachte die Zykluszeiten der Programme und das diese SFC usw mit Sicherheit mehr als einen Programmzyklus benötigen um einen Datenblock zu bearbeiten. Deshalb gibt es ja das Busy-Bit.

    Gruß
    Andi F
    Geändert von Andi F (24.07.2009 um 18:20 Uhr)

Ähnliche Themen

  1. Daten von 3xx => 4xx über Bus
    Von mega_ohm im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 14.03.2011, 01:47
  2. Daten zwische 2 CPU´s austauschen!
    Von röhrengertl im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 19.01.2009, 11:04
  3. CP341 + RK512 Daten mit PC austauschen aber wie?
    Von noeppkes im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 10.07.2008, 18:06
  4. Daten über MPI auslesen
    Von jas im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 05.05.2006, 10:59
  5. Antworten: 2
    Letzter Beitrag: 30.05.2005, 08:16

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •