INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Tasks streaming



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

Heute, 09:15
Beitrag #1

Fuchs Offline
LVF-Grünschnabel
*


Beiträge: 27
Registriert seit: Mar 2013

2023
-
DE


Deutschland
Tasks streaming
Hallo zusammen,

in letzter Zeit kommt es ab und zu vor, dass mein Programm zur Steuerung eines Prüfstandes abstürzt.
Ursache hierfür scheint die Datenkommunikation mit dem cDaq-9188 bzw. DIO NI 9375 zu sein. Nach dem Abbruch ist
die Kommunikation mit den Drucksensoren NI 9237 unterbrochen. Zumindest ist das die erste Fehlermeldung die mir das Programm anzeigt.
Ein Neustart des 9188 ist notwendig.
Ich habe für jeden einzelnen I/O Kanal einen Task im MAX angelegt.
Im Hauptprogramm, welches auf Queued Messanger Handler basiert, ändere ich den Zustand nur durch ein schreiben oder lesen des Tasks. siehe "Kanal schreiben"
Es fand in Vergangenheit kein Starten oder Beenden der I/O Tasks statt.
Die Kanäle der Drucksensoren sind grundsätzlich anders und auch sauberer aufgebaut. Ansprechen, Konfigurieren, Kalibriertabelle einlesen.............starten........stoppen und löschen
Zurück zu den I/Os!
Mittlerweile weis ich auch, dass ist nicht so sauber Programmiert. Hat aber nie Probleme gegeben.
"Never cange a running system"
Jetzt würde ich das gerne besser machen und würde eure Meinung dazu wissen.
Das ganze wird ziemlich unübersichtlich wenn ich für jeden Task ein eigenen Datenstrang anlege.
Wenn ich zu Beginn über eine For-Schleife gehe kann ich jeden Task starten. Soweit ganz gut. siehe "Tasks starten"
Wenn ich jetzt einen Kanal schreiben möchte, muss ich ihn aus dem Array entfernen und ändern.
Frage: Muss ich ihn dann auch wieder in das Array zurückführen?
Da ich mehrerer Queues habe (mehrere NVS) ist das beenden der Tasks auch wieder so ne Sache.
Frage: Würde es reichen, alle Tasks beim Beenden in einer Nachrichtenverarbeitungsschleife zu beenden?


Grüße Fuchs


Angehängte Datei(en) Thumbnail(s)
               
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
Heute, 09:31
Beitrag #2

Achim Offline
*****
*****


Beiträge: 4.228
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
RE: Tasks streaming
Hi...ich mache immer einen Task pro Richtung...z.B. 1x DI, 1x DO, 1x AI
Und in jedem dieser Tasks werden n Kanäle definiert.
Der Task wird 1x gestartet und 1x beendet....halt immer dann wenn er gebraucht wird.

Die Tasks laufen asynchron neben dem eigentlichen Programmablauf, und die Werte hole und sende ich über Queues.

Gruß
A.

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Heute, 11:32
Beitrag #3

Fuchs Offline
LVF-Grünschnabel
*


Beiträge: 27
Registriert seit: Mar 2013

2023
-
DE


Deutschland
RE: Tasks streaming
Hallo Achim,

starten und beenden wenn benötigt ist doch für Dinge die bei jeder Interation abgefragt werden auch nicht im Sinne des Erfinders, oder?
Für Aktionen die nur zu bestimmten Zeiten oder durch eine andere Aktion ausgelöst werden evtl. ok.

Wie separierst du den entsprechenden Kanal in der Queue? Wird der Datenstrang im Ablauf unterbrochen?
Klar werden die Kanäle in den Speicher geladen und man kann sie einfach aufrufen. Das ist ja das was ich Programmiert habe.
Ich würde gerne wissen ob das eine "Geht schon so - Lösung" ist oder ist es besser den Datenstrang nicht zu unterbrechen.


VG Fuchs
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Heute, 15:04 (Dieser Beitrag wurde zuletzt bearbeitet: Heute 15:13 von Achim.)
Beitrag #4

Achim Offline
*****
*****


Beiträge: 4.228
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
RE: Tasks streaming
(Heute 11:32 )Fuchs schrieb:  starten und beenden wenn benötigt ist doch für Dinge die bei jeder Interation abgefragt werden auch nicht im Sinne des Erfinders, oder?
Ich habe nichts über die Häufigkeit gesagt! Wenn benötigt, bleiben sie "an"

(Heute 11:32 )Fuchs schrieb:  Wie separierst du den entsprechenden Kanal in der Queue? Wird der Datenstrang im Ablauf unterbrochen?
Mehrere Kanäle sind ein Array of Waveforms.

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Heute, 15:40 (Dieser Beitrag wurde zuletzt bearbeitet: Heute 15:41 von GerdW.)
Beitrag #5

GerdW Offline
______________
LVF-Team

Beiträge: 17.539
Registriert seit: May 2009

LV2019 (LV2021)
1995
DE_EN

10×××
Deutschland
RE: Tasks streaming
Hallo Fuchs,

Zitat:Wie separierst du den entsprechenden Kanal in der Queue? Wird der Datenstrang im Ablauf unterbrochen?
Bleiben wir beim Beispiel der DO-Channels:
- Du hast einen DO-Task, der alle Channels beinhaltet.
- Du hast einen QMH, der sich um diesen Task kümmert.
- Du schickst dem QMH eine Message, in der du den Wert eines Channels angibst.
- Der QMH hat eine Tabelle, mit der er den Channel-Namen in eine Channel-Nummer umsetzt und das entsprechende Bit im DO-Task aktualisiert.
- Der QMH hält intern den aktuellen Zustand aller DOs.

Das gleiche Prinzip kannst du für alle anderen Tasks anwenden…

(Jedenfalls solltest du weniger FGVs, locals, etc. einsetzen.)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Who read this thread?
7 User(s) read this thread:
UliB, cordm, Woodeye, Fuchs, Lucki, Achim, GerdW

Gehe zu: