Datentransfer zwischen 2 CPU

Mertin

Level-1
Beiträge
79
Reaktionspunkte
10
Zuviel Werbung?
-> Hier kostenlos registrieren
Hiho,

Frage 1.

hoffe das mir hier jemand mit einer eleganten lösung weiterhelfen kann =)


Zwar bin ich im moment an einem Projekt mit ein paar anderen Lehrlingen, an denen 2 CPU mithilfe von Profinet verbunden wurden. Klappt auch alles einwandfrei.
Jedoch stehe ich nun vor einem problem und suche eine "elegante" lösung dafür.
Habe auf jeder CPU ein Programm, die untereinander mithilfe der SFB12/13 einen Merkerbereich austauschen und somit kommunizieren (Keinen Master)
Nun hab ich jedoch in beiden programmen einen Zähler drinnen, die ihren Wert aber abgleichen sollen. D.h. CPU1 Zähler = 4, dann soll auf CPU 2 der Zähler auch auf 4 sein. Jedoch soll dies auch im umgekehrten Fall passieren.
Am Programm kann nichtsmehr verändert werden, da es nicht von mir geschrieben wurde und für diese Aufgabe nun zuviel aufwand wäre.

Meine befürchtung jedoch bei dem Datenaustausch ist der, dass wenn ich ohne eine verriegelung des Sendens die Daten sich austauschen lasse, mir der Zähler die falschen Werte überträgt und somit die richtigen überschreibt. Er muss ja nur ein paar ms früher die Daten von dem alten Zählwert schicken, die mir dann ausversehen die neuen"" Daten überschreiben.

Rein theoretisch würde ich es schon Programmiert bekommen, aber es gibt ja gewiss immer einen einfacheren Weg, auf den man aber nicht kommt.


Frage 2.

Um einen Pointerbereich in einem DB anzugeben, wo die Werte alle INT format haben, wie geschieht das?
Bei Merkern schreibt man ja
P#M XYZ BYTE XYZ
jedoch wenn ich einen DB bereich aufrufen will, schreibt er mir das immer rot.
Oder muss man vorher
Auf DB100
P#DBD XYZ BYTE XYZ
schreiben?


Schonmal vielen dank für eure hilfe =)
 
F1 Taste im Simaticmanager gibt folgendes Geheimnis frei
Code:
Hinweis: 
Wenn der ANY-Pointer auf einen DB zugreift, ist der DB immer zu spezifizieren. (z.B.: P# DB10.DBX5.0 Byte 10)

F1 ist ein mächtiges Instrument.:rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
F1 Taste im Simaticmanager gibt folgendes Geheimnis frei
Code:
Hinweis: 
Wenn der ANY-Pointer auf einen DB zugreift, ist der DB immer zu spezifizieren. (z.B.: P# DB10.DBX5.0 Byte 10)
F1 ist ein mächtiges Instrument.:rolleyes:

richtig, die F1 Taste weis ich auch zu nutzen, jedoch komme ich immernochnicht auf meinen INT Wert.
Dieser müsste ja eig
DB100.DBw 0.0 BYTE 20
sein, um einen größeren Bereich zu senden, aber er schreibt es mir immer rot
 
Sorry aber liest du auch was geschrieben steht???

P#DB100.DBX 0.0 BYTE 20 So mußt du das schreiben.

Ein guter Bekannter hat eine tolle Fußnote.

Wer lesen kann ist klar im Vorteil.:rolleyes:
 
ahh... okay xD
Stimmt, irgendwie hab ich anscheinend als zu kompliziert gedacht und kam nicht auf diese "einfache" Idee.
Nunja, dann ist Frage 2 ja beantwortet
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zur ersten Frage.

Wenn du nichts mehr ändern kannst,wie willst du dann die Komunikation so anpassen, dass jeweils der Wert übernommen werde kann?
Du widersprichst dich:confused:.
 
Ich kann schon an dem Programm noch "änderungen" vornehmen, jedoch es nicht komplett umschreiben bzw. neu machen, dass habe ich damit gemeint.
Es gibt ja des öfteren dann einige die sagen "schreib doch von deinem kollegen einfach das Programm um, dass es leichter zu handhaben ist".
Aber genau diese mühe will ich mir nicht machen müssen....
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab das Programm nicht hier und wollte es morgen auch fertig machen.
Gesetzt wird der Zähler über einen Merker. Jedoch geht es ja nicht um den Zähler sondern um den Datentransfer.
Meine Idee war halt, die Daten des Zählers zu separieren, wobei das Übertragen erst dann aktiviert wird, wenn man den Merker für das einschalten des Zählers betätigt.
So sind sie gegenseitig verriegelt und können keine "falschen" Daten senden.
Hatte halt gehofft, dass man aus dem stehgreif eine Idee hier Posten kann, die es besser löst ^^
 
Zähler

lass doch jede cpu für sich zählen. und spiegle den zählerwert in die andere cpu. jede cpu kennt also ihren wert und den der anderen cpu. der "abgeglichene" gemeinsame wert ist dann nichts anderes als die addition der beiden werte.
gruß,
thomas
 
Guten Morgen erstmal ,

kam die letzten Tage nicht dazu an dem programm weiter zu schreiben.
Habe nun das problem, dass ich meine Werte aus einem DB nicht in den DB der zweiten CPU übertragen kann.
Habe angegeben :

CALL "BSEND" , DB24
REQ :="Uebertragen_freigabe"
R :="M0.0"
ID :=W#16#1
R_ID :=DW#16#1
DONE :=M80.4
ERROR :=M80.5
STATUS:=MW84
SD_1 :=P#DB100.DBX0.0 BYTE 18
LEN :=MW110

und

L 18
T MW110

Was mich aber wundert, ich nutze vorher schon den gleichen SFB um einen Merkerbereich zu transferieren und da klappt alles bestens...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast du auch 2 verschiedene DB beim Bausteinaufruf angegeben??

Call SFB xx, DB 24
Der nächste
Call SFB xx, DB 25

Und was steht im MW 84 Status???
Und was ist dein "M0.0"?
 
Zuletzt bearbeitet:
ja, hatte ich alles.
Problem habsch nun gefunden (Ein Merker war doppelt belegt ^^°)
und Programm läuft nun super =)
 
Zurück
Oben