String laden und in einem DB Schreiben

free_tv

Level-2
Beiträge
17
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.

Bin ein SPS neuling und habe eine Frage:

ich möchte im TP170A die Wochentage anzeigen.
Klappt alles schon soweit aber in der Anzeige werden nur zwei zeichen angezeigt.
z.B. sonntag so, montag mo usw.

ich habe das programm folgend aufgebaut.

fc50
und
db50


fc 50

//aus den iec
CALL FC 6 // DATUM
IN :=#ag_jetzt_datum_zeit
RET_VAL:="DB_Datum_Uhrzeit".DATUM
NOP 0

CALL FC 8 // Uhrzeit
IN :=#ag_jetzt_datum_zeit
RET_VAL:="DB_Datum_Uhrzeit".Uhrzeit
NOP 0

CALL "Wochentag" // Wochentag
IN :=#ag_jetzt_datum_zeit
RET_VAL:="DB_Datum_Uhrzeit".Wochentag
NOP 0


L 1
L "DB_Datum_Uhrzeit".Wochentag
==I
SPB m001

L 2
L "DB_Datum_Uhrzeit".Wochentag
==I
SPB m002

L 3
L "DB_Datum_Uhrzeit".Wochentag
==I
SPB m003

L 4
L "DB_Datum_Uhrzeit".Wochentag
==I
SPB m004

L 5
L "DB_Datum_Uhrzeit".Wochentag
==I
SPB m005


L 6
L "DB_Datum_Uhrzeit".Wochentag
==I
SPB m006


L 7
L "DB_Datum_Uhrzeit".Wochentag
==I
SPB m007


BE



m001: L DB50.DBD 20
T DB50.DBD 8

BE


m002: L DB50.DBD 32
T DB50.DBD 8
BE


m003: L DB50.DBD 44
T DB50.DBD 8
BE



m004: L DB50.DBD 56
T DB50.DBD 8
BE


m005: L DB50.DBD 68
T DB50.DBD 8
BE

m006: L DB50.DBD 80
T DB50.DBD 8
BE

m007: L DB50.DBD 92
T DB50.DBD 8
BE



DB 50
+ 0.0 DATUM DATE D#1990-1-1 Ausgabe des DATUMS der CPU
.
.
.
+ 8.0 Ausg_Wochentag STRING[10] ' '
+20.0 Sonntag STRING[10] 'Sonntag'
moz-screenshot.jpg
+32.0 Montag STRING[10] 'Montag'
.
.
.
usw.


Danke für eure Hilfe.


moz-screenshot-1.jpg
 
Halo zusammen,

Meines WIssens kann am TP170A keine Textliste dargestellt werden.
Hatte ein ähnliches Problem auch schon. Ist eigentlich strohdoof das Ding !
Beim TP170B sieht die Sache schon wieder anders aus. Siemens...

SchönenTag Euch allen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
nairolf hat recht textliste geht im tp170a nicht.

das läuft. ist eine quelle.
Code:
DATA_BLOCK DB 1
TITLE =
VERSION : 0.1

  STRUCT  
   dummy : STRING  [10 ]; 
   tag1 : STRING  [10 ] := 'Sonntag'; 
   tag2 : STRING  [10 ] := 'Montag'; 
   tag3 : STRING  [10 ] := 'Dienstag'; 
   tag4 : STRING  [10 ] := 'Mittwoch'; 
   tag5 : STRING  [10 ] := 'Donnerstag'; 
   tag6 : STRING  [10 ] := 'Freitag'; 
   tag7 : STRING  [10 ] := 'Samstag'; 
  END_STRUCT ; 
BEGIN
   dummy := ''; 
   tag1 := 'Sonntag'; 
   tag2 := 'Montag'; 
   tag3 := 'Dienstag'; 
   tag4 := 'Mittwoch'; 
   tag5 := 'Donnerstag'; 
   tag6 := 'Freitag'; 
   tag7 := 'Samstag'; 
END_DATA_BLOCK
DATA_BLOCK DB 3
TITLE =
VERSION : 0.1

  STRUCT  
   d1 : INT ; 
   heute : STRING  [10 ]; 
  END_STRUCT ; 
BEGIN
   d1 := 0; 
   heute := ''; 
END_DATA_BLOCK
FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1

VAR_TEMP
  Any_Quelle : ANY ; 
  Any_Ziel : ANY ; 
  heute : INT ; 
  anfangsadr_quelle : INT ; 
END_VAR
BEGIN
NETWORK
TITLE =
      L     7; //hier deine tagnummer
      T     #heute; 
      L     12; //weil ein string von 10 12byte belegt
      *I    ; 
      T     #anfangsadr_quelle; 
      L     W#16#1002; //Typ BYTE
      T     LW     0; 
      L     12; //Anzahl Bytes
      T     LW     2; 
      L     1; //DB
      T     LW     4; 
      L     #anfangsadr_quelle; //Anfang der Quelle
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD     6; 
      L     W#16#1002; //Typ BYTE
      T     LW    10; 
      L     12; //Anzahl Bytes
      T     LW    12; 
      L     3; //DB
      T     LW    14; 
      L     2; //Anfang des ziels
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD    16; 

      CALL SFC   20 (
           SRCBLK                   := #Any_Quelle,
           RET_VAL                  := MW   108,
           DSTBLK                   := #Any_Ziel);

END_FUNCTION
 
Aha Danke erste mal !

Noch ne Frage!

Möchte noch einen Bereichszeiger einrichten für DATUM und Uhrzeit.
Wie geht das?

Hab nur Uhrzeit und Datum einzeln in meinem DB vorliegen.

Danke

FREE:TV
 
Zuletzt bearbeitet:
einfach bereichszeiger im tp anlegen.

mit fc3 aus den iec datum und uhrzeit zusammenfassen. dann mit sfc20 in einen db schreiben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber Wie???

Hi,

hier mein Problem dabei!

CALL FC 3
IN1 :=DB50.DBW0
IN2 :=DB50.DBD2
RET_VAL:= - was muss ich hier reinschreiben um den DB zu beschreiben?


DB 50

+ 104.0 Datum_und_Zeit DATE_AND_TIME DT#90-1-1-0:0:0.000
 
DB50.DBD104, wenn im DB als Time_and_Date deklariert (8Byte)
ansonsten eine Temp-Var (XXX) als Time_and_Date deklarieren und an den FC
schreiben, dann nach dem FC-Aufruf

L #XXX
T DB50.DBD104

Ich stell das mal richtig, weils oben Mist ist:

Temp-Var (XXX) als Time_and_Date (8Byte) deklarieren und an den FC
schreiben.
Lokaladresse aus der Deklaration merken (z.B. 12.0), dann nach dem FC-Aufruf:

L LD12
T DB50.DBD104
L LD16
T DB50.DBD108

oder siehe unten Volker SFC20
 
Zuletzt bearbeitet:
geht leider wieder nix

moz-screenshot.jpg
moz-screenshot-1.jpg
moz-screenshot-2.jpg
HI, Danke für deine Antwort.

geht aber leider nix!!

im DB ist Datum_und_Zeit grau hinterlegt!!

+104.0 Datum_und_Zeit DATE_AND_TIME DT#90-1-1-0:0:0.000 DT#90-1-1-0:0:0.000


CALL "D_TOD_DT"
IN1 :="DB_Datum_Uhrzeit".DATUM
IN2 :="DB_Datum_Uhrzeit".Uhrzeit
RET_VAL:=#Dat_und_Zeit


L P##Dat_und_Zeit
T DB50.DBD 104

wenn ich bei RET_VAL:=DB50.DBD 104 reinschreibe ist die Zeile ROT! geht also nicht

hab mir also eine TEMP Variable gebaut namens DAT_und_Zeit (siehe oben)

aber wie gesagt, so kommt zwar keine Fehler, aber im DB steht dafür auch nix drin!!!
so ein sch.....

was mir noch aufgefallen ist, dass er beim DB50.DBD 104 keine symbolik anzeigt, dass sonst sofort geht.


Danke

Stefan
 
Zuviel Werbung?
-> Hier kostenlos registrieren
mit L T geht das nicht.
ein dword hat nur 4 byte.
deshalb musst du das mit der sfc20 machen

Code:
      CALL  SFC   20
       SRCBLK :=#dat_und_zeit
       RET_VAL:=MW108
       DSTBLK :=P#DB50.DBX104.0 BYTE 8     //hier liegt jetzt dein dt
 
Oh, Mann, Freitag :confused:

Ich hab noch geschrieben 8 Byte, dann aber wohl das Hirn abgestellt,
Er könnte auch die Lokaldatenwort-Adresse hernehmen und 2 DBD umtransferieren, aber der SFC20 ist besser.
 
passiert schon mal. wir sind ja auch nicht mehr die jüngsten. :rolleyes:

klar, ld ginge natürlich auch aber da ich die adresse nicht kannte hab ich's so geschrieben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
JUHHHHHHHHHHHHHH jetzt geht es

Hallo zusammen.

jetzt geht alles!!!!!!!!!!!!!!!!

P#DB50.DBX104.0 BYTE 8
Das war der gesuchte befehl!!!!!!!!!!!!!!!!!

Auch mein Obengenannes problem ist damit beseitigt.
String aus einem DB laden und einfügen.


D A N K E an allen die mir geholfen haben.

Nur noch ein kleines problemchen hab ich festgestellt.

Der TP 170a Bereichszeiger, den ich jetzt auf den DB zeigen lasse.
Macht immer noch mucken. Warum keine Ahnung.
Wenn ich den DB auf ein Ausgabe feld bringe zeigt er mir aber das richtige Datum bzw. Uhrzeit an.
Muss halt jetzt die Systemzeit vom TP Manuell eingeben sonst stimmen das Datum der Fehlermeldungen nicht. Ist nur scheisse, dass bei einem Stromausfall oder beim Abschalten der Anlage die Uhrzeit und das Datum neu eingegeben werden muss.

Danke

Stefan
 
Zurück
Oben