Datenerfassung/Protokollierung in DB

knockout

Level-1
Beiträge
30
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
ich möchte immer bei einem Flankenwechsel ein MW in einen Datenbaustein schreiben, bei der nächsten Flanke um einen Wort verschoben schreiben, wie eine schrittkette, ohne den inhalt des alten zu überschreiben. Wie kann ich es realiesieren?
Außerdem möchte ich dann diese Daten aus dem Datenbaustein später in MS Office importieren und dokumentieren.

Danke!
 
mit pointer

Code:
      U     M    101.0 
      ZV    Z     33
      U     DB30.DBX   52.0
      R     Z     33
 
      U     M    101.0
      SPBNB in01
      AUF   DB    33
      L     Z     33
      L     2
      *I    
      SLD   3
      LAR1  
      L     MW100 //deine daten
      T     DBW [AR1,P#0.0]
in01: NOP   0
 
Hallo knockout.

Arbeitest Du mit ner Software- oder Hardware-SPS?

Bei der Soft-PLC WinAC könntest du per OPC ohne Umstände auf die Daten zugreifen.
Bei einer Hardware-SPS wirst du meiner Meinung nach allerdings um nen CP (CP5613 für Profibus) nicht drum rum kommen. Ich weis nicht in wie weit man das mit dem MPI-Adapter realisieren kann :confused:

Vielleicht hat noch jemand ne andere Idee...

Mfg

Kamania
 
Zuviel Werbung?
-> Hier kostenlos registrieren
knockout schrieb:
Danke dir, werde ich gleich mal ausprobieren!
Wie kriege ich die Daten aus dem DB in Excel oder vergleichbarem?

wenn du die daten nur ab und an mal brauchst, dann zieh dir den db mit dem pg aus der cpu und erzeuge daraus eine quelle. die kannst du dann in excel einlesen. bisschen anpassung ist schon nötig.

falls ständig gelesen werden soll.... siehe weiter oben
 
Hallo Volker,
vielen Dank nochmal für die AWL,
leider verstehe ich die Anweisung nicht ganz.
U M 101.0 //Flankenwechsel
ZV Z 33 //Zähle vorwärts
U DB30.DBX 52.0 // wozu der Datenbaustein?
R Z 33 //Rücksetze Zähler 33

U M 101.0 //Flankenwechsel
SPBNB in01 //Sprung bei HL nach 01
Auf DB 33 //Auf DB33
L Z 33 //Lade Zähler 33
L 2 //Lade die 2
*I //multipliziere
SLD 3 //schiebe 32 Bit Links? und 3?
LAR1 //Lade Adressregister 1
L MW100 //meine Daten
T DBW [AR1,P#0.0] //Trans. zu Adressregister 1?
in01: Nop 0

Warum schiebst du 32 Bit nach links? und warum läd'st du in Adressregister, geht es nicht einfacher???
Meine Absicht war, immer bei einer positiver Flanke ein Wort im DB zu schreiben. Ohne den vorgänger zu überschreiben.
Es geht doch bestimmt einfacher, Oder???
Vielen Dank für die Mühe!

db30.... ist nur zum rücksetzen des zählers. kann auch ein merker oder sonstwas sein.

mal erklärt.
der zählerstand wird mit jedem impuls um 1 erhöht.
da die adresse für das nächste datenwort aber um 2 erhöht werden muss, wird der zählerstand mit 2 multipliziert.
sld 3 bewirkt, dass aus der errechneten adresse ein pointer wird.
mit lar1 wird dieser pointer ins adressregister kopiert.
nun wird mw100 geladen und an die adresse, die nun im ar1 steht geschrieben.

nehmen wir an, z33 ist 3.
3 * 2 = 6 //adresse wo das mw100 gespeichert werden soll.
t dbw[ar1,p#0.0] ist nun konventionell vergleichbar mit t dbw6

bei z33 = 4 ergäbe sich t dbw8 usw.

einfacher geht das nicht. da die anfangsadresse variabel ist.
 
Dein Vorschlag!

Danke vorab,
irgendwie leuchtet mir dein Vorschlag nicht ganz ein,
Der Grund ist folgender:
Du multipliziert den Zählerstand *2, somit überspringst du die Anfangs "0".
Ich habe mein Vorhaben vielleicht nicht richtig erklärt,
Hier nochmal:
Bei einer positiven Flanke schreibe ich in DB2.DBW0 "Band gestartet" eine Zeit.
Bei einer neg. Flanke schreibe ich in DB2.DBW2 "Band gestopt" eine Zeit.
Darauf muß wieder DB2.DBW4 Band gestartet folgen....
und so muß die Datenerfassung weiter gehen, bis ich eine Verbindung mit dem OPC Server und Client herstelle, um die Daten in EXCEL zu importieren.

Volker, Bitte nicht böse sein, mein Fehler!:(
 
Zuviel Werbung?
-> Hier kostenlos registrieren
genau das passiert doch.
0 ist hier nicht zulässig. zählerstand 1 ist der erste wert und beginnt im dbw2. dann dbw4 dann 6 usw.
mach einfach mal ne simulation. dann wirst du das sehen.
 
Datenerfassung

Ich müßte doch mit DB2.DBW0 anfangen (Band_ start) und in 4er Schritte weiter Schreiben, folgt DB2.DBW4......DBW8.......,
denn DB2.DW2 ist doch (Band_Stop)

DB2.DBW0 start
DB2.DBW2 stop
DB2.DBW4 start
DB2.DBW6 stop
DB2.DBW8 start
 
wo liegt das problem mit dbw2 zu beginnen?

dann so
Code:
      U     M    101.0
      SPBNB in01
      AUF   DB    33
      L     Z     33
      L     1
      -I    
      L     2
      *I    
      SLD   3
      LAR1  
      L     MW100 //deine daten
      T     DBW [AR1,P#0.0]
in01: NOP   0
 
Zurück
Oben