19.01.2010 14:18 | |
Beigetreten: 16.01.2006 Letzter Bes: 02.08.2024 Beiträge: 125 Bewertung:
|
Hallo dundee, du schreibst die S7-Zeit mit SFC 1 in einen Datenbaustein und legst eine Rohdatenvarible auf den 8 Byte langen DATE_AND_TIME-Bereich an. Diese Variable übergibst du an das folgende Script: char *GetS7DateTimeString(BYTE *DT) { // Die Funktion wandelt eine S7-Zeit vom Typ DT in einen Datumsstring //incl. Uhrzeit. // Es muss ein Zeiger auf ein 8 Byte langes Byte-Array im DT-Format} Als Ergebnis kommt ein String der Form TT.MM.JJ HH:MM:SS zurück. mfg Cookie |
Für diesen Beitrag bedanken sich
2 Benutzer |
19.01.2010 14:56 | |
Beiträge: 2 Bewertung:
|
Hallo Cookie, Danke erstmal für deine Mühe, das mit dem sprintf usw. ist kein Problem, aber erkläre bitte einem C-Anfänger den ersten Teil deines Scriptes. (Zeiger usw. ) Habe laut dem oben erwähnten FAQ die Variablen in einer Strukturvariable byteweise vorliegen. |
20.01.2010 09:15 | |
Beigetreten: 16.01.2006 Letzter Bes: 02.08.2024 Beiträge: 125 Bewertung:
|
Hallo dundee, also: Damit ein C-Script einen String oredntlich zurückgibt, muss er eben fogendermaßen definiert sein: char *stringvariable; stringvariable = SysMalloc(<stringlaenge> + 1); // Reservieren von Speicher. Für eine Varibale der Form TT.MM.JJJJ HH:MM:SS sind also mindestens 20 Byte erforderlich. Wenn du deine Variable eh schon als Struktur hast (ich nehme an, jeweils ein numerischer Wert für Tag, Monat etc.), musst du halt alle Member-Variablen der Struktur einzeln übergeben, also z.B. Datum.Tag, Datum.Monat etc. Wichtig ist nur, dass die BCD-codierten Werte aus der SPS eben BCD-codiert zurückgegeben werden. Das passiert halt mit der Formatanweisung %02X beim sprintf. mfg Cookie |
Folgen Sie uns auf