LabVIEWForum.de
CAN Frame API Read Write parallel - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenkommunikation (/Forum-Datenkommunikation)
+---- Thema: CAN Frame API Read Write parallel (/Thread-CAN-Frame-API-Read-Write-parallel)



CAN Frame API Read Write parallel - Dommas - 03.09.2010 11:58

Hallo zusammen,

ich habe mal wieder eine Frage an Euch:

Ich möchte in einem VI über eine CAN-Schnittstelle parallel lesen und schreiben.
D.h. ich brauche zwei parallele while-schleifen in eine kommt das "Read", in die andere das "Write". soweit alles logisch. Ich frage mich jetzt aber, wie ich das mit dem ObjHandle machen muss. Den muss ich ja nach dem "Open" in das "Write" und in das "Read" verdrahten und am Ende dann in das "Close".

Macht man das dann einfach so, wie ich es hier mal in Pseudocode gemacht habe, oder gibt es da eine andere, schönere Möglichkeit?

Vielen Dank!

Gruß
Dommas


Lv09_img2


CAN Frame API Read Write parallel - Achim - 03.09.2010 12:45

Hi,
guck dir mal im ExampleFinder unter CAN das Beispiel "Transmit Receive same Port.vi" an!

Gruß
Achim


CAN Frame API Read Write parallel - Dommas - 03.09.2010 13:02

das kenne ich schon.

Aber ich muss das Ganze zyklisch machen und mit verschiedenen Zeiten fürs Lesen und Schreiben. Deswegen behaupte ich mal, dass ich 2 verschiedene while-Schleifen brauche, oder?

Und dann sind wir wieder bei der Ausgangsfrage


CAN Frame API Read Write parallel - Achim - 03.09.2010 13:26

Hi,
warum willst du zyklisch in ner Whileschleife schreiben? Wenn du tatsächlich zyklisch Botschaften senden musst (das kommt ja sehr häufig vor), dann machst du das per HW! Es gibt dazu ein Beispiel-VI, "Transmit periodic.vi" (oder so ähnlich...). Da wird die HW auf periodisches=zyklisches Senden konfiguriert und man gibt nur 1x vor, was mit der Periode t gesendet werden soll! Und immer nur, wenn sich der Botschaftsinhalt ändert, gibt man den neu vor! Würdest du das zyklische Senden "zu Fuß", d.h. per While-Schleife machen, könntest du nur in den seltensten Fällen die von der empfangenden HW geforderten Timing-Vorgaben einhalten! Dazu funkt das OS zu oft dazwischen!

Gruß
Achim

PS: Man kann das "Transmit Receive Same Port " natürlich auch mit dem "Transmit periodic" zusammenführen...das hab ich auch schon gemacht!


CAN Frame API Read Write parallel - Dommas - 06.09.2010 07:58

' schrieb:Hi,
warum willst du zyklisch in ner Whileschleife schreiben? Wenn du tatsächlich zyklisch Botschaften senden musst (das kommt ja sehr häufig vor), dann machst du das per HW! Es gibt dazu ein Beispiel-VI, "Transmit periodic.vi" (oder so ähnlich...).

Ja, ich weiß. Aber ich kann hier nicht mit CANObjects hantieren glaube ich. Deswegen habe ich es auf dem Weg mit der/den while-Schleifen begeben.
1. Ich habe 1-8 Geräte, die ich ansprechen muss. ABER:
2. Die ID is nicht einfach eine Geräte-ID, sondern setzt sich aus verschiedenen Teilen zusammen, unter anderem der Geräte und der Nachrichten-ID (die sagt aus, wie die DATEN zu interpretieren sind.)
3. Im Frontpanel ist ein Tab mit 8 Reitern, je nachdem in welchem Reiter man ist, werden verschiedene Messages an verschiedene Geräte geschickt, also z.B. Message1 an Gerät 1-8, Message2 an Gerät 1-8, und Message3 als Broadcast. Wenn all diese Messages (=Commands) draußen sind, können die einzelnen Geräte antworten (siehe Prioritäten mit Nullen und Einsen, das ist über die verschiedenen IDs sichergestellt). Die Antworten bestehen jetzt aber auch wieder aus verschiedenen Nachrichten, d.h. auf Message1 kommen z.B. 3 Messages als Antworten und auf Message2 vielleicht nur eine.
4. Ich kann maximal mit 48 Objekten arbeiten soviel ich weiß. Wenn ich das alles richtig verstehe sind das 48 verschiedene IDs. Da ich aber wie schon erwähnt eine Art "Message-ID" habe, die mit in die "normale" CAN-ID eingebaut wird, reichen mir 48 Objekte nicht.

EDIT: Ich habe bis zu 148 verschiedene CAN-IDs, wenn ich 8 angeschlossene Geräte habe, und mich in 5 von den besagten 8 Reitern befinde.

Wenn ich hier (v.a. im letzten Punkt) einen gewaltigen Fehler drin habe, lasse ich mich gern verbessern! Ich weiß, dass ich besser die Periode von der CAN-Karten-Hardware zurückgreifen sollte, aber ich habe bisher leider keinen Weg gefunden, das zu realisieren...


' schrieb:PS: Man kann das "Transmit Receive Same Port " natürlich auch mit dem "Transmit periodic" zusammenführen...das hab ich auch schon gemacht!

Ich weiß, das habe ich auch schon gemacht


CAN Frame API Read Write parallel - Achim - 06.09.2010 13:37

Sag mal...hatten wir das neulich nicht schon mal?

EDIT:
http://www.labviewforum.de/index.php?s=&am...st&p=102645


Ich hab mich damals mal mit nem Kollegen drüber unterhalten...wo steht geschrieben, dass man nur 48 Objekte haben darf? Uns ist so eine Beschränkung nicht bekannt!


CAN Frame API Read Write parallel - Dommas - 06.09.2010 13:53

Ja, genau. Aber dass das nicht richtig ist hat damals niemand gesagt.

geschrieben steht das in Schulungsunterlagen von NI, siehe Anhang und hier im Beitrag #5:

http://www.labviewforum.de/Gibt-es-ein-CAN...oae-t16924.html


CAN Frame API Read Write parallel - Dommas - 07.09.2010 07:27

So, ich habe mich jetzt mal beim NI Support gemeldet. Hier die Antwort:


Sehr geehrter Herr ,

ich habe es doch noch gefunden, 49 CAN-Objekte stimmt, wie hier
beschrieben:
http://digital.ni.com/public.nsf/allkb/207...6256C550059B45A


National Instruments
Applications Engineering
http://www.ni.com/support



Ich bin jetzt wieder soweit bin, wie 3 Posts vorher:
Wenn ich das mit den Objekten richtig verstanden habe, dann brauche ich pro ID ein Objekt, oder? Das heißt also maximal 48 oder 49 verschiedene (in jedem Fall weniger als 147) IDs, die ich als Objekte deklarieren kann, oder?´

Gruß
Dommas


CAN Frame API Read Write parallel - Achim - 07.09.2010 08:07

Hi,
ja ich hab mich jetzt auch mal schlau gemacht! Du hast mit den CAN-Karten tatsächlich die Beschränkung auf 48 CAN-Objekte die die NI-Karte verwalten kann. Da musst du die Periode für deine zahlreichen Nachrichten tatsächlich per SW-Timing realisieren. Da der CAN aber nachrichtenorientiert, und damit ja nicht deterministisch ist, sollte eine gewisse zeitliche Abweichung deiner Periodendauer keine Auswirkung auf die Empfänger haben! Bezüglich deiner Frage: Ja, ich glaube schon dass du das dann so mit zwei While-Schleifen machen solltest. Dann hast du auch eine übersichtliche Trennung. Du könntest auch in der Schleife die schnellere/häufigere Aktion "direkt" durchführen und die weniger häufigere dann in der gleichen Schleife in jedem X-ten Durchlauf...

Gruß
Achim

PS: Again what learned!


CAN Frame API Read Write parallel - Dommas - 07.09.2010 08:18

OK, alles klar. Danke schön.

Also von LV bin ich nach wie vor begeistert, aber von den NI-CAN Karten irgendwie enttäuscht muss ich sagen. Habe mir da gerade eine mal etwas genauer angesehen, also mit der Hardware die sie da spendiert haben wäre eindeutig mehr drin gewesen...