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 

CAN MultipleRead Size Notification



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!

09.03.2015, 10:09 (Dieser Beitrag wurde zuletzt bearbeitet: 09.03.2015 10:19 von Slev1n.)
Beitrag #1

Slev1n Offline
LVF-Grünschnabel
*


Beiträge: 30
Registriert seit: Nov 2014

2013
2011
DE_EN



CAN MultipleRead Size Notification
Hey Leute,

ich hätte mal eine Frage.
Zuerst aber was zum Programm:
Ich lese Daten von einem CAN Bus. In diesem Fall ist nur ein anderes Gerät neben meiner USB 8473s Karte mit am Bus. Dieses Gerät schickt mir mit einer Übertragungsrate von 125kBaud immer wieder 8 unterschiedliche Frames. Also alle paar ms kommen 8 Frames mit 8 unterschiedlichen IDs.

Meine Frage also: Kann man es so einstellen, dass das MultipleRead.Vi solange wartet (z.b. mit ncWaitForState.vi und SetAttr.vi [Multiple Read Size Notification]) bis die Anzahl von Frames die im read puffer sind ein vielfaches von 8 ist?

Damit wäre eine spätere Datenauswertung in einer Tabelle nach Konvertierung mit Hilfe der DBC-File deutlich schöner. Da wenn gerade 20 Frames gelesen werden nicht alle IDs gleich oft vertreten sind und wenn ich die Auswertung in ein Excell File geb, dann sind in manchen spalten halt nur 2 umgerechnete Werte und in manchen 3.
So sieht es dann immer aus: (nur Beispiel)
   

Bin gespannt ob das machbar ist.

Gruß
Slev1n
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
09.03.2015, 10:31
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: CAN MultipleRead Size Notification
Hallo slevin,

Zitat:wenn ich die Auswertung in ein Excell File geb, dann sind in manchen spalten halt nur 2 umgerechnete Werte und in manchen 3.
Dann ändere doch deine Auswertung und schreibe in jede Zeile immer die letzten bekannten Werte aller Signale!
Also im Grund genau das, was du vom CAN liest: es gilt immer der zuletzt gelesene Wert eines Signals, bis eine neue Botschaft mit eben diesem Signal eintrifft…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.03.2015, 11:00
Beitrag #3

Slev1n Offline
LVF-Grünschnabel
*


Beiträge: 30
Registriert seit: Nov 2014

2013
2011
DE_EN



RE: CAN MultipleRead Size Notification
Hey,

Zitat:Dann ändere doch deine Auswertung und schreibe in jede Zeile immer die letzten bekannten Werte aller Signale!

Ich verstehe nicht genau was du meinst. Allerdings muss ich mein Problem glaube ich genauer erklären.
Von diesen 8 Frames konvertiere ich nur 2. Einmal bekomme ich aus dem Frame 4 und einmal 3 Werte, jeweils in einem Array. Wenn ich also beim Auslesen von 20 Frames, 3 mal die 1. ID und 4 die 2.ID konvertiere, habe ich zwei 2D-Arrays. Hierzu 2 Bilder:

Hier sieht man wie die Frames zusammen mit der ID in das SubVi für die Konvertierung gehen.
   

Hier die Konvertierung.
   

Dieses Array aus Clustern drösel ich bei der Auswertung wieder auf und schreibe im Excel-File zuerst die Channel Namen in die erste Zeile nebeneinander und danach die "Skalierten Daten" darunter. Dabei packe ich die beiden 2D Arrays nebeneinander und schreibe sie dann in die ExcelFile. Ich glaube mein Problem wäre gelöst wenn ich die Arrays nicht zusammenpacke, sondern einzeln in die ExcelFile nebeneinander schreibe.
Wie ich das machen kann weiß ich allerdings nicht.

Dieses auf ein Vielfaches von 8 warten geht wohl auch nicht oder? Fände ich nämlich auch recht elegant.

Gruß
Slev1n
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.03.2015, 11:12
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: CAN MultipleRead Size Notification
Hallo slevin,

Zitat:Dieses Array aus Clustern drösel ich bei der Auswertung wieder auf
Da ich dein Array und deine ganzen subVIs nicht kenne, kann ich dazu kaum was besseres vorschlagen. Und Bilder lassen sich so schwer debuggen…

Bei meinen CAN-Daten lege ich mir für jedes Signal einen Buffer an, welcher immer den aktuellen (sprich: den zuletzt gelieferten) Wert enthält. Und wenn ich Daten speichern möchte, schreibe ich die gerade aktuellen Daten aus dem Buffer in eine Datei. So erhalte ich in meiner Datei immer Zeilen mit gleich vielen Werten - und eben die gerade aktuellen…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.03.2015, 14:50
Beitrag #5

Slev1n Offline
LVF-Grünschnabel
*


Beiträge: 30
Registriert seit: Nov 2014

2013
2011
DE_EN



RE: CAN MultipleRead Size Notification
Hey,

tut mir leid, dass ich nur Bilder schicke, aber die Firma für die ich das Programm schreibe möchte nicht, dass ich das ganze VI poste.

Ich poste aber mal ein Bild zur Auswertung, die ist ja sowieso mangelhaft Smile

   

Die For Schleife wird so oft ausgeführt, wie es Nachrichten IDs gibt, da das Array so viele Cluster enthält, da pro ID ein Cluster mit den konvertierten Daten und dem dazugehörigen Kanalnamen erstellt wird.(siehe obere Bilder)
In der Case Schleife werden im "Case 0" die Kanalnamen in die erste Spalte geschrieben im "Case 1" werden dann die Werte-Arrays hinzugefügt.
Ich persönlich empfinde das ganze als ein wenig kompliziert gestaltet, bin mir sicher ihr habt ne elegantere Lösung.

Gruß

Slev1n
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.03.2015, 15:01 (Dieser Beitrag wurde zuletzt bearbeitet: 09.03.2015 15:01 von GerdW.)
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: CAN MultipleRead Size Notification
Hallo slevin,

Zitat:bin mir sicher ihr habt ne elegantere Lösung.
Zumindest schon mal für das Reshapen deines Arrays:
   

Zitat:aber die Firma für die ich das Programm schreibe möchte nicht, dass ich das ganze VI poste.
Niemand verlangt das Posten des kompletten VIs mit allen Logos/Labels/whatever.
Was aber immer möglich sein sollte: ein Test-VI (möglichst mit sinnvoll bedateten Eingangswerten) erstellen, welches die entscheidende Routine enthält und das Problem illustriert. Und wenn man dann noch das gewünschte Ergebnis in einem Indicator bereitstellt, lässt sich eine Lösung vorbereiten.
Aber immer nur Bilder von VIs, deren subVIs wir nicht kennen, sind auf Dauer frustrierend…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
09.03.2015, 16:41
Beitrag #7

Slev1n Offline
LVF-Grünschnabel
*


Beiträge: 30
Registriert seit: Nov 2014

2013
2011
DE_EN



RE: CAN MultipleRead Size Notification
So jetzt darfst du dich austoben Big Grin


13.0 .vi  ForumTestMain.vi (Größe: 24,59 KB / Downloads: 180)


13.0 .vi  CAN_READ TEST.vi (Größe: 45,38 KB / Downloads: 182)


13.0 .vi  CAN_FRAM_Konvertierung.vi (Größe: 20,89 KB / Downloads: 171)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.03.2015, 16:51 (Dieser Beitrag wurde zuletzt bearbeitet: 09.03.2015 16:52 von GerdW.)
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: CAN MultipleRead Size Notification
Hallo slevin,

es fehlen diverse subVIs aus einer API.llb, die in deiner user.lib liegt! Es fehlen außerdem passende Eingangsdaten!

Kannst du mal den Kern deines "CAN_READ_Test" mit passenden Eingangsdaten bereitstellen?
   

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.03.2015, 21:54
Beitrag #9

Holy Offline
LVF-Stammgast
***


Beiträge: 339
Registriert seit: Sep 2008

2014
2007
EN

09XXX
Deutschland
RE: CAN MultipleRead Size Notification
Ich denke der einfachste Ansatz wäre ein kleiner Puffer für die empfangenen Nachrichten. Dieser hätte die Funktionalität erst dann Werte weiterzugeben wenn alle 8 Nachrichten da sind und alle zusätzlichen für die nächste Runde zu speichern.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.03.2015, 10:45 (Dieser Beitrag wurde zuletzt bearbeitet: 10.03.2015 11:01 von Slev1n.)
Beitrag #10

Slev1n Offline
LVF-Grünschnabel
*


Beiträge: 30
Registriert seit: Nov 2014

2013
2011
DE_EN



RE: CAN MultipleRead Size Notification
@ Gerd:
Also die Api.llb kann ich gerne raufladen. Das passende Signal wüsst ich spontan nicht wie ich simulieren soll, aber das größere Problem wäre, dass du auch die dbc file zum konvertieren brauchst.
Also wenn du ohne die dbc-file auskommst würde ich dir zufällige can daten frames basteln.
Aber das grundsätzliche Problem würde gelöst werden, wenn ich entweder immer eine Frameanzahl in das Konvertierungs-Vi schicke oder mir einer erklärt wie ich 2D-Arrays nebeneinander in eine Excell-File schreibe ohne sie davor in ein einzelnes 2D-Array zusammenzupacken.

@Holy:
Bewusst habe ich noch nicht mit Buffer gearbeitet, wenn du mir erklärst wie ich es schaffe diesen immer abzuarbeiten, wenn er ein Vielfaches von 8 Frames beinhaltet, wäre ich dir sehr dankbar. Wenn er immer nur 8 abarbeitet, läuft er glaube ich nach der Zeit über.

Gruß
Slev1n


8.1 .llb  API.llb (Größe: 440,82 KB / Downloads: 174)


Edit: Habe dir nun 3 Daten Frames simuliert mit zugehöriger ID. Je nach Zufall werden 3 oder 2 Frames "gelesen".

13.0 .vi  CAN_READ TEST V2.vi (Größe: 50,01 KB / Downloads: 183)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: