TIA TCP-Fileserver: SCL-Sourcecode Programmerweiterung

Zuviel Werbung?
-> Hier kostenlos registrieren
Wo finde ich denn das erwähnte Server-Projekt?

Ich hab mir mit deinem Link von das Projekt von Siemens geladen.
109475508_TCPFileserver_PROJ_V2_0.zip
Die ZIP-Datei enthält die SCL_Quelle, TCPFileServer.exe, TCPFileServer.zap15

In dem ZIP befindet sein ein weiters ZIP TCPFileServer_Source.zip

Das ist ein VisualStudio-Projekt (TCPFileServer.sln) und muss das Programm TCPFileServer.exe im Source sein, welches auf dem PC laufen muss,
um die Daten von der SPS entgegen zu nehmen. Ich hab leider kein VisualStudio mehr installiert. Aber ich nehem an,
dass das Projekt ist in C# geschrieben ist. Dort must du ansetzten, um andere Dateitypen zu schreiben und evtl. auch die
Dateinamen zu beeinflussen.


Zum PureBasic-Projekt
Du brauchst als erstes mal die Purebasic Entwicklungsumgebung.
Die gibt es in einer Demo, damit lassen sich aber nur kleinste Programme compilieren.
Für das Logging Projekt reicht das nicht. Dazu ist die Vollversion nötigt (79.-€ für die Single User - Ist aber Dauerlizens mit der man alle
Updates bekommt - weitere Updatekosten gibt es nicht)
Ich wäre natürlich dankbar, wenn sich da mal jemand mit einklingt, damit man daraus ein professionelles Tool macht!
 
Wäre es nicht einfacher wenn ich den Datentyp des Array von Char auf Int umstellen würde, so müsste ich ohne Umwandlung meine Messwerte direkt in den Array des TCP-Client übertragen.
Dann würde in der csv-Datei nur binäres Kauderwelsch landen, was Du und Excel nicht lesen könnten.
Du musst die binären Zahlenwerte (INT, REAL) in druckbare und lesbare Klartext ASCII-Zeichen (Zeichenkette) umwandeln (z.B. mit VAL_STRG) und dann mit Trennzeien in das Format einer csv-Datei zusammenbasteln und in dem Char-Array für den TCP-Sendebaustein ablegen.

Könnte es sein, daß das Dein erstes TIA-Projekt ist? Und Deine erste csv-Datei? Schau Dir die Datentypen INT, REAL, CHAR, STRING in der TIA Hilfe an, und die Beschreibung von csv-Dateien in Wikipedia (Link in Beitrag #10).


Weiss jemand warum der Baustein DB5 wie einen Schreibschutz in der Deklaration seiner Variablen und deren Datentyp besitzt?
Gibt es eine Möglichkeit diesen aufzuheben?
Der DB5 scheint ein Instanz-DB eines FB zu sein. Den Aufbau von Instanz-DB kann man nicht direkt ändern, weil der von einem FB abgeleitet ist, man muß den Schnittstellenbereich des zugehörigen FB ändern und danach den DB neu generieren. Ich rate Dir aber dringend ab, in den Siemens-Bausteinen etwas zu ändern (ausgenommen OB1). Das macht man nur, wenn es unbedingt sein muß, z.B. Fehler beseitigen.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich hab mir das Siemens Visual Studio Projekt TCPFileServer mal angesehen. (Mit VisualStudio-Code)

- Es ist C#
- Wenn man das verstehen will braucht man wirklich Erfahrung in C#
- Ich blick da nur die oberflächlichen Dinge! Im Detail so gut wie nichts!
- Es gibt eine Date CSVFileManger. Da wird wohl das CSV-File erzeugt/geschrieben!
nur rudimentär Dokumentation.

Da initFile() ein ByteArry für den Filenamen erwartet, vermute ich, dass man mit der SPS
den Filenamen mitschicken kann, sonst wäre es wohl ein String!

Ich denke mal mit deiner relativ geringen Programmiererfahrung wird es das Beste sein,
das Beispiel so zu nehmen wie es ist und nur den SPS-Teil anzupassen.
Außer du hast viel Lust und Zeit dich da rein zu fuchsen!
 
Hier noch das PureBasic Logger Projekt mit einem kleinen S7-Classic Projekt dazu,
welches die DB's enthält.

Da Snap7 verwendet wird und der Zugriff direkt auf die Stuerungs-IP ist, kann man das
nicht mit dem Simulator testen. Man braucht eine echte CPU.

Das Projekt ist ein Testprojekt und stammt noch aus 2019, ich hab's jetzt nicht mehr getestet.
 

Anhänge

  • PureBasicS7Log_Demo.zip
    154,9 KB · Aufrufe: 2
hier mal ein beispiel wie das sende-array beschrieben werden könnte.
irgendsowas in der art sollte es auch in deinem programm geben

deklaration
Code:
Temp   
i    Int
start    Int
laenge    Int
wert_str    String

Code:
FOR #i := 1 TO 30 DO //das array orher ablöschen
    "12999_für_Analyser_DB".testarray[#i] := ' ';
END_FOR;
#start := 0;
FOR #i := 1 TO 5 DO
    VAL_STRG(IN:="12999_für_Analyser_DB".Messwert[#i],
             SIZE:=0,
             PREC:=0,
             FORMAT:=0,
             P:=1,
             OUT=>#wert_str);
    
    Strg_TO_Chars(Strg := #wert_str,
                  pChars := #start,
                  Cnt => #laenge,
                  Chars := "12999_für_Analyser_DB".testarray);
    #wert_str := '';
    "12999_für_Analyser_DB".testarray[#start + #laenge + 1] := '$R';
    "12999_für_Analyser_DB".testarray[#start + #laenge + 2] := '$L';
    #start := #start + #laenge + 2;
END_FOR;
1675934712709.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist ein VisualStudio-Projekt (TCPFileServer.sln) und muss das Programm TCPFileServer.exe im Source sein, welches auf dem PC laufen muss,
um die Daten von der SPS entgegen zu nehmen. Ich hab leider kein VisualStudio mehr installiert. Aber ich nehem an,
dass das Projekt ist in C# geschrieben ist. Dort must du ansetzten, um andere Dateitypen zu schreiben und evtl. auch die
Dateinamen zu beeinflussen.

Hallo @Maagic7 ,

danke erneut für deine Mühe dir die Dateien mal anzuschauen, was VisualStudio betrifft da werd ich mal schauen müssen ob ich über die Community Version mit meinem privaten Rechner bereits etwas einsehen kann und schlauer werde. Professionelle Lizenzen haben wir nämlich nicht im Unternehmen und die Community Version ist für den kommerziellen Gebrauch ausgeschlossen.

Mal schauen, vielleicht komm ich am Wochenende dazu.
 
Dann würde in der csv-Datei nur binäres Kauderwelsch landen, was Du und Excel nicht lesen könnten.
Du musst die binären Zahlenwerte (INT, REAL) in druckbare und lesbare Klartext ASCII-Zeichen (Zeichenkette) umwandeln (z.B. mit VAL_STRG) und dann mit Trennzeien in das Format einer csv-Datei zusammenbasteln und in dem Char-Array für den TCP-Sendebaustein ablegen.

Könnte es sein, daß das Dein erstes TIA-Projekt ist? Und Deine erste csv-Datei? Schau Dir die Datentypen INT, REAL, CHAR, STRING in der TIA Hilfe an, und die Beschreibung von csv-Dateien in Wikipedia (Link in Beitrag #10).



Der DB5 scheint ein Instanz-DB eines FB zu sein. Den Aufbau von Instanz-DB kann man nicht direkt ändern, weil der von einem FB abgeleitet ist, man muß den Schnittstellenbereich des zugehörigen FB ändern und danach den DB neu generieren. Ich rate Dir aber dringend ab, in den Siemens-Bausteinen etwas zu ändern (ausgenommen OB1). Das macht man nur, wenn es unbedingt sein muß, z.B. Fehler beseitigen.

Harald
Hallo Harald,

ok verstehe, die CSV kann mit dem Datentyp "Int" nichts anfangen.

Ja das ist tatsächlich mein erstes TIA-Projekt, das läuft bei mir alles in einem kleinst-Projekt mit TRIAL and ERROR. :)
Aber dank Hilfe hier aus dem Forum, wofür ich auch dankbar bin hat das ganze mittlerweile richtig Form angenommen.
Natürlich kommen da aus eurer Sicht etwas dumme Frage zu Stande wenn man als Laie um die Ecke kommt :D.

Die Datentypen sind mir schon geläufig, ich bin nur fälschlicherweise davon ausgegangen das eine .csv Datei auch Zahlenwerte schluckt.

Nur hypothetisch... Wo müsste man dort anpacken um den Schnittstellenberech zu verändern? Vermutlich geht das in dieselbe Richtung wie das von Maagic7 beschrieben wurde, oder?
 
hier mal ein beispiel wie das sende-array beschrieben werden könnte.
irgendsowas in der art sollte es auch in deinem programm geben

deklaration
Code:
Temp  
i    Int
start    Int
laenge    Int
wert_str    String

Code:
FOR #i := 1 TO 30 DO //das array orher ablöschen
    "12999_für_Analyser_DB".testarray[#i] := ' ';
END_FOR;
#start := 0;
FOR #i := 1 TO 5 DO
    VAL_STRG(IN:="12999_für_Analyser_DB".Messwert[#i],
             SIZE:=0,
             PREC:=0,
             FORMAT:=0,
             P:=1,
             OUT=>#wert_str);
   
    Strg_TO_Chars(Strg := #wert_str,
                  pChars := #start,
                  Cnt => #laenge,
                  Chars := "12999_für_Analyser_DB".testarray);
    #wert_str := '';
    "12999_für_Analyser_DB".testarray[#start + #laenge + 1] := '$R';
    "12999_für_Analyser_DB".testarray[#start + #laenge + 2] := '$L';
    #start := #start + #laenge + 2;
END_FOR;
Anhang anzeigen 66884

Hallo @volker ,

herzlichen Dank für die Mühe die du dir gemacht hast, durch diesen Programm-Code ist mir der komplette Ablauf, bzw. nötige Vorgang viel verständlicher geworden. Ich wäre mit Sicherheit nicht in der Lage gewesen dies so zu formulieren, da ich mit den Anweisungen "VAL_STRG" und "Strg_to_Chars" überhaupt nicht vertraut bin. Aber das Informationssystem von TIA ist da auch wirklich ein Segen, obwohl es natürlich recht kryptisch beschrieben ist.

Ich werde sobald ich etwas Luft habe probieren einen FB mit ähnlichen Umfang zu programmieren und das dann mal auszuprobieren.
Kurze Frage...

Die beiden Arrays sind bei dir 3-dimensional, oder?
Wenn ich es richtig verstehe dann ist die eine Spalte als zeitliche Dimension gedacht?
1675957789468.png
Die zweite Dimension ist der eigentliche Messwert in Array 1 oder der umgewandelte in Array 2.

1675958000636.png
Die dritte Dimension mit "--" wäre dass dann ein Bereich welcher in der dritten Spalte der CSV-Datei auftaucht?

Danke und Gruß
HT-T
 
Zurück
Oben