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

markus1234

New member
Beiträge
3
Punkte Reaktionen
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!




 

Matze001

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

markus1234

New member
Beiträge
3
Punkte Reaktionen
0
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.
 
OP
M

markus1234

New member
Beiträge
3
Punkte Reaktionen
0
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.
 

Matze4.0

New member
Beiträge
2
Punkte Reaktionen
0
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.
 
Oben