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!
ich bin ein anfänger in sachen CAN und benutze für eine Messung ein CAN Modul (USB TO CAN) von der firma IXXAT. Die LabVIEW anbindung mit der mitglieferten Treiber und VIs. gehts so weit.
bis jetzt kann ich mit der CAN Schnittstelle kommunizieren. (Transmit und Receive). Ich kann mit der Melduns ID und Daten die datenausstausch realisieren. soweit gut.
Mein problem ist, wie kann ich die bekommene Daten in LabVIEW weiterarbeiten. ggf. von Medlungs ID und Daten ( max. 8 Bytes ) auf die Bedeutung von Signal kommen. Ich hab das CAN Protokoll zu der schnittstelle auch. Mein problem ist die LabVIEW darstellung. (bzw. die umwandlung von CAN Protok. zur Dez und separien von Signals.)
kann bitte mir jemand helfen?
ich erkläre ein Bespiel: Generator Leistung will ich in zahlen darstellen. Ich bekomme das per CAN. wie erfolgt diese umwandlung in dez. zahlen.? oder generell einfach jede signal so darstellen das man die bedeutung von signal versteht. (enspricht die umwandlung von CAN Protokoll zur Dez.). Ich will einfach für jedes signal ein Anzeige Element auf dem Frontpanel haben..
entschuldigt mich für schlechte Deutsch.
viele Grüße,
Amir.
Coming together is a beginning, keeping together is progress, working together is success.
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
CAN Signal/Protokoll bearbeiten
Kannst Du ein Bsp. mit dem Datentyp und einem Wert machen. Dann ist es bestimmt kein Problem, den Wert "herauszufiltern".
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
' schrieb:Kannst Du ein Bsp. mit dem Datentyp und einem Wert machen. Dann ist es bestimmt kein Problem, den Wert "herauszufiltern".
Gruß Markus
ich schicke hier einfach ein Scrennshot von der DATA Protokoll 5300 für CAN Schnittstelle (was ich eigentlich habe.)
die Werte für Generator Gesamtleistung sind wie folgt( das ist nicht auf dem Screenshot):
Modicon start addr. Start addr. (*1) Databyte 0 (Mux) Databyte Parameter ID Description Multiplier Units
450053 450052 17 3,4,5,6 135 Total gen. power 1 W
aber generell kannst du mir auch sagen, wie ich von auf ganz normalen Dez. werte kommen kann? gibts ein VI dazu?
Grüße,
Amir
Coming together is a beginning, keeping together is progress, working together is success.
14.11.2009, 11:48 (Dieser Beitrag wurde zuletzt bearbeitet: 14.11.2009 11:55 von IchSelbst.)
Hinweis zu CAN:
Ein "CAN-Datensatz" beinhaltet (normalerweise) 8Byte Daten = 64 Bit. Diese 64Bit können ansich beliebig auf Daten verteilt werden. Diese beliebige Verteilung ist aber sehr kompliziert in der Verarbeitung. Man kann z.B. sagen: B3 bis B12 stellen einen Wert dar (z.B. einen Zähler). Wenn du den jetzt als einzelne Variable haben willst musst du also das 64Bit-Wort um 3 Bit nach links schieben und dann mit 0x3FF (10 Bit) verunden (Vergleiche Bild 3).
In deinem Falle könnte es erheblich einfacher werden, wenn alle Werte nämlich an 8Bit-Grenzen beginnen. Guckst du die Tabelle ByteData. Hier liegen immer 16- oder 32-Bit-Werte von.
Der von dir gewünschte Wert beginnt also beim vierten Byte (Indxe 3) und umfasst 4 Byte. Versuch mal folgendes: Mach von dem 8 Byte langen 1DArr of U8 ein Teilarray beginnend bei Index 3 mit der Länge 4. Dieses nun 4 Byte lange 1DArr of U8 gibt du auf einen harten Typcast, dessen Typeingang du auf U32 stellst. Herauskommt dann eine U32-Zahl die deinem Wert entsprechen sollte.
AUßerdem musst du beachten, dass du die Message verwendest, bei der MUX=17 ist. Im Datenarray (1DArr of U8) muss an Index 0 also 17 stehen.
Ob es hierfür geeignete VIs bei IXXAT gibt weis ich nicht. Ich verwende die NI-CAN-Library - da geht nämlich alles automatisch.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:Hinweis zu CAN:
Ein "CAN-Datensatz" beinhaltet (normalerweise) 8Byte Daten = 64 Bit. Diese 64Bit können ansich beliebig auf Daten verteilt werden. Diese beliebige Verteilung ist aber sehr kompliziert in der Verarbeitung. Man kann z.B. sagen: B3 bis B12 stellen einen Wert dar (z.B. einen Zähler). Wenn du den jetzt als einzelne Variable haben willst musst du also das 64Bit-Wort um 3 Bit nach links schieben und dann mit 0x3FF (10 Bit) verunden (Vergleiche Bild 3).
In deinem Falle könnte es erheblich einfacher werden, wenn alle Werte nämlich an 8Bit-Grenzen beginnen. Guckst du die Tabelle ByteData. Hier liegen immer 16- oder 32-Bit-Werte von.
Der von dir gewünschte Wert beginnt also beim vierten Byte (Indxe 3) und umfasst 4 Byte. Versuch mal folgendes: Mach von dem 8 Byte langen 1DArr of U8 ein Teilarray beginnend bei Index 3 mit der Länge 4. Dieses nun 4 Byte lange 1DArr of U8 gibt du auf einen harten Typcast, dessen Typeingang du auf U32 stellst. Herauskommt dann eine U32-Zahl die deinem Wert entsprechen sollte.
AUßerdem musst du beachten, dass du die Message verwendest, bei der MUX=17 ist. Im Datenarray (1DArr of U8) muss an Index 0 also 17 stehen.
Ob es hierfür geeignete VIs bei IXXAT gibt weis ich nicht. Ich verwende die NI-CAN-Library - da geht nämlich alles automatisch.
vielen Dank für die Antwort IchSelbst,
aber leider muss ich sagen, dass ich nicht so viel verstanen habe (hab leider nicht so viel Erfahrung mit CAN) , wie der Ansatz geht. has du dazu ein Bsp. oder VI was ich mir anschauen kann?
Grüße,
Coming together is a beginning, keeping together is progress, working together is success.
' schrieb:has du dazu ein Bsp. oder VI was ich mir anschauen kann?
Noch nicht.
Aber ich wollte ja sowieso noch was sagen zu dem Blockdiagramm, das du im ersten Beitrag gepostet hast.
Nachdem die obere While-Schleife beendet ist, setzt du über eine lokale Variable das Element STOP auf false. (Nebenbei bemerkt: Die Methode, hierzu das invertierte Signal aus der While-Schleife zu verwenden, ist sehr interessant.)
Nur:
Das False-Setzen hat einen erheblichen Nachteil. Möglicherweise wird nämlich die untere While-Schleife nicht mehr beendet (es sei denn man drückt zweimal auf Stopp). Es kann nämlich theoretisch sein, dass die lokale Variable auf false gesetzt wird, noch bevor die zweite While-Schleife erkannt hat, dass die Variable auf true steht. Das liegt daran, weil die beiden Schleifen eben parallel abgearbeitet werden, und man nicht sagen kann, was zuerst verarbeitet wird.
Eine mögliche Lösung: Statt der lokalen Variablen das Property Value verwenden. Dieses dann mit dem allerletzten ERROR OUT sequenzieren.
So, ich kuck ich mal nach einem Muster für "Wert aus Array lesen".
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Anzeige
14.11.2009, 17:16 (Dieser Beitrag wurde zuletzt bearbeitet: 14.11.2009 17:19 von IchSelbst.)
So kann man die gewünschten Werte aus dem Datenarray herausholen. Beachte, dass die Daten als Little Endian (siehe das eine Bild "Reihenfolge low Byte/high Byte) vorliegen. Und ein Bild zum Ankucken.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:So kann man die gewünschten Werte aus dem Datenarray herausholen. Beachte, dass die Daten als Little Endian (siehe das eine Bild "Reihenfolge low Byte/high Byte) vorliegen. Und ein Bild zum Ankucken.
vielen Dank IchSelbst für deine Mühe.
ich hätte paar Fragen zum Bild. Auf der Linken Seite hat Datenbyte 1 den Wert FF und Datenbyte 2 den Wert 03. wieso sind die nicht auf der Rechten Seite wider beim "Daten 1,2" Kasten zu sehen ? oder habe ich gerad ein Denkfehler oder ist das einfach ein Bsp ?
Soweit dann gut, aber gibts noch ein Schritt damit ich auf das Dez. Wert komme? Richtig verstanden ? Z.B. von diesem Daten auf reales Wert von Temperatur (bsp) oder Generator Leistung wie in meinem Bsp.
Grüße
Coming together is a beginning, keeping together is progress, working together is success.