Suche Hilfe! Inhalt zweier Merkerwörter (Int) über TCP/IP (CP343-1) an PC versenden

SPS_Michael

Level-1
Beiträge
11
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Habe folgendes Problem:

Ich möchte zwei Füllstände (2 Analogwerte in S7 (CPU 316-2DP) skaliert und in zwei Merkerwörtern gespeichert) über eine TCP/IP-Verbindung mit einer CP 343-1 an einen PC versenden.
Die Verbindung habe ich in Net-Pro konfiguriert und über AG_Send -Baustein schaffe ich es auch einzelne Buchstaben (Char's aus einem Datenbaustein ) zu versenden. (Zeichen werden auch über Hyperterminal (Testweise) empfangen.


FC1:

NW1:

CALL "AG_SEND"
ACT :=M100.0
ID :=1
LADDR :=W#16#100
SEND :=P#DB5.DBX0.0 BYTE 10
LEN :=10
DONE :=M2.0
ERROR :=M2.1
STATUS:=MW20

NW2:

U E 0.0 Testtrigger zum senden
= M 100.0

DB5:

send CHAR '1'
send1 CHAR '2'
send2 CHAR '3'
send3 CHAR '4'
send4 CHAR ' '
send5 CHAR ' '
send6 CHAR ' '
send7 CHAR ' '
send8 CHAR ' '

Mein Problem: Wie schaffe ich es, das z.B. die Merkerwörter MW50 (Wert-Beisp. 1111) und MW52 (Wert-Beisp.2222) im Format 11112222 an den PC gesendet werden.

Dazu sollte ich vielleicht noch sagen, das oben stehendes Progamm aus einem Beispiel stammt.
Ich habe aber noch nie mit Pointern zu tun gehabt, sodaß mir Send-Parameter auch nicht ganz klar ist.

Ich habe versucht die Merkerwörter direkt mit AG_Send (SEND :=MW50) zu versenden - Es kommen aber nur "Mülldaten" an.


Hoffe mir kann jemand helfen

Gruß Michael
 
Rs232

Hi,
Standard Library, IEC FCs, FC16: konvertiert ein Integer in einem String.
Also zuerst dein MW konvertieren, als String ein DB Bereich angeben, und
der Pointer zeigt drauf.
Z.B.: nach der Konvertierung steht der Wert als String in DB100.DBB0 bis
DBB 9 (10 Bytes=10 Zeichen), das ist deklariert als Array of Char.
Dann als SEND bereich eintragen
....
SEND :=P#DB100.DBX0.0 BYTE 10
...

Die 10 Zeichen werden übertragen. Kannst auch weniger machen, je nach dem wie deine Werte sind.

Gruss: Vladi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du sendest, dann werden 10 Byte gesendet, die im DB5 ab Dw 0 stehen
P#DB5.DBX0.0 BYTE 10

Versuch doch mal alles so zu lassen, aber dein MW50 in DB5.DBW0 zu schreiben und dein MW52 in DB5.DBW2. Was kommt dann an am PC? Was willst du genau am PC lesen? INT oder Char?
 
Ähhhhhm

MOOOment mal, ich dachte an RS232, er meint ja TCP/IP Übertragung!
So geht das doch nicht, sorry! Was für Hyperterminal und TCP/IP ???
Verstehe nur Bahnhof(i understand onli railstation).

Vladi

P.S. Geht das über die WinSocket Verbindung? Habe nie was probiert damit.
 
An Vladi:
Den Hyperterminal kann man so einstellen, das er Daten über TCP/IP (Winsock) sendet/empfängt - Funktioniert auch (Man muß nur IP und Port einstellen) - Ist auch nur mein Test-Empfänger

An Ralle:

Ralle schrieb:
"Versuch doch mal alles so zu lassen, aber dein MW50 in DB5.DBW0 zu schreiben und dein MW52 in DB5.DBW2. Was kommt dann an am PC? Was willst du genau am PC lesen? INT oder Char?"

A. Es kommen gar keine Daten an (Verbindung steht)
B. Ich möchte die INT-Inhalte der Merkerwörter am PC lesen - Die Chars waren nur aus dem Beispiel mit dem ich rumprobiert habe
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ach so..

Hi,
ja wenn es so geht, dann solltest du so konvertieren, wie ich gesagt habe, denn sonst ist mir die Formatanpassung sehr unklar..Du empfängst im Hyperterminal ja ASCII Zeichen, also sollte zuerst von INT nach ASCII umgewandelt werden(die og. FC).

Vladi
 
An Vladi: (Korrigiert)

FC16 ist eigebaut

CALL "I_STRNG"
I :=MW50
RET_VAL:=DB5.Senden



in DB5 habe ich dann einen String[10] definiert (DB5.Senden)

Daten von MW50 werden gesendet -- Klasse
Noch ein kleines Problem : Es wird ein Vorzeichen mitgesendet (Siehe Hilfe FC16) - Weißt Du zufällig wie ich das wegbekomme ???

Ansonsten Vielen DANK für dei schnelle Hilfe
 
Zuletzt bearbeitet:
Daten

Hi,
sorry, du brauchst gar keinArray of Char, im DB5 kannst du ganz normal eine Variable als STRING[10] deklarieren(hier z.B. 10 Byte lang).

OK, dein Daten-String steht im Lokaldatenbereich. Die Adresse siehst du
oben im Deklarationsteil. Nehmen wir an, es fängt an ab LB20. Und im DB5 ab Byte 0 steht dein String, der gesendet wird.

L LD 20 // 4 Byte übertragen
T DB5.DBD0
L LD 24 // noch 4 Byte übertragen
T DB5.DBD4
L LD 28 // noch 4 Byte übertragen usw., je nachdem wie lang
T DB5.DBD8

So ist dein Lokalstring in dem DB5 kopiert.

Vladi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Vladi

Funktioniert :):)
Musste allerdings erst ab dem 3. Byte der Variable in den DB übertragen, da sonst das Vorzeichen in den DB geschrieben wurde, und die letzte Stelle fehlte.

Beispiel:
L LD 3
T DB5.DBD 0

Wobei die Startadresse der Lokalvariable bei 0 liegt !!!

Das Direkte schreiben in den DB (Siehe meinen vorherigen Beitrag, den ich schon editiert hatte, bevor ich Deine letzte Antwort gelesen hatte)
funktioniert auch. Allerdings hat man dann das Vorzeichen mit im Sendestring.

Vielen Dank für deine Hilfe :)

Und auch Danke an Ralle :)


Michael
 
Zurück
Oben