TIA Protokoll einfangen

Erik10

Level-1
Beiträge
16
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,
ich habe folgende CPUs für mein Projekt zur Verfügung:
1515-2 PN
1214C DC/DC/DC
314C-2 PN/DP und nutze TIA V13

Ich will über eine TCP/IP-Verbindung ein koontinuierliches UDP-Protokoll einer Fremdwaage (Soehnle) einfangen und auswerten.
Die Open Communication Bausteine (TCON etc. fallen ja weg, weil ich die Waage nicht in TIA projektieren kann)
Mit welchen Bausteinen und CPU wäre dies möglich?

Danke für die Hilfe!
 
Die Open Communication Bausteine (TCON etc. fallen ja weg, weil ich die Waage nicht in TIA projektieren kann)
Mit welchen Bausteinen und CPU wäre dies möglich?
Wie kommst Du darauf? Gerade wenn man die Kommunikationspartner nicht in der Netzsicht von TIA projektieren kann, dann muß die Verbindung mit TCON eingerichtet werden. Deine Aufgabe kannst Du mit allen 3 CPUs mit TCON und TURCV lösen.
Wie projektieren Sie in STEP 7 (TIA Portal) eine Verbindung?
Programmierbeispiel STEP 7 (V5.5) UDP-Verbindung mit TCON über integrierte PN-Schnittstelle von S7-300/S7-400 CPUs
FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich benötige doch bei beiden Kommunikationspartnern den TCON, um eine Verbingung herzustellen. Auf der Waagen-Seite kann ich den Baustein nicht einprogrammieren
Ohne die erfolgreich aufgebaute Verbingung kann ich weder senden noch empfangen.
 
Den TCON brauchst Du nur in den Siemens-Steuerungen.

In der Waage wirst Du nichts programmieren können und auch nicht müssen. Da kannst Du höchstens irgendwo einstellen, daß die Waage regelmäßig ein Telegramm irgendwo hinschicken soll (z.B. zu einer "Fernanzeige"), welches man auch zu einer beliebigen IP-Adresse (z.B. einer SPS) senden lassen kann. Üblicherweise ist aber ein TCP-Server aktiviert, mit dem sich ein TCP-Client verbinden kann und der Waage Kommandos sendet (z.B. Gewichtsabfrage) worauf diese antwortet - sprich: die angeforderten Werte zurücksendet. Am einfachsten, Du fragst mal den Lieferanten der Waage bzw. die Servicefirma, auf welchem Weg mit welchem Protokoll (Kommandos) man mit der Waage per Ethernet kommunizieren kann. Vielleicht hat die Waage auch eine Profinet-Schnittstelle und man kann sie ganz einfach als Profinet-Device anbinden?

Welche Waage hast Du genau und welche Ethernet-Schnittstelle hat diese?
Woher weißt Du, daß Du per UDP mit der Waage kommunizieren mußt?
Welche Werte willst Du aus der Waage wissen?

Harald
 
Die Waage sendet mir diesen Einzeiler z.B.: 000101N 1000g
Ich will den Gewichtswert herausfiltern, um mit dem weiterzuarbeiten.

Ich habe eine Soehnle Professional 9130.02.040 Kompaktwaage 6kg/ 0,2g mit einer "gewöhnlichen Ethernet-Schnittstelle", ProfiNet Schnittstelle gibt es bei Soehnle leider nicht..
Dass ich per UDP kommunizieren muss, war nur eine Vermutung

Die Komandos für die Kommunikation für die Waage hab ich in der Doku. Nur leider weiß ich bisher noch nicht, wo ich die eingeben soll. Eine Software hab ich dafür nicht
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Komandos für die Kommunikation für die Waage hab ich in der Doku. Nur leider weiß ich bisher noch nicht, wo ich die eingeben soll. Eine Software hab ich dafür nicht

Lese dir die Dokumentation mal durch, da sollte eigentlich auch auftauchen wie die Kommunikation stattfinden soll, ebenso wie ein Telegramm aufgebaut sein sollte.
zB [stx] [header] [daten] [etx]

Zum Testen der Kommunikation kann ich Hercules von HW Group empfehlen, hiermit kannst du Telegramme von deinem PC aus an die Waage versenden und dir die Antworten ausgeben
lassen. Sobald es damit läuft kann man es in ein SPS Programm übertragen.
 
Dass ich per UDP kommunizieren muss, war nur eine Vermutung

Die Komandos für die Kommunikation für die Waage hab ich in der Doku. Nur leider weiß ich bisher noch nicht, wo ich die eingeben soll.
Anscheinend kann man bei SOEHNLE die detallierten/technischen Handbücher nicht frei downloaden. Ich finde nur Anwender-Bedienanleitungen. Du mußt in die Dir vorliegenden Handbücher schauen oder sie Dir liefern lassen. Falls Du aus der Kommunikations-Doku nicht schlau wirst: Hast Du vielleicht einen Downloadlink?

An der Waage ist vermutlich nichts weiter zu tun, als im Bedienmenü der Waage die IP-Adresse/Subnetzmaske/Gateway einzustellen sowie die TCP-Portnummer (vermutlich standardmäßig der Telnet-Port 23).

Im SPS-Programm:
- mit TCON baust Du eine TCP-Verbindung zur IP-Adresse der Waage zum da eingestellten Port (z.B. 23) auf
- mit TSEND sendest Du das Kommando zur Gewichtsabfrage/Statusabfrage an die Waage
- mit TRCV empfängst Du das Antwort-Telegramm
- dann wertest Du das Antwort-Telegramm aus, z.B. den eingebetteten Gewichtswert von ASCII-Zeichen nach REAL wandeln

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,

nochmals vielen Dank für eure Hilfe! Die Verbindung steht und ich kann Befehle an die Waage schicken und auch den Status und das Gewicht lesen.

Nun habe ich das Problem, dass mir die SPS unregelmäßig neue Protokolle anzeigt und die Teilweise so zerschossen sind. Ich vermute, dass der Empfangsspeicher so überladen ist.
Die Protokolle fange ich als Strings ein. Wie kann man den Empfangsspeicher zyklisch auf "0" setzten, je nach dem wie man das bei den Strings macht?
Ich will zyklisch nach jedem erfolgreich empfangenem Protokoll den Speicher platt machen, dass so vielleicht der Fehler verschwindet
 
nutzt du jetzt das UDP oder TCP-Protkoll?

TCP ist ein Stream-Protokoll d.h. keine festen Paketgrößen wie bei einem Bussystem (vergleichbar mit seriell)
z.B. ein Paket aus 6 Bytes (könnte) in 6 einzelnen Byte Happen pro Minute ankommen - d.h. du solltest immer sauber das Ende eines Paketes erkennen und dann den vorderen Teil aus deinem Puffer löschen (oder als Ringpuffer) - es
anders zu machen führt scheinbar zum richtigen Verhalten und macht gerne hin und wieder Probleme

Fragen also:
-UDP oder TCP?
-wie sieht das Protokoll genau aus?
Wert<CR><LF>Wert<CR><LF>...
Wert,Wert,Wert,...
(Länge)Wert(Länge)Wert...
oder ähnlich?
woran erkennst du ein Paketende?
 
Ich nutze das TCP-Protokoll

So sollte das Protokoll aussehen z.B.: '000101N 150,6g'
Manchmal sieht es so aus: ' g 0001 1506' oder ' 000101 g 150,6' -> immer unterschiedlich . Manchmal auf 2 Paketteilstücke im array

Ein wirkliches Paketende erkenne ich nicht, denn <CR> wird mir nicht angezeigt
Ich errate es meist :D
 
Zuletzt bearbeitet:
Manchmal sieht es so aus: ' g 0001 1506' oder ' 000101 g 150,6' -> immer unterschiedlich . Manchmal auf 2 Paketteilstücke im array

Es verhält sich genau so wie TCP es eben macht - du bekommst nicht garantiert einen zusammenhängenden Block sonder muss gezielt auf eine bestimmte Länge oder ein Ende warten - alles davor ist dann ein vollständiges Paket
egal wie du es sonst programmierst wirst du immer Probleme haben - oder es läuft nur teilweise richtig - auch nicht schön

Ein wirkliches Paketende erkenne ich nicht, denn <CR> wird mir nicht angezeigt
Ich errate es meist
dann bin ich mal auf die HEX-Ausgabe von Hercules gespannt
 
dann bin ich mal auf die HEX-Ausgabe von Hercules gespannt

Dito!

Bei dieser Art von Kommunikation ist eine Kennzeichnung von Telegrammanfang und -ende eigentlich gang und gebe.


Ich habe es schon so gelößt: ich habe mir einen Empfangsbuffer- DB angelegt, etwas größer als das am längsten zu erwartende
Telegramm. Dieser wurde vom TRCV gefüllt. das heißt ich habe den DB immer um die empfangslänge von TRCV nach hinten geschoben
und dann an erster stelle die neuen Daten von TRCV eingefügt (Serielles empfangen).
In einem anderen Baustein habe ich dann den Empfangsbuffer nach Anfangs und Endkennung durchsucht, bzw nach Header Daten
die Definiert haben was für Daten da ankamen und die Werte dementsprechend wegkopiert.
 
Leider kann ich im Hercules das nicht in Hex umwandeln:
001001N 773,0 g 001001N 772,8 g 001001N 772,8 g 001001N 773,0 g 001001N 772,6 g 001001N 772,8 g

In der SPS kommen leider nicht immer die ersten beiden Ziffern an. Deshalb wollte ich mir ein sauberes Protokoll zusammenbasteln
 
Leider kann ich im Hercules das nicht in Hex umwandeln:

keine Ahnung was dein Problem ist - viele andere bekommen das hier auch hin
einfach vor dem Verbinden die Anzeige auf HEX Einstellen, verbinden und dann ein wenig Daten von der Waage empfangen

oder noch einfacher ist es mit Wireshark (https://www.wireshark.org/download.html) - das kleine Welt-Standard-Tool für Netzwerk-Logging
einfach den "Windows Installer" installieren oder "Windows PortableApps" (läuft vom USB-Stick) und los gehts

1. im Wireshark Menü: Aufzeichnen/Optionen
-> dort deine LAN/WLan-Verbindung (Netzwerkkarte wählen - falls du mehrere NICs hast) wählen
-> dann unten auf den Start Knopf -> jetzt läuft die Aufzeichnung

2. mit Hercules TCP-Client einen Verbindung zur Waage öffnen und ganz normal Daten empfangen - Wireshark loggt dann die Daten im Hintergrund mit

3. wenn in Hercules ein bisschen was angekommen ist (lieber ein bisschen mehr Pakete) im Wireshark Menü: Aufzeichen/Stoppen

4. oben im Wireshark-Anzeigefilter "ip.addr==IP-von-deiner-Waage" Eintragen also z.B. "ip.addr==192.166.1.2" und ganz rechts mit dem Pfeil (diesen Filter zur Anzeige Anwenden)
jetzt siehst du nur noch die Waagen Pakete (Achte auf das dopplete ==)

5. dann im Wireshark Menü: Datei/Spezielle Pakete exportieren.../ mit All-Packets und Displayed-Packets Radiobox-Aktiv in eine Datei exportieren
-> die Datei hier reinhängen

ohne eine Längen oder Ende-Kennung kann man dieses TCP/IP-Protokoll nicht sauber implementieren - die Effekte die du in der SPS siehst ergeben sich dadurch (und es gibt noch viele weitere)
 
die Datei kann man nicht hochladen, weil das Format nicht gültig ist

ich hab mein ein screenshot gemacht
 

Anhänge

  • Hex_drstl..jpg
    Hex_drstl..jpg
    43,4 KB · Aufrufe: 30
Zurück
Oben