LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Bitzugriff

Solved!
Go to solution

Hallo!

Ist es generell möglich auf die einzelnen Bits einer Variable zuzugreifen?

Ich würde gerene einen Single Wert aus Bytes selbst "zusammenbauen".

Hintergrund ist der Datenaustausch über ein cRIO PN Modul mit einer Siemens CPU über Profinet. Aus dem Modul kann ich nur Byteweise auslesen und da es auf dem FPGA TArget nur wenig Typecast möglichkeiten gibt, müsste ich die einzelnen Bits des SGL adressieren können.

Oder hat jemand eine andere Idee?

Danke schonmal

0 Kudos
Message 1 of 10
(3,313 Views)

Hallo,

 

hier findest du ein Whitepaper (Englisch) über Bitmanipulation.

 

Freundliche Grüße,

James.

Greetings and Regards,
James
0 Kudos
Message 2 of 10
(3,295 Views)

Okay das kenne ich schon,

leider gilt das nur für Integerdarstellungen.

 

Wenn ich den SGL verwende wird das angepasst mit einem Coercion Dot.

Gerade das möchte ich ja nicht, ich muss ja die einzelnen Bits manipulieren in der IEEE Darstellung des SGL Typs...

0 Kudos
Message 3 of 10
(3,267 Views)

Typecast ist was Du dazu benötigst. Damit kannst Du den Single Precision in einen 32-Bit Integer veränderen, ohne dass an der Bitinformation etwas ändert.

Typecast.png

Rolf Kalbermatter
My Blog
0 Kudos
Message 4 of 10
(3,251 Views)

Das funktioniert nur nicht auf dem FPGA Smiley Surprised

0 Kudos
Message 5 of 10
(3,237 Views)

Es wird ein wenig undeutlich. Im ersten Post asagst Du dass Du nur Bytewise auslesen kannst, dann ist es aber doch ein SGL, (was kein Byte ist sondern 4 Bytes) und dann kommst Du plötzlich damit dass das alles auf FPGA muss.

Verwendung von SGL auf dem FPGA ist wohl Dein eigentliches Problem. Das geht zwar (seit ein paar LabVIEW Versionen) ist aber ziemlich ineffizient und qua Resourcenverbrauch auch sehr teuer. Du solltest das alles wenn immer möglich als Bytes, Integers oder allenfalls Fixed Point lassen und erst in normale Floating Point Zahlen umsetzen, wenn es auf dem Realtime-Teil Deines Programmes ankommt. Floating Point Implementation in Hardware (und FPGA ist Hardware) ist sehr kostbar.

Rolf Kalbermatter
My Blog
0 Kudos
Message 6 of 10
(3,233 Views)

Ok, also ich habe ein cRIO mit PN Modul (ComSoft) übe das ich auf den Profinet Bus zugreife. Ich schreibe und empfange nur ein paar Sollwerte, die ich aber direkt im FPGA bearbeiten / auswerten will.

Meine Anwendung ist nicht groß, ich muss nur schnell sein, daher der FPGA und dass das ineffizient ist weiß ich, aber wie gesagt meine Anwendung ist nicht groß und es ist möglich SGL zu benutzen und nur weil es viele Resourcen belegt, was ich mir in dem Fall leisten kann, ist das für mich kein Grund den SGL nicht zu verwenden 😉

Im Prinzip lese ich also 4 Bytes aus dem Profinet Stream aus und muss diese 1 zu 1 im FPGA der SGL Varibale zuweisen.
Wenn das nicht geht, werd ich mir alternativen überlegen müssen.

Ich hoffe jetzt ist das Problem etwas klarer geworden

Danke!

0 Kudos
Message 7 of 10
(3,224 Views)

Wenn Du Bitmanipulationen machen willst solltest Du den Wert halt wirklich als INT32 einlesen und nicht als SGL. Wo musst Du denn diesen Wert im FPGA als SGL zuweisen? Kannst Du die INT32 zu SGL Typecast nicht erst später machen, entweder im Realtime-Programm oder Deiner Hostapplikation?

 

Ansonsten wirst Du den Wert eventuel einmal als INT32 und einmal als SGL einlesen müssen.

Rolf Kalbermatter
My Blog
0 Kudos
Message 8 of 10
(3,212 Views)

Der RT Teil ist außen vor.

Der FPGA soll eine Formel berechnen mit ein paar Parametern, die übers Profinet kommen, durchführen und dann dem entsprechend digital Ausgänge setzen.

Eigentlich nichts großes.

 

Smiley Very Happy

0 Kudos
Message 9 of 10
(3,206 Views)
Solution
Accepted by topic author C.Axer

So nach Rücksprache mit NI gibt es anscheinend keine direkte Möglichkeit.
Es gibt jedoch eine Lösung durch Einbinden von Fremd- Code.

Infos hierzu gibt es hier:
http://forums.ni.com/t5/LabVIEW/Flatten-floating-point-on-FPGA-for-multichannel-DMA/m-p/2576179

0 Kudos
Message 10 of 10
(3,187 Views)