TIA Wie kann ich Daten von einer Fremdapplikation in TIA V17 importieren?

uweschwarz

Level-2
Beiträge
244
Reaktionspunkte
13
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebes Forum,

wir arbeiten mit einer CPU 1516 und TIA V17 professional.

Wir haben eine Raman Gasanalysegerät, welches die Daten mit einem LabView Programm aufbereitet. Leider ist die LV Applikation schon so alt, dass der Datenaustausch via OPC UA nicht möglich ist.
Die Erweiterung der LV Lizenz nur für diese Funktionalität ist uns zu teuer.
Daher suchen wir nach einer Lösung mit der wir die Analysedaten entweder ins WinCC oder, noch lieber, auf die SPS importieren können.
Die vorhandene LV Lösung könnte die Daten in einem Datenbankfile oder Textfile bereit stellen.
Hat jemand eine Idee dazu?

Herzliche Grüße
Uwe
 
Was "kann" denn die Labview Applikation für Schnittstellen bedienen? Welche Protokolle?

Tia kann "so gut wie alles".. modbus tcp, mqtt, sql, serielles schnitsstellen.. würde mich eher danach richten was euer Labview anbietet.

Vielleicht braucht es auch eine Middleware a la node red oder irgendein Python script welches eure Textfile weiteverarbeitet
 
Das ist bei Siemens zwar noch ein bisschen umständlicher (Daten kommen per Bytestream), json geht aber auch... wenn du es ganz niederschwellig machen möchtest, pro Wert ein Topic.. ansonsten alles in Json und dann eben auf der Steuerung in die passende Udt Maske de-serialisieren
 
Sorry, ich verstehe nur Bahnhof. Mache das zum ersten Mal. Wie verbinde ich die Steuerung mit der Datenquelle? Ist es so gedacht, dass ich via Script von einem FB auf den Json String, der z.B. auf meiner Festplatte gespeichert ist, zugreife und dem UDT zuweise?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mqtt ist erstmal nur ein Protokoll welches nach dem Client<->Server Prinzip agiert

Eclipse bietet hierfür zB Mosquitto als Broker (Server) an, an diese Mosquitto Instanz können dann Daten per publish Befehl gesendet werden, diese Daten sind immer verbunden mit einem Topic (Pfad). Deine 1500er kann dann zB als Client diese Daten über einen subscribe Befehl von einem Topic abfragen.

Mqtt kann Daten unformatiert oder als json formatiert anbieten/verarbeiten

Die aktuelle Bibliothek von Siemens unterstützt Mqtt 3.1
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wir kommunizieren ganz einfach via TCP/IP mit LabView.

Ich habe diese Bibliotheken gefunden: Bibliotheken für Kommunikation für Simatic Controler

Dort finde ich finde ich folgendes:
  • LCom:
    Diese Bibliothek ermöglicht die Kommunikation auf Basis von TCP/IP und bietet zusätzliche Kommunikationsfunktionalitäten mittels eines eigenen Protokolls.
Wenn ich das richtig verstehe, wird eine Kommunikation zu einem externen Partner z.B. einem PC aufgebaut und über diese Verbindung werden Daten ausgetauscht.

Das brauche ich aber eigentlich nicht.

Kann ich nicht einfach ein Textfile von der lokalen Festplatte via Script einlesen?
 
Eine Cpu ist kein System auf dem Windows oder Linux einfach so läuft und du irgendwelche Daten verarbeiten kannst.

Advanced Panels können widerum nur Smb v1 glaube ich..


Fakt ist: die Daten müssen bereitgestellt werden
 
Wenn ich das richtig verstehe, wird eine Kommunikation zu einem externen Partner z.B. einem PC aufgebaut und über diese Verbindung werden Daten ausgetauscht.

Das brauche ich aber eigentlich nicht.

Kann ich nicht einfach ein Textfile von der lokalen Festplatte via Script einlesen?

Naja, irgendeine Verbindung mit dem PC, indem die Festplatte verbaut ist, musst du ja aufbauen.

Du könntest mittels der LFTP-Bibliothek per FTP auf das Textfile zugreifen. Dann musst du das File allerdings auf der SPS verarbeiten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja, irgendeine Verbindung mit dem PC, indem die Festplatte verbaut ist, musst du ja aufbauen.
Ok, das verstehe ich.

Ich habe in diesem Beitrag ein Script für das Einlesen einer Datei von einem Panel aus gefunden. Da wäre also eventuell schon etwas Fertiges, das ich nutzen könnte.

Wenn ich es richtig verstanden habe, gibt es folgende Möglichkeiten:

1. Ich baue eine Verbindung zum Raman-PC mit der LV Applikation auf und bitte den LV Programmierer mir Daten über diese Verbindung zu senden. Zum Beispiel mit MQTT oder TCP/IP.
2. Ich bitte den LV Programmierer mir ein Textfile mit einer bestimmten Datenstruktur auf der Festplatte der OS (oder einem anderen Ort im lokalen Netzwerk) abzulegen, welches ich dann mit der LFTP-Bibliothek einlese und in der SPS verarbeite.
3. Ich bitte den LV Programmierer mir ein Textfile mit einer bestimmten Datenstruktur auf der Festplatte der OS (oder einem anderen Ort im lokalen Netzwerk) abzulegen, welches ich dann mit einem Script auf dem vorhandenen TP900 einlese.

Die Anforderungen an die Zeitsynchronisation von Raman und SPS sind nicht riesig, ein Versatz von mehreren Sekunden wäre akzeptabel.

Welche Variante würdet ihr empfehlen?
 
Labview unterstütz Modbus TCP.
Hier eine Anleitung:
 
Welche Variante würdet ihr empfehlen?
1. Ich baue eine Verbindung zum Raman-PC mit der LV Applikation auf und bitte den LV Programmierer mir Daten über diese Verbindung zu senden. Zum Beispiel mit MQTT oder TCP/IP.

Diese, dann kann nämlich mit Aktualdaten gearbeitet werden und du musst dir nicht erst eine Datei zerpflücken. Bei Mqtt bedenken, dass der Broker auf einem System laufen muss (Unix/Windows) .. geht natürlich auch virtualisiert als Container..

Da brauchst du keine neue Baustein-Bibliothek oder Sonstiges für.
Die Bausteine aus der Bibliothek sind doch auch schon viel wert.. kommen mit Beispielen und einer sauberen Doku.. dann muss das meiste nicht selbst gebaut werden.
1747223261772.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da der Labview Programmierer bereits eine Verbindung via TCP von einem anderen Projekt hatte, haben wir uns jetzt für eine TCP-Verbindung entschieden und jetzt, hallelujah, eine Verbindung über die die SPS auch Daten empfängt.

Allerdings verstehe ich noch nicht ganz, wie ich diese Daten interpretieren muss. LV sendet die Daten offenbar nur Byteweise. Wenn eine "15" gesendet wird empfange ich erst eine 1 und dann eine 5.

Ich habe in diesem Beitrag zur Umwandlung von Char in Int gefunden. Der ist aber von 2017. Gibt es inzwischen eine einfachere Lösung?
 
LV sendet die Daten offenbar nur Byteweise. Wenn eine "15" gesendet wird empfange ich erst eine 1 und dann eine 5.
Achtung, da musst du mal ganz genau hinsehen und hier mitteilen, was genau du empfängst. Am sichersten die Bytes im Hexadezimalcode B#16#nn (oder 0xnn) aufschreiben. Ich vermute, du empfängst tatsächlich ASCII-Zeichen (Chars), und zwar ein Byte 16#31 und ein Byte 16#35
 
Moin uweschwarz,

ich habe eine Funktion geschrieben, um numerische Werte umzuwandeln (bis 18 Zeichen):

Deklaration:

1747308857706.png


Code:

Code:
#Tdi_lowerBound := LOWER_BOUND(ARR := #IOac_signs, DIM := 1);
#Tdi_upperBound := UPPER_BOUND(ARR := #IOac_signs, DIM := 1);

#Tdi_maxIdx := #Tdi_upperBound - #Tdi_lowerBound + 1;

(*
UInt ==> 4 stellen
UDInt ==> 9 stellen
ULint ==> 18 stellen

Hinweis: die höchste Stelle wird nicht verwendet, da sie nicht alle Ziffermöglichkeiten enthalten kann
*)


// es werden maximal 18 Zeichen bearbeitet
//
IF
    #Tdi_maxIdx > 18
THEN
    RETURN;
END_IF;

// prüfen, ob die Zeichen dezimal (0-9) darstellbar sind
//
FOR #i := #Tdi_upperBound TO #Tdi_lowerBound BY -1 DO
    IF
        #IOac_signs[#i] > Byte#16#39
        OR #IOac_signs[#i] < Byte#16#30
    THEN
        IF
            #i = #Tdi_upperBound
        THEN
            RETURN;
        ELSE
            #Tdi_lowerBound := #i;
            EXIT;
        END_IF;
    END_IF;
END_FOR;

// Zeichen übersetzen
//
#Tlint_temp := 0;
FOR #i := #Tdi_upperBound TO #Tdi_lowerBound BY -1 DO
    #Tint_temp := BYTE_TO_INT(CHAR_TO_BYTE(#IOac_signs[#i]) AND Byte#16#0f);
    #Tlint_temp := #Tlint_temp + INT_TO_LINT(#Tint_temp) * LREAL_TO_LINT(udint#10 ** (#Tdi_upperBound - #i));
END_FOR;


#POOL_CHARtoLINT := #Tlint_temp;


VG
MFreiberger
 
Zurück
Oben