Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 24 von 24

Thema: Datei erzeugen und Variablen in Excel

  1. #21
    Registriert seit
    28.09.2008
    Beiträge
    53
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ja habe ich gemacht aber er erzeugt die Datei nicht so wie du und ich es vielleicht gedacht haben, obwohl ich das mit eingefügt habe. Aber ich will da mal noch etwas probieren dran, um auch etwas dafür zu tun. Damit du stolz sein kannst auf mich. smilie

    Bin nebenbei noch mit einem Emailversand und einer Sprachen umschaltung beschäftigt die ich ebenfalls noch mit einbinden möchte.

    Bei der Emailerstellung ist halt das Problem das er keine 2 Empfänger akzeptiert. Zumindest nicht in meiner Schreibweise. Die Email kommt immer nur bei dem ersten an. Obwohl ich es so schreibe

    VAR
    bSend: BOOL;
    bResult: BOOL;
    stServerName: STRING(80):= '172.16.24.187';
    szFrom: STRING(80):= 'mustermann@mustermann.de';
    szTo: STRING(80):= 'chef@mustermann.de;techniker@mustermann.de';
    szSubject: STRING(80):= 'Dies ist eine Fehlermeldung';
    szBody: STRING(255):= 'Die Temperatur der Anlage ist überschritten';
    END_VAR


    IF bSend THEN
    bResult:= FALSE;
    bResult:= SendMail(
    stServerName:= stServerName,
    stFrom:= szFrom,
    stTo:= szTo,
    stSubject:= szSubject,
    stBody:= szBody);
    bSend:= FALSE;
    END_IF

    Normalerweise kannst du ja im Email Prog wenn du mehrere Emails hast sie alle mit einem ; hintereinander schreiben. Aber das Programm setzt nicht beide Emails ab.

    Und bei der Sprachenumschaltung hab ich noch eine genau Idee wie ich das hinbekommen könnte. Ich da was gelesen das du ne xml datei erzeugen musst. Allerdings weis ich noch nicht wie ich dann jeweils die Button beschriften muss. Ob %s in dem Dialogfenster Text ausreicht oder nicht. Das probiere ich am Wochenende noch ein wenig rum. Weil es für mich immer noch darum geht ich brauch ja ein Querverweis auf die XML Datei. Mal schauen.

  2. #22
    Registriert seit
    28.09.2008
    Beiträge
    53
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zoto jetzt läuft es. Kann es aber sein das er zuviel Zeit braucht. Denn wenn ich ihm das Signal gebe und ihm es ca. 5 sekunden später wieder nehme dann sollten ja 2 Einträge in der Datei sein aber es immer nur eine. Muss ich jetzt mit einem Merker arbeiten der das im nachhinein noch reinschreibt, das er wieder geschaltet hat?

    MFG Dennis

  3. #23
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Zitat Zitat von dennish23 Beitrag anzeigen
    Zoto jetzt läuft es. Kann es aber sein das er zuviel Zeit braucht. Denn wenn ich ihm das Signal gebe und ihm es ca. 5 sekunden später wieder nehme dann sollten ja 2 Einträge in der Datei sein aber es immer nur eine. Muss ich jetzt mit einem Merker arbeiten der das im nachhinein noch reinschreibt, das er wieder geschaltet hat?

    MFG Dennis
    Ja das schreiben Dateien kann je nach Plattform richtig lange dauern. Ich hatte vor kurzem Messwerte auf einer WAGO 750-841 geschrieben die in einer kurzen abfolge kamen. Dann hat das Schreiben der Datei auch zu einer "Pause" des SPS-Zyklus geführt (ich hatte so ca. 3s).

    Die Lösung hat sich dann aus zwei Bestandteilen zusammen gesetzt.

    1. Nicht direkt alles schreiben sondern einen FIFO Buffer dazwischen bauen.

    2. Habe ich einen Ereignisgesteuerten Task verwendet der eine geringere Priorität hatte als der bei mir Zyklische (also nicht Freilaufende) SPS Zyklus.

    Ein Ereignisgesteuerter Task wird über den Flankenwechsel 0->1 einer Boolvariable gesteuert.

    hier mal die Bilder zur Einstellung der Tasks.
    Angehängte Grafiken Angehängte Grafiken
    If you open your Mind too much, your Brain will fall out.

  4. #24
    Registriert seit
    28.09.2008
    Beiträge
    53
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi Zotos

    Ich habe das Programm soweit fertig. Allerdings habe ich noch ein Problem welches ich ja schon versucht habe zu klären in meinem Programm aber es funktioniert nicht richtig.

    Ich möchte an erster Stelle feststellen ob der Client Online ist. Das ganze versuche ich mit der xConnectionOk_client_1 Variable. Sollte der Client offline sein soll er es mir in die Datei schreiben. Jetzt ist es mittlerweile so das er es mir schreibt, aber auch schreibt er mir das das Thermometer nicht angeschlossen ist. Obwohl das ja noch nicht bekannt ist, weil der Client ja offline ist. Darüber kann ja nur eine genaue Auskunft erteielt werden in der Datei wenn der Client online ist.

    Vielleicht kannst du dort mal drüber schauen wo mein Fehler ist. Ich selbst habe da das ganze Wochenende dran verbracht.

    Hier die Variablen Deklaration:


    PROGRAM Dateierzeugung
    VAR
    FileHandel : DWORD; (*Handel*)
    FilePath : STRING := 'disk_mmc\'; (* Ich nutze die CoDeSysRTE und habe daher ein Dateisystem ala Windows *)
    CurrentString : STRING; (*Temp String zum aufbauen der zu schreibenden Zeile*)
    RetValWritten : DWORD; (*Rückgabewert der Schreibfunktion*)

    Thermo_ort : STRING := 'SPS 1'; (*Inhalt Spalte Nr.3*)
    Thermo_ok : STRING := 'Temperatur im grünen Bereich'; (*Inhalt Spalte Nr.4*)
    Thermo_not : STRING := 'Thermometer nicht angeschlossen'; (*Inhalt Spalte Nr.4*)
    Temp_ueber : STRING := 'Temperatur überschritten'; (*Inhalt Spalte Nr.4*)
    Temp_unter : STRING := 'Temperatur unterschritten'; (*Inhalt Spalte Nr.4*)
    Netzwerk_client_1_ok : STRING := 'Client 1 online'; (*Inhalt Spalte Nr.4*)
    Netzwerk_client_1_not : STRING := 'Client 1 offline'; (*Inhalt Spalte Nr.4*)

    MonatString : ARRAY[1..12] OF STRING(10) := 'Januar', 'Februar', 'Maerz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember';
    Monat_alt: INT := 0;

    Thermometer_angeschlossen: BOOL;
    Temperatur_ueberschritten: BOOL;
    Temperatur_unterschritten: BOOL;
    DatenString : STRING; (*Temp String zum schreiben der Zeile*)
    DatenString_old : STRING; (*Temp String zum schreiben der Zeile*)
    xConnectionOk_client_1_old: BOOL;
    END_VAR



    Hier das Programm:

    (*Hilfsvariablen Deklaration*)
    Thermometer_angeschlossen:=eingang_client_1[4]; (*Die eingang_client_1[] sind global Variablen*)
    Temperatur_ueberschritten:=eingang_client_1[2];
    Temperatur_unterschritten:=eingang_client_1[1];

    DatenString:='test'; (*Hier wird ein DatenString festgelegt zum Schreiben der Datei*)

    IF Monat <> Monat_alt THEN (*Hier wird der Monat für den DateiNamen festgelegt*)
    FilePath := '\disk_mmc\Fehlermeldedatei_';
    FilePath := CONCAT(FilePath, MonatString[Monat]);
    FilePath := CONCAT(FilePath, '_');
    FilePath := CONCAT(FilePath, INT_TO_STRING(Jahr));
    FilePath := CONCAT(FilePath, '.csv');
    Monat_alt := Monat;
    END_IF

    (* Öffne die Datei um Daten anzufügen *)
    FileHandel:= SysFileOpen(FilePath, 'a');

    (* Erkennen ob es eine neue Datei ist *)
    IF SysFileGetPos(FileHandel) = 0 THEN
    (* Belibige Gesamtüberschrift *)
    CurrentString:= 'Fehlermeldedatei';
    CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
    CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
    RetValWritten:= SysFileWrite(FileHandel, ADR(CurrentString), LEN(CurrentString));

    (* Spaltenüberschrift *)
    CurrentString:= 'Datum;Uhrzeit;Ort;Beschreibung';
    CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
    RetValWritten:= SysFileWrite(FileHandel, ADR(CurrentString), LEN(CurrentString));
    END_IF

    (* Datei schließen *)
    SysFileClose(FileHandel);


    (* --Zeile zusammenbauen-- *)

    (* Spalte 1: DATUM *)
    CurrentString:= CONCAT(INT_TO_STRING(Tag), '.');
    CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Monat));
    CurrentString:= CONCAT(CurrentString, '.');
    CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Jahr));
    CurrentString:= CONCAT(CurrentString, ';');

    (* Spalte 2: UHRZEIT *)
    CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Stunde));
    CurrentString:= CONCAT(CurrentString, ':');
    CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Minute));
    CurrentString:= CONCAT(CurrentString, ':');
    CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Sekunde));
    CurrentString:= CONCAT(CurrentString, ';');

    (* Spalte 3: NAME *)
    CurrentString:= CONCAT(CurrentString, Thermo_ort);
    CurrentString:= CONCAT(CurrentString, ';');

    (* Spalte 4: MELDUNG *)

    IF xConnectionOk_client_1 <> xConnectionOk_client_1_old THEN
    (* Öffne die Datei um Daten anzufügen *)
    FileHandel:= SysFileOpen(FilePath, 'a');
    (* --Zeile zusammenbauen-- *)

    (* Spalte 1: DATUM *)
    CurrentString:= CONCAT(INT_TO_STRING(Tag), '.');
    CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Monat));
    CurrentString:= CONCAT(CurrentString, '.');
    CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Jahr));
    CurrentString:= CONCAT(CurrentString, ';');

    (* Spalte 2: UHRZEIT *)
    CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Stunde));
    CurrentString:= CONCAT(CurrentString, ':');
    CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Minute));
    CurrentString:= CONCAT(CurrentString, ':');
    CurrentString:= CONCAT(CurrentString, INT_TO_STRING(Sekunde));
    CurrentString:= CONCAT(CurrentString, ';');

    (* Spalte 3: NAME *)
    CurrentString:= CONCAT(CurrentString, Thermo_ort);
    CurrentString:= CONCAT(CurrentString, ';');

    (* Spalte 4: MELDUNG *)
    IF xConnectionOk_client_1 = TRUE THEN (*Hier soll überprüft werden ob Client 1 online ist und in die Datei geschrieben werden*)

    CurrentString:= CONCAT(CurrentString, Netzwerk_client_1_ok);
    CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
    END_IF

    IF xConnectionOk_client_1 = FALSE THEN (*Hier wird festgestellt das Client 1 offline ist und in die Datei geschrieben*)
    CurrentString:= CONCAT(CurrentString, Netzwerk_client_1_not);
    CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
    END_IF

    (* Zeile in die Datei schreiben *)
    RetValWritten:= SysFileWrite(FileHandel, ADR(CurrentString), LEN(CurrentString));
    (* Datei schließen *)
    SysFileClose(FileHandel);
    END_IF

    IF xConnectionOk_client_1 = xConnectionOk_client_1_old THEN

    IF Temperatur_ueberschritten AND Thermometer_angeschlossen THEN
    CurrentString:= CONCAT(CurrentString, Temp_ueber);
    CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
    DatenString:= CONCAT(DatenString, Temp_ueber);
    END_IF

    IF Temperatur_unterschritten AND Thermometer_angeschlossen THEN
    CurrentString:= CONCAT(CurrentString, Temp_unter);
    CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
    DatenString:= CONCAT(DatenString, Temp_unter);
    END_IF

    IF Thermometer_angeschlossen AND NOT Temperatur_ueberschritten AND NOT Temperatur_unterschritten THEN
    CurrentString:= CONCAT(CurrentString, Thermo_ok);
    CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
    DatenString:= CONCAT(DatenString, Thermo_ok);
    END_IF

    IF Thermometer_angeschlossen = FALSE THEN
    CurrentString:= CONCAT(CurrentString, Thermo_not);
    CurrentString:= CONCAT(CurrentString, '$R$N'); (* Zeilenumbruch *)
    DatenString:= CONCAT(DatenString, Thermo_not);
    END_IF

    (* Neue Daten ? *)

    IF DatenString <> DatenString_old THEN

    (* Öffne die Datei um Daten anzufügen *)
    FileHandel:= SysFileOpen(FilePath, 'a');

    (* Zeile in die Datei schreiben *)
    RetValWritten:= SysFileWrite(FileHandel, ADR(CurrentString), LEN(CurrentString));

    (* Datei schließen *)
    SysFileClose(FileHandel);

    END_IF
    END_IF
    (* Flankenauswertung *)
    DatenString_old:=DatenString;
    xConnectionOk_client_1_old:=xConnectionOk_client_1;


    Auch läuft das FileHandle permanent. Ich habe das bisher so verstanden das es sich nur verändert wenn ein neuer Eintrag in der Datei erfolgt ist.

    Also wie gesagt vielleicht findest den Fehler in meiner Schreibweise.

    MFG Dennis

Ähnliche Themen

  1. EDS-Datei erzeugen
    Von jeanfischer im Forum Feldbusse
    Antworten: 8
    Letzter Beitrag: 24.02.2011, 15:07
  2. CSV Datei erzeugen
    Von Bensen83 im Forum HMI
    Antworten: 5
    Letzter Beitrag: 20.03.2010, 16:11
  3. Antworten: 1
    Letzter Beitrag: 02.03.2009, 13:04
  4. Datenbaustein aus Excel erzeugen
    Von heizer43d185 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 27.06.2008, 21:15
  5. Antworten: 5
    Letzter Beitrag: 17.01.2008, 14:23

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •