Delay Funktion in µs

ysh032

Level-1
Beiträge
38
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Alles
Ich möchte eine Funktion zur Zeitverzögerung mit µs erstellen, diese Funktion kann als ein Zeitintervall in While-Struktur zwischen zwei Schleifen funktionieren, d.h. nächste While-Schleife kann erst XX µs nach Ende aktueller Schleife starten. Wie kann ich diese Funktion mit "ST" schreiben.

Vielen Dank
 
Was hast du denn für eine SPS?
Ich glaube eine Zeitverzögerung in µs wird schon allein daran scheitern, dass die meisten Steuerungen Zykluszeiten im ms Bereich haben.

Und While Schleifen sind in der SPS-Programmierung allgmein eine sehr ungünstige Lösung. So wie ich dein Anliegen deute versuchst du eine SPS wie einen PC zu programmieren ?

In der Regel werden für Zeitverzögerungen Funktionen wie Ein-/Ausschaltverzögerungstimer oder Impulstimer verwendet, aber wie gesagt alles in ms.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für Ihre schnelle Antwort
Ich habe momentar einen Laptop, darauf wird ein SPS-Programm installiert, mit dem einige Daten in CSV-Format auf Computer gespeichert werden können. In dem Programm werden Funktionsblöcke "fbFileOpen, fbFilePuts und fbFileClose" geruft, um die Pfad der Datei zu geben. Nach Anrufen dieser Funktionsblöcke
muss Programm warten bis zu die boolsche Variable "fbFileOpen.bBusy, fbFilePuts.bBusy sowie fbFileClose.bBusy" nicht "TRUE" sind. Ich möchte While-Schleife benutzen, um diese Warten-Funktion zu realisieren:
WHILE fbFileClose.bBusy DO
XXXXXXX
END_WHILE
Der Teil XXXX in Schleife muss die Verzögerung mit µs funktionieren, weil die Zykluszeit meines Programm 1ms ist.

Haben Sie noch bessere Idee, soweise Warten-Funktion zu realisieren.
 
Aber das Programm muss die Überprüfung und Bearbeitung in derselbem Zyklus durchgeführt werden, um die zu speichende Daten und übernommene Daten synchron sein zu können.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, ich persönlich halte ja gar nix davon, den Prozessor mit nichts zu beschäftigen. Kannst du andere Programmteile dazwischenschieben?

Aber insgesamt ist mir das ganze zu PC-lastig, und da hab ich nicht so viel Ahnung, sorry.
 
Selbst wenn da eine Soft SPS auf dem PC läuft, hat diese immer noch eine definierte Zykluszeit. Die SPS muss in einem Zyklus den gesamten Programcode abarbeiten können, sonst gibts Fehler.
Wenn du jetzt in einer While-Schleife für einen unbestimmten Zeitraum das Programm blockierst, ist Ärger vorprogrammiert.

Also besser mit jedem Zyklus abfragen ob die FBs noch Busy sind oder nicht. Das synchronisieren der Daten kann doch auch anders gelöst werden (z.B. in dem man keine neuen Daten speichert bis die Übertragung an den PC abgeschlossen ist, oder du nimmst 2 Dateien und speicherst in der 2ten während die 1te gesendet wird .... )

Ohne genauer zu wissen was du vor hast kann dir da auch keiner wirklich weiter helfen.
 
Vielen Dank für Ihre wichtige Tipps!

Momentar habe ich einen Buskoppler EK1100 mit XFC A/D-Klemmer EL3702, die an meinem Laptop über Netzkarte "Broadcom NetXtreme Gigabit Ethernet" angeschlossen. Jetzt habe ich schon das Beispielprogramm von Beckhoff, mit dem die von EL3702 genommene Daten eines jeden Zyklus in einen Puffer im Programm geschoben damit übergeordnet werden. Jetzt möchte ich diese Beispielprogramm erweitern, um die in Puffer geordnete Daten in einer bestimmten CSV-Datei gespeichert werden zu können.

An Anhang finden Sie dieses Beispielprogramm ,die zugehörende .tsm Datei
und von mir selbst geschriebenes Test-programm, um CSV-datei zu schreiben
 

Anhänge

  • EL37xx_FB_Oversampling.zip
    74 KB · Aufrufe: 3
  • CSVTest.rar
    31,7 KB · Aufrufe: 4
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich stelle mir das echt schwierig vor - gerade da die meisten File Bausteine asynchron zum zyclus in einer speziellen Task abgearbeitet werden.

Du fängst dir also möglicherweise einen Watchdog ein ... oder du legst keinen Wert auf die eingestellte Zykluszeit - kann ja auch sein.

Hast du schon mal nachgefragt ob die Bausteine asynchron zu den Anwendertasken abgearbeitet werden?

Gruß,
Kollo.
 
Ich realisiere eigentlich genau diese Aufgabenstellung in einem Projekt.
Also die XFC-Klemme übermittelt ein Array mit Daten pro PLC-Cycle (z.B. 10 Werte bei 100µs Task oder 100 Werte alle ms-Task) Ich glaube es geht nicht parallel die Datenmenge in ein CSV File zu schreiben. Also in einer ms File Open/Write/Close geht bestimmt nicht. Ich speichre mir die Daten in einem grossen Array und schiebe dann das ganze Array auf einmal in die CSV (20000 Werte). War das ein Ansatz?
 
Ich denke, das Programm bracht zu min 3 Zykluen, um die File Bausteine vollstandig bearbeiten zu können, Fileopen=> Fileputs=> FileClose. Aber in meinen Anwendungstask muss in jeden Zyklus eine Paket Daten aus Klemmer übernommen werden. Also diese File Bausteine können nicht synchron sein. Um die Datenpaket im jeden Zyklus speichern zu können, denke ich, muss zusätzliche min 3 Zwischenspeicherplatz (Puffer) für übernommene Daten eingesezt werden.
 
also ein FIFI Read-Array von XFC-Datensätzen und ein FIFO Write Array, also für das File Write werden sicher 20ms realisteisch sein (Excecute, Busy=True und Busy=False und das 3x und auf die Harddisk muss es ja auch noch -> Lesekopf... ... ) also müssen immer viele Datensätze gesammelt werden für einen Write-Befehl
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In meine Aufgabe. Die Anfoderung für die Abtastungsrate muss 100kHz sein. Aber meiner Computer kann nur unter Zykluszeit >= 1ms arbeiten, sonst entsteht die DC-Fehler. Also muss ich die Oversamplingsfakor in 100 stellen, d.h in jedem Zyklus wird ein Daten-Array mit Länge 100 übernommen und jede Sekunde 1000 so lange Array. Wie groß soll die Speicher-Array in meinem Prgramm sein?
 
so schau mal . macht en bussi :)
 

Anhänge

  • Screen1_Daten_von_der_Klemme.jpg
    Screen1_Daten_von_der_Klemme.jpg
    21 KB · Aufrufe: 25
  • Screen2_Struktur_100_Werte.jpg
    Screen2_Struktur_100_Werte.jpg
    32 KB · Aufrufe: 25
  • Screen3_Struktur_fuer_FIFO.jpg
    Screen3_Struktur_fuer_FIFO.jpg
    28 KB · Aufrufe: 24
  • Screen4_grosses_Array.jpg
    Screen4_grosses_Array.jpg
    66,8 KB · Aufrufe: 25
ja 100ms - aber einfach die Array-Grenze vergrössern oder verkleinern, aber selbst 1s macht für TwinCAT kein Problem, (wenn man die 64k Grenze in Step7 kennt ist TwinCAT wie das grosse Universum) - geht denn die Echtzeit auf dem Rechner ?? XFC-Counter
 
Mein Betreuer erfordet, die Datenmenge in 5s in CSV-Daten zu speichern. Jetzt habe ich die Array für Datenspeicherung in Länge 5000 erweitert. Das Problem jetzt ist, wie kann ich eine Array mit 5000 Elemente (Element ist eine 100 lange Array) in CSV-Format konventieren, geht es die Funktion "ARG_TO_CSVFIELD"
 
Zurück
Oben