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 

Dieses Thema hat akzeptierte Lösungen:

CRC Berechnung: Codebeispiel vorhanden



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!

31.05.2011, 13:29 (Dieser Beitrag wurde zuletzt bearbeitet: 31.05.2011 14:00 von Takuro.)
Beitrag #1

Takuro Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 122
Registriert seit: May 2011

2010 SP1
2011
DE

31177
Deutschland
CRC Berechnung: Codebeispiel vorhanden
Hallo,

im Zuge meines Projektes soll ich nun einen Massenflussregler ansprechen. Dabei habe ich keine Treiber oder VIs für diese Geräte gefunden. (Sierra Instruments, Smart-Trak 2) Allerdings ließ sich im Internet eine Dokumentation finden, welche die ASCII Steuerbefehle enthält.

Das hab ich zwar auch noch nicht angewendet, aber in der Anleitung steht, dass jedes Signal aus 4 Byte Steuerzeichen + Einzustellender Wert + CRC+ cr besteht.

Steuerzeichen entnehme ich aus der Doku, Wert weiß ich selber Smile doch dann kommt die CRC. Ich muss also die Prüfsumme für den String berechnen. Dafür ist in der Doku je ein Code für C# und für VB gegeben. Im Forum habe ich Beispiele für die Berechnung gefunden, aber die scheinen bei mir nicht zu funktionieren. Der code wird also wohl kein Standart sein.

Ich selber behersche beide Sprachen nicht und einfaches kopieren mit Anleitung zur DLL erstellung aus dme Internet hat nicht funktioniert. Ich habe den code mir vorgenommen und versucht zu verstehen, um ihn anschließend nachzubauen in LabView. allerdings kann ich mit dem code so nicht viel anfangen, vor allem da "[...] * &H100" und ähnliches mir gar nichts sagt.

Ich wäre sehr dankbar, wenn mir entweder jemand den Code erklären könnte oder mir eine DLL erstellt, die mir dann beim Einbinden in LV eine VI liefert, die mir aus einem gegebenen String den CRC Wert berechnet. Den Code findet man unter dem obigen Link in der Doku. Auch wenn der zweite Weg sicher nicht der beste ist, aber um mich tiefgehend mit C auseinanderzusetzten hab ich eigentlich nicht die Zeit. Smile Also wenn es ohne geht, wäre das naütrlich top. Wink

Außerdem wäre noch die Frage, in welchem Format ich dann die Steuerbefehle an das externe Gerät senden muss. So im "Klartext" wie es in der Doku steht oder muss das vorher in Hex umgewandelt werden? da am anfang der Doku steht, dass alle Reichen bsi auf die beiden CRC-Bytes ASCII sind, würde ich die ASCII Nummern senden, also z.B. wenn in der Doku ein A steht dann eben 65 usw.

Besten Dank fürs lesen,

Takuro

Neu, aber motiviert. Nehme immer gern Verbesserungsvorschläge an!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
31.05.2011, 14:03
Beitrag #2

macmarvin Offline
CLA
***


Beiträge: 445
Registriert seit: Sep 2006

2014
2004
EN

81373
Deutschland
RE: CRC Berechnung: Codebeispiel vorhanden
Für gegebenen C-artigen Code kannst du versuchen das im Formulanode umzusetzen.
z.B. so
   
Keine Ahnung, ob das so tut, ist nur 'ne Idee.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.05.2011, 15:25 (Dieser Beitrag wurde zuletzt bearbeitet: 31.05.2011 15:32 von Takuro.)
Beitrag #3

Takuro Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 122
Registriert seit: May 2011

2010 SP1
2011
DE

31177
Deutschland
RE: CRC Berechnung: Codebeispiel vorhanden
OK, das hat mich insofern weitergebracht, dass ich jetzt die CRC in Labview habe.

Unten findet ihr nun meinen aktuellen Stand. Allerdings reagiert das Gerät nicht auf die Einstellung.

Laut Anweisung in der Doku ist der String wie folgt aufgebaut:

!Setf+value+CRC+cr

Ich möchte den Wert '1' übertragen.

Ich dachte, dass ich dies so realisiert habe. In dem Ausgabefeld erscheint 65081. Dies wäre dann die Prüfsumme, aber das sollen nun ja nur 2 Byte sein.

Das Gerät reagiert ohne Probleme auf die mitgelieferte Software, es ist also korrekt verbunden.

Ich hoffe auf weitere Einfälle. Smile

Grüße,

Takuro


Angehängte Datei(en) Thumbnail(s)
   

Neu, aber motiviert. Nehme immer gern Verbesserungsvorschläge an!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.05.2011, 16:52 (Dieser Beitrag wurde zuletzt bearbeitet: 31.05.2011 17:08 von Lucki.)
Beitrag #4

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: CRC Berechnung: Codebeispiel vorhanden
VIs zur Checksummen-Berechnung CRC16 gibt es viele, z.B im Labview Portal
In der von Dir genannten Doku ist im entscheidenden Beispiel ein Fehler (Rot):

/* If the string Sinv2.00 is sent through this routine the crc = 0x8f55 */
/* The complete command “Sinv2.000” will look like this in hex
0x53 0x69 0x62 0x76 0x32 0x2e 0x30 0x30 0x30 0x8f 0x55 0x0d */

Man weiß nicht, wie da sonst in der ganzen Doku noch geschludert worden ist. Die Checksummen-Püfung ist eigentlich genormt. Wenn also hier andere Ergebnisse herauskommen als mit dem üblichen CRC16-Algortihmus, dann war das möglicherweise von der Firma gar nicht beabsichtigt.

Anm zu: "In dem Ausgabefeld erscheint 65081"
Es handelt sich hier um die dezimale Darstellung einer U16-Zahl, die definitionsgemäß 2 Bytes lang ist. In HEX wäre das FE39
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.05.2011, 17:26
Beitrag #5

macmarvin Offline
CLA
***


Beiträge: 445
Registriert seit: Sep 2006

2014
2004
EN

81373
Deutschland
RE: CRC Berechnung: Codebeispiel vorhanden
/* If the string Sinv2.00 is sent through this routine the crc = 0x8f55 */
Genau das kommt aus dem Formula Node raus. Das sieht mir nach nem einfachen Dokumentationsfehler aus.

Herstellerspezifische CRCs gibts doch recht häufig... entweder eigene Polynome (die genormten kann man meist schnell durch probieren) oder ein erfundener Algorithmus der "irgendwas zyklisches" macht (deshalb pauschal als "CRC" deklariert) und die Zahlen solange verwurstet bis es ohne Doku/Beispielcode keinen Spass mehr macht. Das ist dann aber eben gewollt.

Manchmal hilft auch versuchen mitzuloggen was die Herstellersoftware so alles auf die Schnittstelle schreibt und damit zu verifizieren das man selbst die String richtig zusammen gebaut hat.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.06.2011, 09:53 (Dieser Beitrag wurde zuletzt bearbeitet: 01.06.2011 10:14 von Takuro.)
Beitrag #6

Takuro Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 122
Registriert seit: May 2011

2010 SP1
2011
DE

31177
Deutschland
RE: CRC Berechnung: Codebeispiel vorhanden

Akzeptierte Lösung

Hallo,

Dank eurer Tipps hab ich nun mehr verstanden und nun das ganze auch hinbekommen.

Es lag noch an zwei Punkten:

1) Der CRC wird als Hex ausgegeben. Allerdings hat die VI es als String interpretiert und somit beim senden nochmal umgerechnet.

2) Es werden vor dem CRC 2 Leerzeichen ausgegeben. Warum auch immer.

Wenn man das alles behebt, dann funktioniert es. Smile VI siehe unten.

Danke nochmal.

Grüße,

Takuro


Angehängte Datei(en) Thumbnail(s)
   

Neu, aber motiviert. Nehme immer gern Verbesserungsvorschläge an!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
01.06.2011, 17:17
Beitrag #7

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: CRC Berechnung: Codebeispiel vorhanden
(31.05.2011 17:26 )macmarvin schrieb:  Herstellerspezifische CRCs gibts doch recht häufig...
Du hast Recht, und auch hier ist das klar der Fall. Hier wird die U16-Zahl in einen String mit 2 Byte konvertiert, also nicht als hexadezimaler String mit 4 Byte. Das führt zu nicht druckbaren Zeichen. U.a. könnte auch das Steuerzeichen "Zeilenrücklauf" auftreten, und die Zeilenendekennung würde unbrauchbar. Damit das nicht passiert, werden im CRC-Programm die Zeichen 0x00 und 0x0D abgefangen und durch etwas anderes ersetzt. - und das ist auf jeden Fall firmenspezifisch.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  DLL- Datentypen nicht in LabVIEW vorhanden jak888 14 17.725 25.05.2011 13:25
Letzter Beitrag: rolfk
  Berechnung mit CLF-Knoten schneller? LLEA2 4 7.454 25.01.2008 10:07
Letzter Beitrag: rolfk

Gehe zu: