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

minerl

Well-known member
Beiträge
49
Punkte Reaktionen
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??
 

KN-Oliver

Well-known member
Beiträge
95
Punkte Reaktionen
22
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:
OP
M

minerl

Well-known member
Beiträge
49
Punkte Reaktionen
0
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!!
 

Howard

Well-known member
Beiträge
1.025
Punkte Reaktionen
320
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.
 

PN/DP

User des Jahres 2011 - 2013; 2015 - 2017; 2020
Beiträge
17.262
Punkte Reaktionen
5.075
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
 
OP
M

minerl

Well-known member
Beiträge
49
Punkte Reaktionen
0
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.jpg 20190807_143159.jpg
 

Hohlkörper

Well-known member
Beiträge
270
Punkte Reaktionen
49
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:

Howard

Well-known member
Beiträge
1.025
Punkte Reaktionen
320
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
 
OP
M

minerl

Well-known member
Beiträge
49
Punkte Reaktionen
0
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??
 

Howard

Well-known member
Beiträge
1.025
Punkte Reaktionen
320
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.
 
Oben