Step 7 Programme für Daten von CP 343 auf Windows

minerl

Level-1
Beiträge
49
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute!

Bitte mal wieder um eure Hilfe.


Gibt es Programme, dass ich sehen kann ob eine S7 300 über einen CP 343 wirklich die Daten sendet?!?!

Ich möchte nur Daten von einem DB an einen Netzwerkteilnehmer senden. Habe das einfach mit einem Baustein AG_SEND programmiert...

Jetzt möchte ich das mal aufbauen und schauen ob ich alles richtig projektiert habe. Darum wäre so ein Programm nicht schlecht dann würde ich einfach den CP an einen

beliebigen Computer mit Windows anschließen um zu schauen ob alles funktioniert.

Gibt es so etwas??
 
Hallo,

Wireshark wäre eine Möglichkeit. Für deine Fragestellung womöglich überdimensioniert. Ich nutze für diese einfachen Aufgaben das Programm Hercules Setup utility der Firma HW-group. Eigentlich für deren Produkte gedacht, bietet es aber alles was man für diese Aufgabe benötigt. Das Tool ist Freeware und kann hier geladen werden.

Mit diesem Tool können auch einfach Daten an den CP gesendet werden.


Gruß
Oliver
 
Zuletzt bearbeitet:
Hätte da noch eine Frage zum FC5_AG_SEND:

Muss ich bei der Schnittstelle "SEND" immer mit einem Pointer arbeiten??

Oder kann ich einfach einen ganzen Datenbaustein dort reinschreiben?? So das alle Daten vom Baustein gesendet werden...

Bitte um Hilfe!!
 
Moin,
wenn alle Sende-Daten in einer Variable stehen, also bspw. in einer UDT namens Data, dann kannst du dort eigentlich auch DB_Sendedaten.Data angeben. Der Compiler macht sich dann eigentlich einen eigenen Pointer daraus (sieht man dann, wenn man symbolische und absolute Adressierung anzeigen lässt)
Probiere das am besten einfach mal so aus.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Muss ich bei der Schnittstelle "SEND" immer mit einem Pointer arbeiten??

Oder kann ich einfach einen ganzen Datenbaustein dort reinschreiben?? So das alle Daten vom Baustein gesendet werden...
Ob das geht weiß ich nicht - ich war noch nie so faul, daß ich den Sendepuffer nicht wenigstens als BYTE/CHAR-ARRAY oder STRUCT oder UDT innerhalb des DB deklariert hätte. ;)

SEND benötigt definitiv einen ANY-Pointer, der bei symbolischer Programmierung automatisch vom Compiler aus dem Symbol erzeugt wird. Wenn bei dem Symbol aber keine Länge ablesbar ist, dann kann der Compiler auch keinen ANY-Pointer erzeugen.

Harald
 
OK Danke!!

Habe noch nicht wirklich mit Pointern gearbeitet... Ist auch schwer für mich zu verstehen.
Grundsätzlich geht es darum das alle Werte welche in dem Datenbaustein stehen gesendet werden sollen. (Bool, Real, Dint usw...)
Das ganze sollte so einfach wie möglich realisiert werden und eventuell immer erweiterbar sein.
Die Anlage ist auch nicht wirklich komplex...

Hab da mal was programmiert und als Bild angehängt.

Meine Frage reicht das so?? Oder muss ich den Pointer vorher selber "bauen" den ich bei SEND geschrieben habe?!?!

20190807_142909.jpg20190807_143159.jpg
 
Wenn du immer die gleiche Länge sendest, dann musst du nichts selber bauen.

Symbolisch, wie im Beitrag #9 vorgeschlagen, wäre auch möglich.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde nach den Bits in deiner UDT noch ein Byte Reserve hinzufügen, da, wie du in deinem zweiten Bild siehst, das Word bei Adresse 2 beginnt. Das liegt an der Adressierung bei Siemens. Du erzeugst dir so einen "unsichtbaren" Bereich im Byte mit der Adresse 1 - das sollte man vermeiden.
Aber Prinzipiell ist das so alles korrekt. Jetzt einen DB erstellen (bspw mit dem Namen DB_Sendedaten) und dort eine Variable Data vom Typ deiner UDT erstellen. Anschließend kannst du am AG_Send am Parameter Send deine Sendedaten symbolisch übergeben mit: DB_Sendedaten.Data
 
Ist das dann also ein ANY-POINTER der auf den Datenbaustein zeigt??

Und mit der UDT habe ich dann also einen eigenen Datentyp erstellt, welcher im Datenbaustein aufgerufen wird???

Oder wie kann ich das dann verstehen??
 
Deine UDT ist ein user-defined-datatyp eine also eine Variable die du selbst erstellst. Siemens hat quasi für dich schon ein paar UDT erstellt mit dem Namen Bool, Byte, Word usw ;)
Der Any-Pointer sollte dann auf deinen DB an die Speicherstelle zeigen, an der deine Variable Data (UDT) liegt und, weil der Compiler die Länge der UDT kennt, auch die richtige Länge im Pointer stellen.
Leider musst du die Länge dann händisch noch mal am Parameter AG_Send LEN angeben.
 
Zurück
Oben