Temperaturen loggen mit BK9000 (in Excel)

olitheis

Level-1
Beiträge
488
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich würde gerne mit einem BK9000 und 4 x KL3204 (4-Kanal Pt100) zu verschiedenen Zeitpunkten (evtl. Triggerbit) 16 Temperaturen mitschreiben. Am liebsten wäre es mir, wenn ich die Temperaturen (bzw. wahlweise auch andere Variablen) in eine Excel Tabelle schreiben könnte.
Gibt es hier von TwinCAT aus Möglichkeiten oder eine "externe" Variante wie beim Accon EasyLog bei der S7, der csv Dateien erzeugen kann.

Am liebsten wäre mir natürlich, wenn ich es via TwinCAT direkt in Excel schreiben und immer weiterschieben könnte, also die 16 Werte jedes Mal in eine neue Zeile schreben.

Wäre super, wenn jemand hier eine Lösung vorschlagen kann.
Vielen Dank
Oli
 
Du kannst aus der PLC in eine Text Datei schrieben. Beispielsweise FB_FilePuts um eine einzelne Zeile zu schreiben.

Mit Hilfe der Funktionsbausteine schreibst dir eine CSV-Datei welche du in Excel importieren kannst.
 
Super, sieht aus, als wäre das genau das Richtige. Aber ich hätte dazu noch eine Bitte:
Könntet ihr mir bitte ein Beispiel geben für TwinCAT, wie ich z.B. die aktuellen Werte von den Variablen (Real) -> Temp1, Temp2, Temp3, Temp4 immer bei einem TRUE der Triggervariable log (Bool) in eine CSV Datei schreiben kann (immer wieder eine neue Zeile).

Ich wäre euch dankbar
Gruß
Oli
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo danke für die Links,
aber ich befürchte, Du mußt mir noch ein wenig unter die Arme greifen.
Wenn ich das richtig sehe, geht es in dem 'Beispiel' darum, eine Datei von einem Remote System auf den lokalen Rechner zu kopieren.
Vielleicht könntest Du mir noch ein konkreteres Beispiel geben für:
1. Datei 'logdaten.txt' öffnen (kann aber auch manuell geöffnet werden)
2. dann die Variablen: Temp1, Temp2, Temp3, Temp4 bei jeder steigenden
Flanke von der Variable 'log' Zeilenweise (Komma getrennt) diese Datei
schreiben.
Ich denke dazu kommt entweder:
FUNCTION_BLOCK FB_FileWrite


FB_FILEWRITE.gif


oder:
FUNCTION_BLOCK FB_FilePuts


FB_FILEPUTS.gif

in Frage.
Jedoch komme ich noch nicht so ganz klar. Welcher wäre denn der Richtige FB
und wie muss ich meine Variablen/Daten verpacken (String?/Array?) damit sie in die Datei geschrieben werden können?
Nochmals vielen Dank
Oli
 
Naja, benutzt den FB für FileOpen mit dem Append Mode, wie in dem Beispiel und bekommst ein FileHandle zurück. Mit Hilfe dieses FileHandles kannst genauso, wie im Beispiel mit dem Write, mit dem Puts Baustein deine Zeile in die Datei schreiben und diese wieder mit Close schließen...

Bei dem Put Baustein übergibst du einfach einen String, dem wird automatisch das Return angehängt und in die Datei geschrieben.
 
Hallo Neals,
ich habe in der Bibliotheksverwaltung zu meinem PLC Projekt die TcSystem.lib 11.08.08 10:11:52 geöffnet. Dort unter FILE ACCESS befinden sich sie von Dir genannten FB's (FB_FileOpen, FB_FilePuts, ...). Jetzt habe ich einen neuen Baustein (in FUP) zu meinem Projekt hinzugefügt und dort in das 1. NW den FB_FileOpen eingefügt (s. Anhang). Beim Übersetzten kommen nun haufenweise Fehler die auf diese Bibliothek hinweisen (ADS...Unbekannter Typ...)
Muss ich noch etwas beachten, wenn ich Bausteine aus dieser neuen Bibliothek verwenden will?
Vielen Dank nochmal
Oli
 

Anhänge

  • TC_FILE_1.jpg
    TC_FILE_1.jpg
    134 KB · Aufrufe: 119
Ja, ich hatte die TcBase.lib gelösch. Jetzt übersetzt er ohne Fehler, allerdings scheint es, dass mein Baustein, den ich File_Write genannt habe, der den FB_FileOpen beinhaltet, nicht von der Task berücksichtigt wird, denn er bleibt grau, obwohl ich ihn in MAIN aufrufe. Ich hänge mal mein Projekt mit an, vielleicht kannst Du ja mal reinschauen und mir auch evtl. bei dem String helfen, in den die Variablen geschrieben werden müssen, damit ich sie später im FB_FilePuts einlesen kann. Ich habe zwar in der Online Hilfe von Beckhoff den FUNCTION DINT_TO_DECSTR : T_MaxString gefunden, bin mir aber nicht sicher, wie ich jetzt all die Variablen, die ich in die Datei Wegschreiben möchte, in einen String bekomme.
Nochmals vielen Dank
Oli
 

Anhänge

  • TC_FILE_2.jpg
    TC_FILE_2.jpg
    52,9 KB · Aufrufe: 76
  • pro_plc_01.zip
    14 KB · Aufrufe: 50
Zuletzt bearbeitet von einem Moderator:
Sorry aber blicke da nicht so recht durch dein Programm durch. Du musst dann auch ein File_Write machen, sonst bringt dir das ganze ja nichts... ausserdem muss auf die bExecute Eingang eine positive Flanke, damit der Baustein aufgerufen wird.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, Da ich ja noch nicht weiß, wie ich meine Variablen in einen String umwandeln muss, hatte ich erst mal mit dem FileOpen begonnen, und wollte das so testen. Aber es scheitert ja schon daran, dass ich mein Baustein ja gar nicht läuft (bleibt grau). Muss ich den FileWrite bzw. FileClose grundsätzlich immer dabei haben damit es funktioniert? Es wäre echt supernett, wenn Du evtl. mal das Programm so abändern könntest, dass ich mit der pos. Flanke von IN_1 meine Datei öffnen kann, mit IN_2 dann die vier Temperaturen (im String?) in die Datei schreiben kann und mit IN_3 dann die Datei wieder schliessen kann.
Wird die Datei eigentlich richtig geöffnet, oder nur im Hintergrund beschrieben, also sieht man, dass die Datei geöffnet wurde?
Vielen Dank
Oli
 
Hallo,
ich habe das mit dem FilePuts leider noch nicht hinbekommen. Momentan hängt es daran, dass ich die Variablen nicht in einen String gewandelt bekommen. Ich habe jetzt einen FB_FORMATSTRING gefunden:
FB_FORMATSTRING.gif

damit können bis zu 10 Argumente in einen String formatiert werden. Jetzt stellt sich mir die nächste Frage: wie bekomme ich meine Variablen (Real) zu diesen Argumenten gewandelt? Es gibt eine FUNCTION F_REAL
F_REAL.gif

(Eine Hilfsfunktion, die in einer Struktur Informationen zu einer REAL-Variablen zurückliefert.)
allerdings weiß ich auch nicht, wie ich diese "Funktion" verwenden kann, wenn es denn überhaupt der richtige Weg ist???
Wäre super, wenn ihr mir nochmal weiterhelfen könntet.
Vielen Dank
Oli
 
Wenn die Umwandlung von Real nach String funzt ist der Rest nur noch eine Kleinigkeit:

Code:
String := '';
String := CONCAT(String, REAL_TO_STRING(Var1));
String := CONCAT(String, REAL_TO_STRING(Var2));
String := CONCAT(String, REAL_TO_STRING(Var3));
String := CONCAT(String, REAL_TO_STRING(Var4));
String := CONCAT(String, REAL_TO_STRING(Var5));
String := CONCAT(String, REAL_TO_STRING(Var6));
String := CONCAT(String, REAL_TO_STRING(Var7));
String := CONCAT(String, REAL_TO_STRING(Var8));
String := CONCAT(String, REAL_TO_STRING(Var9));
String := CONCAT(String, REAL_TO_STRING(Var10));
String := CONCAT(String, REAL_TO_STRING(Var11));
String := CONCAT(String, REAL_TO_STRING(Var12));
String := CONCAT(String, REAL_TO_STRING(Var13));
String := CONCAT(String, REAL_TO_STRING(Var14));
String := CONCAT(String, REAL_TO_STRING(Var15));
String := CONCAT(String, REAL_TO_STRING(Var16));
String := CONCAT(String, REAL_TO_STRING(Var17));
String := CONCAT(String, REAL_TO_STRING(Var18));
String := CONCAT(String, REAL_TO_STRING(Var19));
String := CONCAT(String, REAL_TO_STRING(Var20));
 
Habe gerade etwas in FUP rumgespielt. Den Baustein REAL_TO_STRING gibt es auch in FUP. Dazu fügst du einfach einen neuen Baustein ein und beschreibst diesen mit "REAL_TO_STRING". Danach kannst die einzelnen Strings, die du aus deinen Reals gewonnen hast mit CONCAT zusammenfügen. Hab dir im Anhang mal ein Beispiel für 2 Variablen.
 

Anhänge

  • Test_RealToString.jpg
    Test_RealToString.jpg
    26,2 KB · Aufrufe: 51
Zuviel Werbung?
-> Hier kostenlos registrieren
OK, prima.
Also mit dem CONCAT und zwei String-Variablen funktioniert es.
Aber wie Du das mit den 20 Variablen meinst, kann ich gerade nicht nachvollziehen. Willst Du damit einen neuen FB erstellen mit 20 Real Variablen am Eingang und als Ausgang eine String-Variable?
Kann ich da einen neuen Baustein erstellen (FB) und das einfach so runtertippen? Könntest Du dazu vielleicht noch ein Beispiel mit anhängen?

Und dann noch eine Frage zum FilePuts: wie kann ich erreichen, dass meine Variablen entweder Kommagetrennt o.ä. geschrieben werden und dass danach ein return mitgeschickt wird, so dass beim nächsten Mal in eine neue Zeile geschrieben wird?
Vielen vielen Dank
Oli
 
Also ich hab dir mal ein Beispiel im Anhang. Was mir allerdings aufgefallen ist: Ein normaler String kann maximal 80 Zeichen lang sein. Das macht Probleme. Du müsstest also immer nur 3-4 Variablen zu einem String zusammenfügen. und diese Strings dann nacheinander in die Datei schreiben.

Die Trennzeichen zwischen den einzelnen Werten bekommst du hin, indem du auch wieder mit CONCAT das Trennzeichen zum String hinzufügst, nachdem ein neuer Wert hinzugefügt wurde. Das gleiche mit dem Zeilenumbruch. Dazu fügst du einfach "$n" hinzu.
Kannst beides aber auch im Beispiel nachschauen.
 

Anhänge

  • Test_20RealToString.rar
    3 KB · Aufrufe: 47
Nachtrag zu den Strings:

Habe gerade im InfoSystem von TwinCAT gesehen, dass man Strings auch eine Zeichenlänge vorgeben kann. Allerdings ist 255 die maximale Zeichenlänge.

Ersetze dafür einfach in der Deklaration "STRING" durch "STRING(255)".
 
Zurück
Oben