Messwerte in einen DB schreiben

INST

Well-known member
Beiträge
272
Punkte Reaktionen
15
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,

ich will Messwerte einer Messtation in einen DB schreiben (jede Sekunde einen Messwert als REAL- Zahl).
Ein SCADA - System holt die Daten alle 3 Minuten über ETHERNET ab und soll den DB mit einem Signal dann wieder löschen.

Der Zeitpunkt für den "MOVE - Befehl" der REAL - Zahl in den DB wird vom Drehgeber bestimmt. Ebenso die Weiterverarbeitung des Löschsignal vom SCADA.

Wie kann die "Füllung" und die Löschung des DB programmiert werden ?

Hat jemand eine Idee ?

Danke !!
Die INST
 

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
301
Ich würde ein ARRAY vom Typ REAL im DB anlegen.

Dann kannst Du wunderbar mit einem Index die Werte speichern. Die Frage ist, muss der DB wieder auf Null geschrieben werden? Oder reicht es, wenn der Index wieder an den Anfang des DB&s gesetzt wird?

Gruß pt
 
OP
I

INST

Well-known member
Beiträge
272
Punkte Reaktionen
15
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo plc_tippser,

ja der DB muss wieder auf 0 geschrieben werden.

Wie geht das mit dem ARRAY und mit den Index ?

Danke und Gruß
Die INST
 

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
301
In den DB schreibst Du:

1. Zeile: Variablenname | ARRAY[0..1000] (*das entspricht 1001 Felder*)
2. Zeile: |REAL (*weißt dem Feld den Typ zu*)

Rest kommt gleich
 

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
301
Zuviel Werbung?
->Hier kostenlos registrieren
Code:
      L     0
      T     MD    20

      AUF   DB     1                    //DB öffnen
loop: L     DBD [MD 20]
      T     MD   100                    //irgendwo hin
      L     MD    20                    //Index incrementieren  , muss natürlich auch irgendwo auf 0 gesetzt werden
      L     1
      +D    
      T     MD    20
      L     1000                        //Maxanzahl der Schleifenumläufe anpassen
      <D                                //Vergleichsoperand Double

Habe leider im Augenblick keine Zeit. Hoffe Du kommst erst mal weiter.

Gruß pt
 

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
301
Ob Du das in ein LOOP schreibst, musst Du mit der Zykluszeit vereinbaren. Ansonsten musst Du es in Blöcke fassen, die du zyklisch durchläufst. Ist halt Abhängig von der Anwendung
 

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
301
Sorry, aber der Zeitmangel ist heute echt ätzend. Der Index muss in das Pointerformat geändert werden. Mehr dazu evt. heute Abend. Aber vielleicht klappts ja auch schon mit der Hilfe bisher.
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
Supervisory Control And Data Acquisitition
"Überschauende Kontrolle und Datenerfassung"
 

Black Scorpion

Well-known member
Beiträge
82
Punkte Reaktionen
0
Servus Leute,

hab mal wieder ein Problemchen. Folgendes will ich realisieren. Ich arbeite mit einer CP340 und Kommunikation über ASCII. Senden der Daten ist super, dank eurer Hilfe. Empfangen macht Probleme. Ich krieg das einfach nicht hin. Empfangen tue ich, Daten stehen bei mir im DB200. Aber wie kann ich die da raus bekommen um diese zu zerlegen und auszuwerten. DB ist in CHAR eingeteilt. Hab den mal Anhang hinzugefügt.

Wie kann ich diese Daten aus dem DB auslesen? Es sind zwei Antworten, einmal eine Distanz und hinter dem Semikolon eine Statusmeldung.

Wie kann ich die da auslesen???

Bin um jede Hilfe sehr dankbar.
 

Anhänge

  • DB200.jpg
    DB200.jpg
    113,5 KB · Aufrufe: 46

Paradox

Active member
Beiträge
34
Punkte Reaktionen
0
Hallo, bin noch recht neu hier und kenn mich hier noch nicht so gut aus. Habe aber zu diesem Thema paar Fragen.

Ich muss über einen analogen Eingang Messwerte aufzeichnen.
Diese Messwerte werden dann über die Ethernetschnittstelle in eine Excel - Tabelle zur Auswertung übergeben.

Mein Problem ist, wie kann ich die Messwerte zeitlich aufnehmen, also z.B. alle 10 ms (muss einstellbar sein, geht nicht mit OB35) und diese nacheinander in einem DB abspeichern.

Also der erste Messwert steht in DB1.DBW0, der zweite Messwert im DB1.DBW2, usw.
Die Anzahl der Messwerte hängt von der Dauer der Messung ab, diese kann unterschiedlich lang sein.

Bevor die neue Messung anfängt muss alles wieder genullt sein.

Kann mir hier vll jemand schreiben wie der Programmcode auszusehen hat?
Wäre Euch echt Dankbar.

Gruß
Paradox
 

Günni1977

Well-known member
Beiträge
232
Punkte Reaktionen
25
Zuviel Werbung?
->Hier kostenlos registrieren
Mein Problem ist, wie kann ich die Messwerte zeitlich aufnehmen, also z.B. alle 10 ms (muss einstellbar sein, geht nicht mit OB35) und diese nacheinander in einem DB abspeichern.

Hi,
zumindest dazu hätte ich schon ne Idee. Nimm den OB35 z.B. mit 10ms als "Grundtakt". Bei jedem Aufruf erhöhst du z.B. ein Integer um 1 und vergleichst den Wert mit einer Variablen, welche deine Messzeit bedeutet.
Wenn du also alle 50ms messen willst, muss der Integer 5 sein, dann setzt du diesen wieder auf 0 usw...
 

Paradox

Active member
Beiträge
34
Punkte Reaktionen
0
Hallo,

ich habe noch eine Frage.

Messwerte in einen DB schreiben funktioniert jetzt alles einwandfrei.

Nun soll ich den höchsten Messwert welcher in den DB geschrieben wurde, auf einem Touchpanel anzeigen.

Also ich schreibe 1000 Messwerte in den DB. Es kann sein dass der dritte Messwert der höchste ist, es könnte aber auch sein dass der 563. Messwert der höchste ist.
Und nur der Höchste Messwert soll im TP angezeigt werden.

Muss ich jetzt alle 1000 Messwerte miteinander vergleichen oder gibt es eine vereinfachte Möglichkeit?
Wäre Euch echt Dankbar wenn ihr einen Tipp hättet, sonst tipp ich mir ja die Finger wund...
 

vierlagig

Well-known member
Beiträge
9.882
Punkte Reaktionen
2.020
Zuviel Werbung?
->Hier kostenlos registrieren
mach die auswertung gleich beim messen, wenn der messwert größer als der gespeicherte vermeintlich größte wert ist überschreibst du ihn mit dem neuen und so wird er zum vermeintlich größten. sollte in folge der messung ein anderer größer sein, so wird er wiederum vermeintlich größter...
 
Oben