Bräuchte ein easy VB programm für´s TP270 (konvertierung)

e4sy

Level-1
Beiträge
277
Reaktionspunkte
12
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen liebe Sorgen... :D

Ich habe ein, bzw. zwei Problem(e) mit der Uhrzeiteinstellung in einer S5-155U über ein TP270.
Vorgegeben habe ich die Zeit (und Datum natürlich) in einem DB.
Dieser ist wie folgt aufgebaut:

Code:
0  KH = 0000;    // keine ahnung wo für

zum lesen der Zeit
1  KH = 0100;    // Masterkennung
2  KH = 1040;    // 1/100 sec ; sec also 10 hundertstel & 40 sec
3  KH = 4214;    // Minuten; Stunden also 14:42
4  KH = 0907;    // Tag; Monat also 09.07.
5  KH = 9600     // Jahr; nichts 1996

zum stellen der zeit
6  KH = 0100;    // Masterkennung
7  KH = 1040;    // 1/100 sec ; sec also 10 hundertstel & 40 sec
8  KH = 4214;    // Minuten; Stunden
9  KH = 0907;    // Tag; Monat
10 KH = 9600    // Jahr; nichts

dafür müsste man doch ein skript schreiben können, welches die daten (variablen) einließt und in eine timedate-variable ablegt und umgekehrt, oder?
Leider habe ich mehr ahnung von C als von VB... da liegt mein kenntnisstand bei 0 um genau zu sein.
Aber ist doch für euch profie progger zum warmwerden bestimmt ein super start in den morgen, oder? :D


und mein zweites, wo ich nicht ganz soviel hilfe erwarte, weil keiner das programm kennt, ist dass ich die stelle nicht finden kann, in dem ich der steuerung sage, sie soll den zweiten teil des DB als ihre neue zeit übernehmen... aber das schaffe ich schon... hoffe ich :roll:
 
dafür gibt es aufträge.
bin im mom nicht sicher welche das waren. 14/15 oder 40/41 hab ich gerade im kopf.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ja richtig, aber bei diesen aufträgen wir die zeit und das datum über ein eingabefeld eingelesen und im datetime-format weitergegeben, wenn ich mich nicht irre.

da meine alte steuerung bzw. meine vorgaben damit jedoch nichts anfangen kann (fehler 700011 glaube ich) muss ich das umstricken, damit es wieder passt.

oder gibt´s konvertierungsaufträge, bei denen ich sagen kann welche formate rein und raus gehen soll?
 
öömmm... das ist doch, wenn man sich auskennt, nicht anspruchsvoller wie

Code:
printf ("hello world");

oder? :D
 
wie man die uhrzeit liest/stellt findest du im systemhandbuch der 135/155U kapitel 6-23

das ganze macht man mit dem ob150

hier ein beispiel wie du die zeit des mp für das ag zusammensetzt.
Code:
stunden=Left(Time,2)
stunden = stunden + 80
minuten=Mid(Time,4,2)
sekunde=Right(Time,2)

jahr=Left(Date,2)
monat=Mid(Date,4,2)
tag=Right(Date,2)

wochentag=DatePart("w",Date)-2
If wochentag=-1 Then wochentag=6

sek_zehntel=sekunde & "00"
std_min=stunden & minuten
tag_wt=tag & wochentag & "0"
jahr_monat=jahr & monat
alle variablen sind integer.
sek_zehntel=db10.dw1
std_min=db10.dw2
tag_wt=db10.dw3
jahr_monat=db10.dw4
diese variablen musst du im ag mit DUF ins bcd wandeln


alle anderen variablen sind nicht an die steuerung gebunden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
okay... danke schon mal für deine bemühung.
vom prinzip ist das programm auch klar, nur...

wenn ich ihm sage, er soll die linken beiden stellen von time nehmen.
Left(Time,2)
woher weis er in welche variable ich die zeit am TP geschrieben habe?
oder ist ihm das egal, wenn ich das skript als funktion dieser besagten variablen aufrufe?

und was ist DUF? ich kenne wohl Duff´s Beer, aber das in einem anderen zusammenhang :lol:

und wie kann ich die DWs wieder auf Date und Time verteilen, wenn ich die zeit aus der steuerung lesen soll?
 
die 4 variablen die an die steuerung gebunden sind liegen im korrekten format vor
DUF ist ein befehl in der 155 um einen INT-Wert in BCD zu wandeln.
die uhrendaten müssen halt bcd codiert vorliegen.

projektiere eine taste und starte dort das script und setze eine variable.
diese variable startet dann im ag den ob150.

die systemzeit des mp kannst du nur mit einem auftrag stellen.
d.h. du liest mit dem ob150 die uhr aus, machst die daten so passend, das der auftrag damit zurechtkommt. und statest den auftrag
 
volker schrieb:
projektiere eine taste und starte dort das script und setze eine variable.
diese variable startet dann im ag den ob150.
genau so hatte ich mir das gedacht. nur ich starte das skript bei einer wertänderung der Datum/Uhrzeit-Variablen.

volker schrieb:
die systemzeit des mp kannst du nur mit einem auftrag stellen.
d.h. du liest mit dem ob150 die uhr aus, machst die daten so passend, das der auftrag damit zurechtkommt. und statest den auftrag
ebenfalls mein gedankengang. nur wie mache ich diese passend?

EDIT:
also übergebe ich die Zeiten (wie tag_wt) als KF an die steuerung, geh dann mit DUF dran, transferiere die zeit dann an die stelle, wo ich mit dem OB150 reinschaue... denke ich

also zeiger auf DW 8
uhrzeitstellen ab DW0,
dann

L dw8
DUF
T dw0

richtig? :?

EDIT2:
und wenn ich dann die zeit zurückholen will, muss ich erst die BCD-hex-zahl mit dem DEF bearbeiten... sonst kann das skript damit nich rechnen, oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
e4sy schrieb:
genau so hatte ich mir das gedacht. nur ich starte das skript bei einer wertänderung der Datum/Uhrzeit-Variablen.
das würde ja bedeuten, das du jede sekunde die uhr im ag stellst. warum?
erzähl mal was du eigentlich machen willst.

[/quote]

zu2. ja genau.

die uhr im mp stellst du folgendermassen.
lege einen bereichszeiger auftragsfach an. für dieses beispiel db90 ab dw2 in der länge 4

der code ist zwar s7 lässt sich aber leicht an s5 anpassen.
Code:
// auftrag wird vom op nach bearbeitung zurückgesetzt

      L     DB90.DBB    3
      L     0
      ==I   
      =     M     99.3                  //auftragsfach leer

      ON    M     99.3
      ON    M     99.1
      O     M     99.2
      SPB   m014
//zeit
      UN    M     99.2
      S     M     99.2
      L     LB     3                    //stunden
      T     DB90.DBB    5
      L     LB     4                    //minuten
      T     DB90.DBB    6
      L     LB     5                    //sekunden
      T     DB90.DBB    7
      L     14                          //auftrag 14
      T     DB90.DBB    3
m014: NOP   0

      L     DB90.DBB    3
      L     0
      ==I   
      =     M     99.3                  //auftragsfach leer

//datum
      ON    M     99.3
      ON    M     99.2
      O     M     99.4
      SPB   m015
      UN    M     99.4
      S     M     99.4
      L     DB80.DBW   26               //Wochentag
      T     DB90.DBB    5
      L     LB     2                    //Tag
      T     DB90.DBB    6
      L     LB     1                    //Monat
      T     DB90.DBB    7
      L     LB     0                    //Jahr
      T     DB90.DBB    8
      L     15                          //Auftragsnummer 15
      T     DB90.DBB    3


m015: NOP   0
      U     M     99.4
      U     M     99.3
      R     M     99.2
      R     M     99.1
      R     M     99.4

edit: doch nicht ganz. die daten für den auftrag müssen bcd-codiert sein. dh du kannst diese direkt aus dem uhren-db benutzen.
 
was ich vorhabe...

ich will an einem TP mit dem eingabefeld für datum/uhrzeit die zeit in einer S5-Steuerung stellen.
Da die Steuerung auch gleich zeitmaster für mehrere andere komponenten ist, soll das auch so bleiben und die (synchronisierte) systemzeit bei den Störmeldungen als zeitstempel genutzt werden.
daher muss ich ja die systemzeit stellen und dann zyklisch wieder einlesen um das tp synchron zuhalten.

das mit der wertänderung habe ich auch schon eingesehen und übertrage nun die zeit mit einem "übernehmen"-button.

deinen zweiten code muss ich erst mal verdauen... kommen bestimmt noch fragen zu ;)
 
ööömmmm :?
was mach ich denn mit einem datenfach? wich will doch nicht kochen (them rezepturen)... :roll:

kann ich nich einfach meine zeit aus einem DB(10) auslesen und via skript, so ungefähr

time = stunden & "." & minuten & "." & sekunden

aufbauen?
wäre doch viel einfacher, oder? :?

EDIT:

und noch was... ich hab grad gefunden, dass DATE die aktuelle Systemzeit wiedergibt.
Kommt diese dann vom TP? DIe kann ja auch wurst sein.
kann ich auch statt Left(Date,2) Left("Datum/uhrzeit".date,2) oder sowas schreiben?
(Datum/Uhrzeit beinhaltet Datum und Uhrzeit, die am eingabefeld eingegeben wurde im datentyp DATETIME)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
MUUHAHAHAHAAAAA

VIEL bessere Idee...
kann ich nich von TP aus zyklisch (alle 10-15 minuten) die TP-Systemzeit an die S5 schicken? dann ist es a) leichter und b) die S5 nur noch quasi-zeitmaster :lol:

EDIT: hab mal die stündliche alarmfunktion genutzt das skript auszuführen :lol:
 
nein das geht nicht. dateandtime hat ein ganz anderes format. und wird gebildet aus irgendeine zeit seit dem xxx datum/zeit. kann man irgendwo nachlesen. weiss aber im moment nicht wo das war

du musst das schon so machen wie oben beschrieben.

die aufträge 14/15 wollen die daten bcd-kodiert haben. dh du kannst die daten aus deinem uhr-db so übernehmen.

zeit stellen
Code:
A db10
L dl2
L KM 00111111 //bit 14 und 15 ausmaskieren
UW
A db90
T DR 3            //stunden

A db10
L dr2
A db90
T DL 4            //minuten

A db10
L dl1
A db90
T DR 4            //sekunden

A db10
L KF 14
A db90
T DR 2            //auftrag 14
 
e4sy schrieb:
MUUHAHAHAHAAAAA

VIEL bessere Idee...
kann ich nich von TP aus zyklisch (alle 10-15 minuten) die TP-Systemzeit an die S5 schicken? dann ist es a) leichter und b) die S5 nur noch quasi-zeitmaster :lol:

nicht empfehlenswert.
ich habe eine anlage mit einem op270 wo ich auch eine genau zeit brauche. dieses op läuft ca 8min / monat falsch.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
schade :(

dann zurück zu deiner idee...
wie mache ich denn dann aus der rezeptur eine zeit?!? :?


EDIT:

PING! :idea:
AUFTRAG 14, 15... jetzt check ich das... ignoriere einfach meine letzte frage :D
 
was für ne rezeptur?

also ich würde den ob150 zyklisch zum lesen der zeit aufrufen und das nur sperren wenn die funktion zeit stellen vom mp kommt.

dann z.b. alle 10 minuten einmal den auftrag 14 und 15 ausführen.
der letzte code sollte eigentlich schon funktionieren. testen kann ich den nicht. hab keine 135/155 am platz.

schau dir auf jeden fall mal das handbuch an kap 6-38
http://support.automation.siemens.c...lib.csFetch&nodeid=1086299&forcedownload=true

zum stellen der ag-uhr würde ich mir ein paar eingabefelder machen die schon das richtige sollformat für den uhr-db haben
 
jaaaa... ich weis... so hab ich das grad durchgekaut bis ich die zweite seite entdeckt habe :D

ich versuch es erst mal mit deinem skrip von heut morgen und wenn das nicht klappt, dann mach ich viele kleine eingabefelder :)

ich danke dir! wenn wir uns mal über den weg laufen, sprich mich mal auf ein bier an ;)

wenns nicht klappt, meld ich mich natürlich wieder ;)
 
Zurück
Oben