Dlog_Store_File_Csv / Codesys 3.5 / Festo CECC-D

Begonnen von mtn, 02. Juni 2014, 09:27:31

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

mtn

Schönen guten Tag!
Ich stehe im Moment vor einem kleinen Problem. Folgende Situation:
Es sollen Messdaten (Druck& Temperatur von Sensoren) außerhalb der SPS abgespeichert werden. Hierfür werden bisher die Daten von den Messgebern eingelesen, für eine Visualisierung angepasst und angezeigt. Gleichzeitig werden alle Messdaten (bisher nur zum Test mit 1x Druck und 1x Temp.-Wert) in ein Array geschrieben.
Dieses Array möchte ich in eine CSV datei schreiben bzw anzeigen lassen.
Das Problem ist die Verwendung von dem "DLOG_STORE_FILE_CSV" Baustein.
Ich habe mich schon ewig durch alle möglichen Foren und PDF's gelesen, komme aber noch nicht wirklich auf einen grünen Zweig, wie ich diesen Baustein denn jetzt verwenden kann.
Zum testen habe ich den Baustein mal nutzen wollen.
Die Ein- und Ausgänge habe ich in CFC "verdrahtet". Wenn ich das ganze jetzt simulieren möchte, kommt der Fehler
                ------ Übersetzungslauf gestartet: Applikation:
C0077:  Unbekannter Typ: 'DLOG_STORE_FILE_CSV'
C0035:  Programmname oder Funktionsblockinstanz an Stelle von 'DLOG_STORE_FILE_CSV_1' erwartet
C0032:  Typ 'Unbekannter Typ: 'DLOG_STORE_FILE_CSV_1.ERROR_C'' kann nicht in Typ 'DWORD' konvertiert werden
C0032:  Typ 'Unbekannter Typ: 'DLOG_STORE_FILE_CSV_1.ERROR_T'' kann nicht in Typ 'BYTE' konvertiert werden
                Kompilierung abgeschlossen -- 4 Fehler, 19 Warnungen
                Übersetzung abgeschlossen -- 4 Fehler, 19 Warnungen : Kein Download möglich!

Die "ERROR_C" und "T" sind (wie im Bibliotheksverwalter angezeigt) DWORD & BYTE.

Vielleicht kann mir jemand helfen, das zum laufen zu kriegen ?

Achso, Sollzustand ist :
Messdaten vom Messgeber -> (umwertung für Anzeige& Anzeigen) -> Speichern im Array -> Exportieren in CSV


System ist
- Codesys 3.5V Sp 4 Patch 3
- Festo CECE-D Steuerung
- Oscat Basic (3.3.3.0) & Network (1.2.1.0)

Leider ist diese auch mein erstes Projekt, dehalb hab ich noch keine Erfahrung o.ä., wenn sich jemand dem Problem annehmen würde, dann bitte "einsteigerfreundlich" erklären  ;)

Danke schonmal!


peewit

öffne die network bibliothek als normales projekt und schaue in den ordner "Demo"
dort sind zu den verschiedensten themen demo programme abgelegt und nur ausgeblendet sind

das sind autoark funktionierende demo programme wo man maximal netzwerk parameter oder dateinamen noch anpassen muss


schau dir das mal an...


wenn du dort auch nicht weiterkommst, dann solltest du dein beispiel programm online stellen bzw. auf jedenfall bildschirmhardcopy online stellen

damit man sehen kann was genau falsch ist...

mtn

danke peewit, das hilft schonmal ein bisschen weiter: ich habe die .lib importiert, da kommen allerdings einige meldungen. ich habe von allen mal ein einzelnes bild gemacht, siehe anhang. (musste leider bisschen zusammenpfuschen, max 4 bilder pro anhang...)

die beschriftung auf den bausteinen aus der demo datei sind irgendwie weg  :o wie man auf dem letzten bild sieht, kann ich die sachen auch nicht übersetzen oder so, das ist alles ausgegraut.
ich hoffe, das hilft.
danke schonmal für die hilfe !

[gelöscht durch Administrator]

peewit

hi

ich sehe gerade das du codesys 3.x benutzt
unsere codesys bibliotheken sind alle auf basis 2.x erstellt

die network bibliothek benötigt selber die oscat basic bibliothek und diverse system.libs

du benötigst eine konvertierte / angepasste version der bibliothek...

schau mal im forum nach usern die selber mit codesys 3.x arbeiten , die können dir dann eventuell weiterhelfen

http://www.oscat.de/community/index.php/topic,1784.msg11329.html#msg11329

mtn

okok, ich hab mir die angepassten versionen organisiert.
inzwischen habe ich auch den "DLOG_FILE_CSV_DEMO" baustein in mein projekt gekriegt. :)
wenn ich das ganze jetzt übersetzen möchte, kommt der fehler

"(Element 7 (Impl)): C0201:  Typ 'DLOG_DATA' entspricht nicht dem Typ 'DLOG_DATA' von VAR_IN_OUT 'X' "
6 mal das ganze.

mal ne andere frage: wenn ich dann irgendwann mal den baustein soweit habe, dass er funktioniert, kann man den dann überhaubt im "simulationsmodus" testen ? wenn der ne csv datei erzeugen soll, die er auf das filesystem der sps packt, und ich bei der simu garkein solches habe ?

vielen dank schonmal für deine hilf peewit, hat mir schon ein bisschen weiter geholfen! :)


peewit

in manchen simulatorionumgebungen ist der dateizugriff und ethernetkommunikation oft nicht oder teil eingeschränkt möglich
wenn du aber eine soft-plc als "simulation" verwendest stehen deine chancen ziemlich gut.

ob es funktioniert musst du je nach software und version mit dem hersteller / lieferanten klären


deine übersetzungsfehler musst du mit codesys 3.x user checken
ich habe keine 3.x umgebung und kann dich dahingehend nicht unterstützen

mtn

die fehler an sich haben sich geändert: ich habe den baustein aus der net.lib exportiert, dabei habe ich datenstrukturen mitgenommen, die wohl "DLOG_DATA" hießen. wenn ich diese umbenenne, bzw auskommentiere, lässt sich alles wunderbar übersetzen.
da ich mir nicht sicher bin, ob meine sps in der simulation zum testen geeignet wäre, habe ich das ganze mal auf den controller selber übertragen.
und jetzt steh ich wie'n ochse vor'm berg...
wenn ich das der doku richtig entnommen habe, dann kann ich mit dem man_trigger eine manuelle speicherung meiner daten auslösen?
1) wenn ich "keine daten" habe oder die daten "nichts" sind, legt er dann trotzdem die datei an?
2) die sps hat ein verzeichnis "/", in dem die projekt-daten usw liegen. würde der baustein in eben diese verzeichniss auch die .csv legen ?
3) die "filename" ist im demo projekt "test_#R.csv", siehe "3)" -> muss ich keinen absoluten pfad für die datei angeben?
4) ich hab den enable und den man_trigger mit 2 knöpfen auf ner visu abgelegt, wenn ich die jetzt (in welchem muster auch immer  ;D) drücke, kriege ich keine datei erzeugt  :o

vielleicht kann mir ja jemand helfen, der schonmal mit v3.x ähnliches realisiert hat!

danke schonmal& einen schönen tag!

peewit

#7
der sinn eines datenlogges ist ja das man dieses eine gewisse menge an prozessdaten zuführt.
diese haben natürlich zu jeden zeitpunkt irgendeinen wert.

1. wenn du nun mittels trigger eine speicherung auslöst dann werden eben diese momentanen zustände gespeichert.

2. infos zum syntax von dateinamen und pfadangaben zu deiner sps musst du dir selber organisieren, da diese sehr verschieden sein können
    --> hersteller infos !
    oft ist es so wenn kein pfad angebgeben ist dann landen die dateien im system "root" ordner .. wo auch immer das dann ist.

3. gleiche wie punkt 2

4. keine datei ?
    es kann sein das der dateiname nicht in ordnung ist, dann sollte es wahrscheinlich aber auch eine fehlermeldung geben.
    oder die datei wird sehr wohl angelegt nur ist sie nicht dort wo du sie vermutest !


es kann aber auch sein das durch eine abweichung in der implementation deiner sps der datenlogger nicht funktioniert
auch das wäre möglich

du solltest mal ein paar online screenshots deines programms bzw. der variablen posten, dann kann man vielliecht schon klare fehler und ursachen erkennen

mtn

ich hab mal bilder von dem logger gemacht, so, wie er im moment bei mir im programm sitzt.
was mir grade aufgefallen ist: die zeit, die am RTC_2 ist, geht nicht weiter, auch, wenn das projekt übertragen wurde und online ist. :o
du sagtest, vielleicht landen die daten ja im root ordner... soeinen habe ich garnicht, wie auf bild 6 erkennbar, habe ich nur nen paar datein und die ordner "prj" und "visu". ich weis nicht, ob es noch andere strukturen gibt, die ich hier einfach nur nicht angezeigt kriege ?

wenn meine RTC zeit schon nicht weiter geht, als sie im moment ist, dann sollte ich mich vielleicht auch nicht wunder, wieso mein logger nix macht ?
womit sich die frage stellt, wieso nix gezählt wird... laut oscat doku sollte bei einem enable oder beim start die zeit kontinuierlich weiter laufen.
(in anderen bereichen meines programms habe ich ebenfals 'n RTC sitzen, der rennt ohne probleme vor sich hin)


fehler gibts beim übersetzen und übertragen keine.

anbei sind mal bilder von dem baustein im eingeloggten zustand, von den variablen im on- und offline zustand und von den datein, die auf der sps liegen ( oder die, welche in codesys im "datein" reiter der steuerung angezeigt werden. vielleicht gibt es ja noch welche, die dort nicht zu sehen sind ?)

gibt es aushalb der bausteine noch "sinnvoll" varianten, eine datei (erstmal) auf der sps zu speichern? besser gesagt, wie kann man auf das dateisystem zugreifen und dort datein verwalten?


an dieser stelle nochmal danke peewit für deinen langen atem  ;)

[gelöscht durch Administrator]

peewit

wenn die übergebene zeit stillsteht dann wird auch nicht passieren !

der baustein RTC_2 ist nur für das demoprojekt gedacht, da jede sps einen anderen zugang zu echtzeituhr hat

tausche das einfach aus gegen deinen standard rtc baustein
wichtig ist der datenlogger eine lebende uhrzeit bekommt.


mtn

#10
okok, um das mit der zeit zu umgehen habe ich einfach mal den ausgang meiner korrekt laufenden zeit (zumindest läuft sie weiter) genommen, in den globalen variablen als "DATE_AND_TIME" hinterlegt und in dem demo programm 1:1 auf "cur_time" gelegt. bild-anhang zeigt das problem  :o wieso geht die cur_time denn nicht weiter...



edit: jetzt hab ich ne zeit am "DLOG_STORE_FILE_CSV" eingang "DTI".
enable ist true, filename ist " 'test_#A' " trig_m hab ich mit 'nem knopf visualisiert.
sollte ich jetzt also in der lage sein, irgendwie eine datei erzeugen zu können ? ;D

edit2: ich hatte vorhin ja gesagt, das ich nur ein paar datein und 2 ordner auf der sps sehe... wenn ich im reiter "sps shell" gucke und dann per shellcmd ls gucke, zeigt er mir noch andere strukturen an. leider kann ich sie nicht aufrufen, da beim versuch, in das verzeichnis zu wechseln  immer "executed returning no character" kommt

[gelöscht durch Administrator]

peewit

das problem kann ja nichts mit den bausteine zu tun haben
da die zeit den baustein nur übergeben wird, kann der baustein auch nicht schuld sein das deine uhr nicht läuft

vermutlich hast du im programm an einer anderen stelle noch einen alten code drinnen der dir die uhrzeit variable zyklisch wieder über schreibt..

schaut nach klassischen programmierfehler aus....

mir dem kleinen codeschnipsel als bild kann dir aber auch keine helfen.
weil man sonst nichts darauf sieht...


mtn

#12
ich schick dir per pn mal 'ne text datei mit sämtlichem code, ok?
vielleicht seh ich den wald vor lauter bäumen ja wirklich nicht mehr ...



edit: hier sind die bausteine samt variablen, die im moment verbaut sind bei mir, als bild.

[gelöscht durch Administrator]

mtn

jetzt melde ich mich doch nochmal  :)
ich habe es inzwischen hingekriegt, dass ich etwas speichern kann!
es wird eine datei angelegt, die auch annähernd den inhalt hat, den ich haben möchte.
allerdings komme ich jetzt mit der struktur der zeilen/spalten nicht ganz klar.
ich hab als "SEP" nen ";" vorgesehen (33 ascii). die spaltenüberschrift per column am dlog_string baustein lässt sich dann auch wunderbar einstellen (mehrere "namen" mit ; getrennt für die spalten halt)
und dann kommt das problem:
ich möchte die datei quasi nach diesem format aufbauen:
XXX                   YYY             ZZZ
AA                    BB               CC
AB                    BC               CD

die oberste zeile funktioniert wunderbar.
ich weis nur nicht, wie ich am dlog_string baustein den STR eingang beschicken muss, damit ich mehrere variablnen damit "zusammenfügen" kann.
versuche wie VarA;VarB // "VarA;VarB" // 'VarA;VarB' // (VarA;VarB)  haben nicht viel gebracht. es wird immer nur die 1. spalte beschickt, wenn nicht vorher beim übersetzen fehler kommen

danke schonmal für die antwort :)

peewit

hi

wenn ich deinen text richtig gelesen habe, dann würde ich sagen das du das prinzip des daten loggers gar nicht verstanden hast

du musst bzw. brauchst gar nichts selber per ";" zusammenfügen

angenommen die möchtest drei Werte (3 spalten) aufzeichnen und der prozesswert ist als real wert vorhanden.
dann nimmst du einfach dreimal eine eigene baustein-instanz von DLOG_TO_REAL und füllst du parameter von diesen aus...

mehr ist es nicht.

wenn du selber irgendwie elemente mittels ";" zusammenfügst dann kann nur fehlerhaftes rauskommen !
das darfst du nicht -> falsche handhabung

schau mal die doku bei "daten logger" dort ist auch ein beispiel angebildet