TIA S7-1200/1500 Kommunikation mit SQL Server mit Siemens Beispielprojekt

markus1234

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich muss in einem Projekt eine Verbindung zwischen der S7-1500 und einer Microsoft SQL Express Datenbank herstellen. Dazu habe ich das Beispielprojekt von Siemens heruntergeladen und mit TIA Portal V17 und einer CPU 1511F-1PN umgesetzt.
Das Senden und Eintragen von Daten in der Datenbank funktioniert soweit.

Beim Senden von vielen Befehlen nacheinander kommt es zu einem Beenden der Verbindung durch den SQL-Server. Hierzu wurde eine Wireshark-Aufzeichnung gestartet, welche den Verbindungsabbruch mit einem FIN Flag bestätigt. Der Baustein "LSql_Microsoft" liefert, als Status 8605 und als subfunctionStatus 80C5 zurück. Laut Siemens bedeutet der subfunctionStatus: Der remote Partner hat die Verbindung abgebaut.

Zum Senden von neuen Befehlen überprüfe ich im Baustein "LSql_Microsoft" die Variable #instTsend.DONE. Falls diese den Wert TRUE hat sende ich einen neuen Befehl.
Mit dem ungewollten Einbau einer Zeitverzögerung von 30ms kommt es zu 99% zu keinem Verbindungsabbruch.
Jedoch stellt diese Möglichkeit keine gute Lösung dar!

Vielleicht kann mir ja jemand weiter helfen.
Danke schon mal!




 
Okay ein paar Fragen:

Was überträgst Du hier?
Wie oft überträgst Du? Quasi so schnell wie möglich, also mit jedem DONE eine neue Übertragung?

Ich vermute, dass Du Werte in einer schnellen Abtastrate in eine Datenbank bringen willst, Du willst schnell messen,
musst aber eigentlich nicht schnell übertragen.
Könntest Du z.B. Werte von 100ms in einem Array sammeln und dann ein einer Transaktion übertragen?

Grüße

Marcel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die Antwort Marcel!

Ich übertrage einen SQL Befehl, wie im Beispielprojekt: 'insert into PLCDATA_1 Values (0,0,0)'
Ja genau, nach jedem DONE wird eine neue Übertragung gestartet.

Die Werte in einem Array sammeln wäre schon möglich, nur das Übertragen der Daten in einer Transaktion gestaltet sich schwierig. Der Baustein von Siemens erlaubt es immer nur einen Befehl mit Daten zu senden.

Mittlerweile habe ich rausgefunden, dass die CPU auf dem Laptop ziemlich stark ausgelastet ist. Beim Starten einer weiteren Anwendung auf dem Laptop kommt es dazu, dass die Verbindung mehrmals beendet und wieder aufgebaut wird.
Ich werde es mit einem leistungsstärkeren Laptop versuchen und schauen ob dieser die hohe Befehlsfrequenz verarbeiten kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

durch die Verwendung eines leistungsstärkeren Computers konnte die ungewollte Zeitverzögerung ausgebaut werden. Die Befehle werden nun abhängig von der Zykluszeit mit einer Befehlsfrequenz von ungefähr 300 Hz an den Datenbankserver gesendet.

Dennoch erhöht sich beim Öffnen einer Anwendung auf dem Computer die CPU Auslastung kurzzeitig und geringfügig, was zu einem Verbindungsabbruch führt.
Wird nun erneut eine Zeitverzögerung von 10 ms (aussreichend, da leistungsstärkerer Computer) eingebaut, kommt es zu 99,9% zu keinem Abbruch der Verbindung.

Den Zusammenhang zwischen CPU-Auslastung und Abbruch der TCP/IP Verbindung konnte ich mir bis jetzt noch nicht erklären.
 
Ich kontrolliere nach dem Insert Befehl erst den Empfangsdatenbaustein.
Wenn dort der Done Token (Byte 8 =16#FD) kommt ist der Befehl abgeschlossen.
Damit ist sichergestellt das die Daten auch in der Datenbank angelegt sind.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Genau mit Handshake wie @Matze4.0 schreibt ist es perfekt. Manchmal kommt auch DONEPROC_TOKEN ( %xFE) zurück. Also den Abschluß etwas erweitern, dann freuen sich Anwender mit stored procedure ebenso. Ein Programm ist nie für alle Anwendungsfälle gedacht ;-)
 
Mein Insert Befehl funktioniert nur, wenn ich beim übertragenen Zeitstempel das Monat und den Tag vertausche!?
Also bei 7,$'2022-03-30 15:40:26.125$' es so mache:7,$'2022-30-03 15:40:26.125$' !
Bei erstem Format, das ja korrekt sein sollte, bekomme ich keinen Eintrag in die Tabelle und richtigerweise keinen Done Token (Byte 8 =16#FD).

In der SQL DB ist die Spalte vom Typ "datetime".
Habe mir eine FC geschrieben, die das vertauscht, funktioniert, aber geschmeidig ist es das nicht....

Hat das sonst noch jemand, oder übersehe ich etwas?
Hier die Version:

Besten Dank im Voraus

1659365232021.png
 
20220330 15:40:26.125 oder 2022-03-30T15:40:26.125 müssten unabhängig vom eingestellten Format funktionieren.
Und aufgepasst mit Millisekunden bei einer DateTime Spalte, die werden auf 0, 3, 7 gerundet siehe:


D.h. deine 125 ms werden zu 127 ms.
 
Zuletzt bearbeitet:
SQL-Server Eigenschaften: Deutsch (Deutschland)
Benutzer Eigenschaften: German - Deutsch

Wenn ich in den Login Informationen vom Baustein LSql Microsoft "English" angebe, dann wird das beschriebene Format(YYYY-MM-DD hh:mm:ss[.mmm]) korrekt angenommen.

20220330 15:40:26.125 oder 2022-03-30T15:40:26.125 müssten unabhängig vom eingestellten Format funktionieren.
Einen anderen Seperator habe ich nicht gewählt, es werden ja Monat und Tag gedreht.

Und aufgepasst mit Millisekunden bei einer DateTime Spalte, die werden auf 0, 3, 7 gerundet siehe:
stimmt, werde heute mit der IT mal auf datetime2 wechseln und testen, auch bzgl. Sprache...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So, Test mit datetime2 erfolgreich.
Kein vertauschen von Monat/Tag bei unterschiedlicher Spracheinstellung.
Auch hier wird an 7. Stelle gerundet!

gesendet:
$'2022-08-02 05:26:48.336$',$'2022-08-02 05:26:48.336123456$'

385: LSql/SqlConfig - language 'English'
386: LSql/SqlConfig - language''

1659417916963.png

Bleibe auf datetime2.
Besten Dank
 

Anhänge

  • 1659417672532.png
    1659417672532.png
    4,7 KB · Aufrufe: 6
Hallo zusammen,

hat vielleicht jemand die TIA V16 Version für das Beispiel? Auf der Siemens Seite finde ich nur noch die V17.

Vielen Dank!
 
Auch ich hatte die Vertauschung hier im Forum bemerkt. Das Siemens Beispiel sehe ich eher als eine Idee denn als fertige Lösung.
 
Zurück
Oben